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); 就算你填的数量 超出了范围(负数或者更大的数) 不会报错 会直接设置成最后一个编号

相关推荐
知其然亦知其所以然4 分钟前
JVM社招面试题:队列和栈是什么?有什么区别?我在面试现场讲了个故事…
java·后端·面试
harmful_sheep11 分钟前
Spring 为何需要三级缓存解决循环依赖,而不是二级缓存
java·spring·缓存
星辰大海的精灵13 分钟前
如何确保全球数据管道中的跨时区数据完整性和一致性
java·后端·架构
大大。16 分钟前
van-tabbar-item选中active数据变了,图标没变
java·服务器·前端
nc_kai19 分钟前
Flutter 之 每日翻译 PreferredSizeWidget
java·前端·flutter
Codebee28 分钟前
OneCode:AI时代的先锋——注解驱动技术引领开发范式变革
java
勤奋的知更鸟29 分钟前
Java 编程之状态模式
java·开发语言·状态模式
架构个驾驾39 分钟前
深入浅出MyBatis-Plus实战指南
java
SimonKing43 分钟前
解锁万能文件内容分析工具:Apache Tika
java·后端·程序员