查找和收集 GameObjects

使用哪种方法

在运行时查找 GameObjects 时要小心,因为这可能会消耗资源。特别是:不要在每帧调用一次或多次的方法中运行 FindObjectOfType 或 Find in Update,FixedUpdate 或更多。

  • 仅在必要时调用运行时方法 FindObjectOfTypeFind
  • 与其他基于字符串的方法相比,FindGameObjectWithTag 具有非常好的性能。Unity 在标记对象上保留单独的选项卡,并查询那些而不是整个场景。
  • 在编辑器创建的静态 GameObjects(诸如 UI 元素和预制件)使用串行化的游戏物体参考在编辑器
  • 将自己管理的 ListObjects 列表保存在 List 或 Arrays 中
  • 通常,如果你实例化大量相同类型的 GameObject,请查看 Object Pooling
  • 缓存搜索结果以避免一次又一次地运行昂贵的搜索方法。

走得更远

除了 Unity 提供的方法之外,设计自己的搜索和收集方法相对容易。

  • 如果是 FindObjectsOfType(),你可以让你的脚本在 static 集合中保留自己的列表。迭代准备好的对象列表比从场景中搜索和检查对象要快得多。

  • 或者制作一个脚本,将其实例存储在基于 Dictionary 的字符串中,并且你可以扩展一个简单的标记系统。