查詢和收集 GameObjects
使用哪種方法
在執行時查詢 GameObjects 時要小心,因為這可能會消耗資源。特別是:不要在每幀呼叫一次或多次的方法中執行 FindObjectOfType 或 Find in Update,FixedUpdate 或更多。
- 僅在必要時呼叫執行時方法
FindObjectOfType
和Find
- 與其他基於字串的方法相比,
FindGameObjectWithTag
具有非常好的效能。Unity 在標記物件上保留單獨的選項卡,並查詢那些而不是整個場景。 - 在編輯器建立的靜態 GameObjects(諸如 UI 元素和預製件)使用序列化的遊戲物體參考在編輯器
- 將自己管理的 ListObjects 列表儲存在 List 或 Arrays 中
- 通常,如果你例項化大量相同型別的 GameObject,請檢視 Object Pooling
- 快取搜尋結果以避免一次又一次地執行昂貴的搜尋方法。
走得更遠
除了 Unity 提供的方法之外,設計自己的搜尋和收集方法相對容易。
-
如果是
FindObjectsOfType()
,你可以讓你的指令碼在static
集合中保留自己的列表。迭代準備好的物件列表比從場景中搜尋和檢查物件要快得多。 -
或者製作一個指令碼,將其例項儲存在基於
Dictionary
的字串中,並且你可以擴充套件一個簡單的標記系統。