我試圖從一個場景轉移到另一個場景并在發生這種情況時觸發一個功能。因此,當我按下主菜單頁面上的玩游戲按鈕時,它會加載一個開始構建世界的功能。我有構建世界的功能,但是一旦我將它附加到一個按鈕上它就停止工作了。到目前為止,我認為這取決于我沒有完全理解從另一個類調用函數以使其正常運行的方法。我開始將我的 GameObject 定義為:private static GameOjbect Play;這不允許我在統一編輯器中為其分配 GameObject。因此,我采用了以下使用方法:GameObject Play = GameObject.Find("PlayScreen");當此功能開始時,我的 GameObeject 在層次結構中處于活動狀態,但程序仍然無法正常運行。為了測試程序在哪里遇到我使用的問題:Debug.Log(Play);我相信這只會將“PlayScreen”輸出到調試日志,因為這是我正在搜索的游戲對象,但這只會返回“Null”,并且我的程序不會進一步進行,這正在創建一堵墻。以下是我的主菜單代碼:public class MainMenu : MonoBehaviour { public GameObject PlayScene; public GameObject SettingsScreen; public void PlayGame() { SceneManager.LoadScene("InGame"); Debug.Log("Loading startup..."); WorldBuilder.Awake(); }}以下是我的 WorldBuilding 功能:public class WorldBuilder:MonoBehaviour { public static GameObject Play; public static void Awake() { Debug.Log("Finding Scene..."); GameObject Play = GameObject.Find("PlayScreen"); Debug.Log(Play); } }為什么我的程序找不到游戲對象?我還是 C# 的新手,所以任何形式的幫助都值得贊賞。謝謝你
1 回答

慕妹3242003
TA貢獻1824條經驗 獲得超6個贊
不要將 Awake 函數設為靜態。如果你這樣做,Unity 不會調用它。此外,當您這樣做時,您正在創建一個局部變量GameObject Play = GameObject.Find("PlayScreen");。如果你想把它保存在一個靜態變量中,你不應該這樣做。見下文:
public class WorldBuilder : MonoBehaviour {
public static GameObject Play;
public static void Awake()
{
Debug.Log("Finding Scene...");
WorldBuilder.Play = GameObject.Find("PlayScreen");
Debug.Log(Play);
}
}
另外,刪除 PlayGame 中的調用:
public void PlayGame()
{
SceneManager.LoadScene("InGame");
Debug.Log("Loading startup...");
}
- 1 回答
- 0 關注
- 195 瀏覽
添加回答
舉報
0/150
提交
取消