1.寻找某节点下的指定条件的子节点:
Attention:采用Foreach的遍历方法会把自己算计去哦,可以使用try-catch。
foreach (var VARIABLE in Cube.GetComponentsInChildren<Biaoji1>())//寻找挂载了Biaozhi1脚本的子节点
{
Debug.Log(VARIABLE.name);
}
上图中Cube和Cube4,5,6没有挂载Biaoji1的脚本
打印结果:
通过这种迭代器遍历(暂不清楚是深度还是广度遍历)的方法可以遍历到挂载指定组件的子物体包括自己,通俗讲就是从包括自己和所有Active为true的子节点的集合中寻找出含有指定组件的节点,如果还要添加tag和name等筛选,可以在foreach中添加相关的if语句作为筛选规则。
2.获取当前节点和父节点的相对路径:
private string GetRoute(Transform transform, string splitter = "/")
{
string result = transform.name;
var parent = transform.parent;
while (parent.parent != null)
{
result = $"{parent.name}{splitter}{result}";
parent = parent.parent;
}
return result;
}
//通过下面的语句可以直接找到对应的子节点
transform.Find(sPath)
3.根据路径直接寻找到子节点
实验来看,路径直接寻找速度比foreach快n倍。
Transform t = Cube.Find("Cube (6)");
4.测试函数的执行时长:
System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
stopwatch.Start(); // 开始监视代码
//____________________代码
stopwatch.Stop(); // 停止监视
TimeSpan timeSpan = stopwatch.Elapsed; // 获取总时间
double hours = timeSpan.TotalHours; // 小时
double minutes = timeSpan.TotalMinutes; // 分钟
double seconds = timeSpan.TotalSeconds; // 秒数
double milliseconds = timeSpan.TotalMilliseconds; // 毫秒数
5.Unity中,层级遮罩是通过位掩码来实现,unity使用int32来表示层级,而int占 4 字节,表示 32 位整数(0与1的组合),这就是为什么会有32个层级的原因。Layer可用于遮罩,Raycast检测,相机渲染等。
int bitmask = LayerMask.GetMask("bg");
//十进制表示
Debug.Log(bitmask);
//输出:256
//二进制表示
Debug.Log(Convert.ToString(bitmask, 2).PadLeft(32, '0'));
//输出:00000000000000000000000100000000
//等同于
int bitmask = 1<< 8;
//x>>1;//相当于x/=2
//x<<1;//相当于x*=2
//x>>2;//x/=4
//x<<2;//x*=4
//x>>3;//x/=8
//x<<3;//x*=8