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++)

{

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

相关推荐
天河归来8 小时前
第三方接口不稳定,如何让核心任务继续完成
java·大数据
chen_2278 小时前
godot做仪表hmi
游戏引擎·godot
Knight_AL8 小时前
Java 文件下载时文件名中的 `#` 被转换成 `%23`?一次 URL 编码与解码问题排查
java·开发语言
砚底藏山河9 小时前
python量化自定义周期 K 线合成
java·开发语言·数据库·python·金融
猿究院_夏燊10 小时前
MySQL 的四种隔离级别
java·数据库·mysql
码流子11 小时前
移动收费怎么做?手持终端+App+收费中心的架构实践
java·开发语言·架构
霸道流氓气质11 小时前
AI 流式对话与实时聊天平台:SSE 解码竞态、有状态会话隔离与背压取消的 Vue3 + Spring AI 生产级实战
java·人工智能·spring
云创智城-yuncitys11 小时前
YunParking 4.0:JDK 17 与 Spring Boot 3.2 的停车云升级
java·开发语言·spring boot
文丑颜不良啊11 小时前
LeetCode1661~1680题目解析
java·leetcode
子非鱼@Itfuture11 小时前
关于前后端联调中登录状态/登录信息失效?
java·前端