Unity-Transform类-父子关系

Transform拓展方法练习

public static class Tuozhan

{

拓展方法,把子对象按名字长度排序

public static void Sortchild(this Transform obj)

{

List<Transform> Indexs = new List<Transform>();

for (int i = 0; i < obj.childCount; i++)

{

Indexs.Add(obj.GetChild(i));

}

Indexs.Sort((a, b) =>

{

if(a.name.Length> b.name.Length)

return 1;

else

return -1;

});

for (int i = 0; i < Indexs.Count; i++)

{

Indexs[i].SetSiblingIndex(i);

}

}

拓展方法,根据名字找子对象,儿子的儿子也能找到的那种

public static Transform FindDeepChild(this Transform obj, string name)

{

Transform target = null;

if (obj.Find(name) != null)

{

target = obj.Find(name);

return target;

}

//如果找到了就返回

//找不到就让儿子找

for (int i = 0; i < obj.childCount; i++)

{

if (obj.GetChild(i).FindDeepChild(name) != null) //如果儿子找到了就返回

return target = obj.GetChild(i).FindDeepChild(name);

}

return target;

}

}

父子关系API

获取和设置父对象transform.SetParent()

//获取父对象

//print(this.transform.parent.name);

//设置父对象 断绝父子关系

//this.transform.parent = null;

//设置父对象 认爸爸

//this.transform.parent = GameObject.Find("Father2").transform;

//通过API来进行父子关系的设置

//this.transform.SetParent(null);//断绝父子关系

//this.transform.SetParent(GameObject.Find("Father2").transform);//认爸爸

参数一:我的父亲
参数二:是否保留世界坐标的 位置 角度 缩放 信息
true 会保留 世界坐标下的状态 和 父对象 进行计算 得到本地坐标系的信息
false 不会保留 会直接把世界坐标系下的 位置角度缩放 直接赋值到 本地坐标系下

this.transform.SetParent(GameObject.Find("Father3").transform, false);

抛妻弃子transform.DetachChildren();

就是和自己的所有儿子 断绝关系 没有父子关系了

this.transform.DetachChildren();

获取子对象

按名字查找儿子transform.Find能找失活对象

//找到儿子的 transform信息

//Find方法 是能够找到 失活的对象的 !!!!! GameObject相关的 查找 是不能找到失活对象的

print(this.transform.Find("Cube (1)").name);

//他只能找到自己的儿子 找不到自己的孙子 !!!!!!

//print(this.transform.Find("GameObject").name);

//虽然它的效率 比GameObject.Find相关 要高一些 但是 前提是你必须知道父亲是谁 才能找

遍历儿子transform.childCount

transform.GetChild(0)

//如何得到有多少个儿子

//1.失活的儿子也会算数量

//2.找不到孙子 所以孙子不会算数量

print(this.transform.childCount);

//通过索引号 去得到自己对应的儿子

//如果编号 超出了儿子数量的范围 那会直接报错的

//返回值 是 transform 可以得到对应儿子的 位置相关信息

this.transform.GetChild(0);

for (int i = 0; i < this.transform.childCount; i++)

{

print("儿子的名字:" + this.transform.GetChild(i).name);

}

儿子的操作

判断自己的爸爸是谁transform.IsChildOf()

//一个对象 判断自己是不是另一个对象的儿子

if(son.IsChildOf(this.transform))

{

print("是我的儿子");

}

得到自己作为儿子的编号.GetSiblingIndex()

print(son.GetSiblingIndex());

把自己设置为第一个儿子

son.SetAsFirstSibling();

最后一个儿子

son.SetAsLastSibling();

指定个儿子

son.SetSiblingIndex(1); 就算你填的数量 超出了范围(负数或者更大的数) 不会报错 会直接设置成最后一个编号

相关推荐
技术无疆1 小时前
快速开发与维护:探索 AndroidAnnotations
android·java·android studio·android-studio·androidx·代码注入
架构文摘JGWZ4 小时前
Java 23 的12 个新特性!!
java·开发语言·学习
拾光师5 小时前
spring获取当前request
java·后端·spring
aPurpleBerry5 小时前
neo4j安装启动教程+对应的jdk配置
java·neo4j
我是苏苏5 小时前
Web开发:ABP框架2——入门级别的增删改查Demo
java·开发语言
xujinwei_gingko5 小时前
Spring IOC容器Bean对象管理-Java Config方式
java·spring
2301_789985945 小时前
Java语言程序设计基础篇_编程练习题*18.29(某个目录下的文件数目)
java·开发语言·学习
IT学长编程5 小时前
计算机毕业设计 教师科研信息管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
java·毕业设计·springboot·毕业论文·计算机毕业设计选题·计算机毕业设计开题报告·教师科研管理系统
m0_571957585 小时前
Java | Leetcode Java题解之第406题根据身高重建队列
java·leetcode·题解
程序猿小D5 小时前
第二百三十五节 JPA教程 - JPA Lob列示例
java·数据库·windows·oracle·jdk·jpa