个人unity学习手册

1.寻找某节点下的指定条件的子节点:
Attention:采用Foreach的遍历方法会把自己算计去哦,可以使用try-catch。

foreach (var VARIABLE in Cube.GetComponentsInChildren<Biaoji1>())//寻找挂载了Biaozhi1脚本的子节点
        {
    
    
            Debug.Log(VARIABLE.name);
        }

上图中Cube和Cube4,5,6没有挂载Biaoji1的脚本
上图中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

猜你喜欢

转载自blog.csdn.net/weixin_43381316/article/details/116713163