2017-04-14 57 views
0

我切換場景:團結不能設置ActiveScene

SceneManager.LoadScene("Scene2"); 
Debug.Log("Current scene: " + SceneManager.GetActiveScene().name); 

調試說:

Current scene: Scene1 

我已經試過這也:

SceneManager.LoadScene("Scene2"); 
StartCoroutine(WaitUntilEndOfFrame()); 
Debug.Log("Current scene: " + SceneManager.GetActiveScene().name); 

private IEnumerator WaitUntilEndOfFrame() { 

yield return new WaitForEndOfFrame(); 

} 

還說

Current scene: Scene1. 

我試過SetActiveScene(SceneManager.GetSceneByBuildId(1));

我已經嘗試啓動,作爲協程,我試過了,並等待5秒。即使場景在Unity中更改,靜態ActiveScene仍然是Scene1。沒有什麼會改變活動的場景...

+0

請張貼你的*場景設置*的截圖。 – Programmer

+0

@編程器我不確定你指的是什麼。渲染設置?他們已經改變了一些UI邏輯,你能否澄清一下你在找什麼?對造成的不便表示歉意! – Micard

回答

2

當調用SceneManager.LoadScene("Scene2");時,場景不會卸載到下一幀。因此,如果在此之後調用Debug.Log("Current scene: " + SceneManager.GetActiveScene().name);,它將返回當前場景的名稱,而不是該場景剛加載。

即使使用協程,等待幀,這是行不通的,因爲任何一幀後,劇本和遊戲對象將被銷燬,您Debug.Log("Current scene: " + SceneManager.GetActiveScene().name);不會得到運行。

請勿在SceneManager.LoadScene("Scene2");之後撥打SceneManager.GetActiveScene().name。將SceneManager.GetActiveScene().name放在AwakeStart函數中,您將能夠在場景加載後獲取場景名稱。

編輯:

的另一件事情做的是訂閱SceneManager.sceneLoaded事件。現在,撥打SceneManager.LoadScene("Scene2");。當場景完成加載時,應該調用已註冊的函數。

void Start() 
{ 
    SceneManager.LoadScene("Scene2"); 
} 

void OnEnable() 
{ 
    SceneManager.sceneLoaded += this.OnLoadCallback; 
} 

private void OnLoadCallback(Scene scene, LoadSceneMode sceneMode) 
{ 
    UnityEngine.Debug.Log("Current scene: " + SceneManager.GetActiveScene().name); 
} 

最後,如果你不將場景添加到生成設置SceneManager.LoadScene("Scene2");甚至不會工作,所以當前場景仍將當前場景。以下是如何將場景添加到構建設置

enter image description here

+0

謝謝你的回答!有沒有一種方法可以程序化地等待,直到使用協程或其他方法加載關卡爲止?我寧願保留我的線性邏輯流程,但如果情況並非如此,那麼我會重新編寫它。 P.S .:甚至更新()將不起作用? – Micard

+0

不能使用'Update()'函數。就像我說的,即使協同程序也不能這樣做。看看我在關於'SceneManager.sceneLoaded'的回答中所做的**編輯**。這是另一種方式。 – Programmer