Find及GetChild替代方案

由于FindGetChild性能消耗比较高所以尽量避免使用
可以通过与拖拽进行对比测试

  1. 原理:

    1. Find原理:

      1. GameObject.find()无法获取天生就是active=false的对象
      2. 为了防止对象重名,可以利用路径,路径是双刃剑,如果对象在面板的位置变动了,就无法找到
      3. 查找相当于递归查找,效率低下,最好把查找到的对象保存在内存中
      4. 不要在Update函数里面调用Find方法。
    2. GetChild原理

      1. 需要知道对象的索引;
  2. 解决方案:

    1. 如果可以拖拽赋值直接进行拖拽赋值

    2. 创建对象管理单例进行统一管理

      1. 创建管理单例(需要挂载在场景中)
      public class DummysMgr : MonoBehaviour
      {
          public static DummysMgr Instance;
      
          private void Awake()
          {
              if (Instance == null)
              {
                  Instance = this;
              }
              else
              {
                  Destroy(gameObject);
              }
          }
      
          //对应物体脚本对象引用
          public ObjectParent objectParent;
      
      }
      
      1. 创建各类物体存储拖拽对象的脚本

        以场景中的父文件夹为例,取名:ObjectParent

      public class ObjectParent : MonoBehaviour
      {
          //单个物体
          public GameObject AllBarriers;
          
          //数组
          public GameObject[] AllAreas;
      }
      
      1. 调用
      DummysMgr.Instance.objectParent.AllBarriers;
      DummysMgr.Instance.objectParent.AllAreas[0];
      

猜你喜欢

转载自blog.csdn.net/Xz616/article/details/132628642
今日推荐