5-21 Integrate All FindObjectOfType Into One Class
本章要介紹大家一個我覺得很方便的方法,主要因為最近遇到了要尋找某些Component時遇到困難,隨著專案的規模越來越大,我忘記了早期寫的一些Component要用FindObjectOfType來呼叫,該特定的Component在場景中僅會有一個。考量到使用這類型的Component時每次都用使用FindObjectOfType應該滿耗效能的,所以我就統一將這類型的Component集合在一個Class中。 首先我用Search/Find in Files的功能,尋找一下專案中有哪些地方使用到FindObjectOfType。 在輸入框中輸入FindObjectOfType,按下Find。 下列就會列出有用到FindObjectOfType的地方,如我的遊戲專案中有PlayerMovement、CameraRaycaster、InventorySystem。 再來我建立一個新的Script名為Game.cs,然後依照需要撰寫相關的FindObjectOfType,使用一個依賴MonoBehaviour的單例模式,寫起來很簡單。 using System.Collections; using System.Collections.Generic; using UnityEngine; using RPG.Character; using RPG.Inventory; using RPG.CameraUI; namespace RPG.Core{ public class Game : MonoBehaviour { public static Game Instance; [HideInInspector] public PlayerMovement playerMovement; [HideInInspector] public InventorySystem inventorySystem; [HideInInspector] public CameraRaycaster cameraRaycaster; WeaponSystem playerWeaponSystem; void Awake(){ Instance = this; playerMovement = FindObject