查詢和收集 GameObjects

使用哪種方法

在執行時查詢 GameObjects 時要小心,因為這可能會消耗資源。特別是:不要在每幀呼叫一次或多次的方法中執行 FindObjectOfType 或 Find in Update,FixedUpdate 或更多。

  • 僅在必要時呼叫執行時方法 FindObjectOfTypeFind
  • 與其他基於字串的方法相比,FindGameObjectWithTag 具有非常好的效能。Unity 在標記物件上保留單獨的選項卡,並查詢那些而不是整個場景。
  • 在編輯器建立的靜態 GameObjects(諸如 UI 元素和預製件)使用序列化的遊戲物體參考在編輯器
  • 將自己管理的 ListObjects 列表儲存在 List 或 Arrays 中
  • 通常,如果你例項化大量相同型別的 GameObject,請檢視 Object Pooling
  • 快取搜尋結果以避免一次又一次地執行昂貴的搜尋方法。

走得更遠

除了 Unity 提供的方法之外,設計自己的搜尋和收集方法相對容易。

  • 如果是 FindObjectsOfType(),你可以讓你的指令碼在 static 集合中保留自己的列表。迭代準備好的物件列表比從場景中搜尋和檢查物件要快得多。

  • 或者製作一個指令碼,將其例項儲存在基於 Dictionary 的字串中,並且你可以擴充套件一個簡單的標記系統。