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

相关推荐
suweijie7683 小时前
SpringCloudAlibaba | Sentinel从基础到进阶
java·大数据·sentinel
公贵买其鹿3 小时前
List深拷贝后,数据还是被串改
java
xlsw_7 小时前
java全栈day20--Web后端实战(Mybatis基础2)
java·开发语言·mybatis
神仙别闹7 小时前
基于java的改良版超级玛丽小游戏
java
异次元的归来8 小时前
Unity DOTS中的share component
unity·游戏引擎
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭8 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
暮湫8 小时前
泛型(2)
java
超爱吃士力架8 小时前
邀请逻辑
java·linux·后端
南宫生8 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
转码的小石8 小时前
12/21java基础
java