由于Find及GetChild性能消耗比较高所以尽量避免使用
可以通过与拖拽进行对比测试
-
原理:
-
Find原理:
GameObject.find()
无法获取天生就是active=false的对象- 为了防止对象重名,可以利用路径,路径是双刃剑,如果对象在面板的位置变动了,就无法找到
- 查找相当于递归查找,效率低下,最好把查找到的对象保存在内存中
- 不要在Update函数里面调用Find方法。
-
GetChild原理
- 需要知道对象的索引;
-
-
解决方案:
-
如果可以拖拽赋值直接进行拖拽赋值
-
创建对象管理单例进行统一管理
- 创建管理单例(需要挂载在场景中)
public class DummysMgr : MonoBehaviour { public static DummysMgr Instance; private void Awake() { if (Instance == null) { Instance = this; } else { Destroy(gameObject); } } //对应物体脚本对象引用 public ObjectParent objectParent; }
-
创建各类物体存储拖拽对象的脚本
以场景中的父文件夹为例,取名:ObjectParent
public class ObjectParent : MonoBehaviour { //单个物体 public GameObject AllBarriers; //数组 public GameObject[] AllAreas; }
- 调用
DummysMgr.Instance.objectParent.AllBarriers; DummysMgr.Instance.objectParent.AllAreas[0];
-