在Unity遊戲開發中,跨場景持久的遊戲管理器至關重要。 然而,一個常見的問題是腳本在開始時只執行一次,儘管它存在於所有場景中。
Unity 缺乏自動預載機制。 如果沒有專用的預先載入場景,您的遊戲管理器的初始化和基本元件將無法在場景轉換中倖存下來。
解決此問題的方法如下:
所有核心遊戲管理器功能(資料庫連線、聲音管理、分數追蹤等)都應作為元件附加到預先載入場景中的「_app」遊戲物件。 這保證了它們在所有後續場景中的持久性。
有兩種方法可以從其他腳本存取遊戲物件:
方法一:FindObjectOfType
在腳本的 Awake()
方法中使用它:
<code class="language-C#">Sound sound = Object.FindObjectOfType<Sound>(); Game game = Object.FindObjectOfType<Game>();</code>
方法二:靜態全域變數(更有效率)
更簡化的方法使用靜態全域變數:
<code class="language-C#">public static class GameManager { public static Sound sound; public static Game game; static GameManager() { GameObject app = GameObject.Find("_app"); sound = app.GetComponent<Sound>(); game = app.GetComponent<Game>(); } }</code>
透過建立預先載入場景並將遊戲管理器元件附加到持久性遊戲對象,您可以確保所有 Unity 場景的一致執行。 選擇最適合您的編碼風格的物件存取方法。
以上是為什麼我的 Unity 遊戲管理器腳本只會運行一次?的詳細內容。更多資訊請關注PHP中文網其他相關文章!