首頁 >後端開發 >C++ >為什麼我的 Unity 遊戲管理器腳本只會運行一次?

為什麼我的 Unity 遊戲管理器腳本只會運行一次?

Patricia Arquette
Patricia Arquette原創
2025-01-14 07:01:47926瀏覽

Why Does My Unity Game Manager Script Only Run Once?

Unity 遊戲管理器故障排除:單執行問題

問題概述

在Unity遊戲開發中,跨場景持久的遊戲管理器至關重要。 然而,一個常見的問題是腳本在開始時只執行一次,儘管它存在於所有場景中。

根本原因:缺少預先載入場景

Unity 缺乏自動預載機制。 如果沒有專用的預先載入場景,您的遊戲管理器的初始化和基本元件將無法在場景轉換中倖存下來。

解決方案:實作預先載入場景

解決此問題的方法如下:

  1. 建立預先載入場景:新增一個新場景(例如「預先載入」)並在建置設定中將其設為場景 0。
  2. 新增遊戲物件:在「Preload」場景中,建立一個名為「_app」的空白遊戲物件。
  3. 啟用「載入時不銷毀」:在「_app」的檢查器中,勾選「載入時不銷毀」方塊。

附加遊戲管理器組件

所有核心遊戲管理器功能(資料庫連線、聲音管理、分數追蹤等)都應作為元件附加到預先載入場景中的「_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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn