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

相关推荐
IAUTOMOBILE34 分钟前
Python 流程控制与函数定义:从调试现场到工程实践
java·前端·python
hutengyi34 分钟前
PostgreSQL版本选择
java
皮皮林55140 分钟前
重磅!JetBrains 正式发布全新的 AI 开发工具,定名 AI IDE AIR
java·intellij idea
MX_93591 小时前
SpringMVC请求参数
java·后端·spring·servlet·apache
ID_180079054731 小时前
小红书笔记评论 API,Python 调用示例与完整 JSON 返回参考
java·开发语言
lifewange1 小时前
java连接Mysql数据库
java·数据库·mysql
云原生指北2 小时前
命令行四件套:fd-rg-fzf-bat
java·大数据·elasticsearch
人间打气筒(Ada)2 小时前
go实战案例:如何通过 Service Meh 实现熔断和限流
java·开发语言·golang·web·istio·service mesh·熔断限流
主宰者3 小时前
C# CommunityToolkit.Mvvm全局事件
java·前端·c#
计算机学姐4 小时前
基于SpringBoot的咖啡店管理系统【个性化推荐+数据可视化统计+配送信息】
java·vue.js·spring boot·后端·mysql·信息可视化·tomcat