从侦听器调用时如何在 Unity 中更改场景?
How to change scene in Unity when called from listener?
所以正如我在这里被告知的那样,我不能从 Update() 函数调用场景更改。好的,否则我如何实现场景切换逻辑?
因此,例如,在 Update() 内部,我正在监听来自我的服务器的响应和请求:
private void Update() {
// A bunch of parsing stuff
switch (DataFromServer) {
case "ServerAllowedSceneChange":
SceneManager.LoadScene(DataFromServer[2]);
break;
}
}
这就是我对实现逻辑的看法,但是,Unity 似乎并不是这样做的。有人可以建议如何以 Unity 的工作方式做类似的事情:)
这种方法的缺点是,当我那样调用它时,场景还没有准备好使用。在场景更改调用之后,我尝试访问尚不存在的对象。并且所有关卡完成加载检查都不起作用。
所以如果我们回到代码示例,如果我这样做:
switch (DataFromServer) {
case "ServerAllowedSceneChange":
SceneManager.LoadScene(DataFromServer[2]);
GameObject objectFromSceneImSwithcingTo = GameObject.Find("objectFromSceneImSwithcingTo").gameObject;
break;
}
我从 Unity 收到 NullReference 错误。
SceneManager API 具有您可以订阅场景更改的事件。例如:
using UnityEngine.SceneManagement;
void OnEnable()
{
SceneManager.sceneLoaded += OnSceneLoaded;
}
void OnDisable()
{
SceneManager.sceneLoaded -= OnSceneLoaded;
}
private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
// all objects are loaded, call other methods
}
所以正如我在这里被告知的那样,我不能从 Update() 函数调用场景更改。好的,否则我如何实现场景切换逻辑?
因此,例如,在 Update() 内部,我正在监听来自我的服务器的响应和请求:
private void Update() {
// A bunch of parsing stuff
switch (DataFromServer) {
case "ServerAllowedSceneChange":
SceneManager.LoadScene(DataFromServer[2]);
break;
}
}
这就是我对实现逻辑的看法,但是,Unity 似乎并不是这样做的。有人可以建议如何以 Unity 的工作方式做类似的事情:)
这种方法的缺点是,当我那样调用它时,场景还没有准备好使用。在场景更改调用之后,我尝试访问尚不存在的对象。并且所有关卡完成加载检查都不起作用。
所以如果我们回到代码示例,如果我这样做:
switch (DataFromServer) {
case "ServerAllowedSceneChange":
SceneManager.LoadScene(DataFromServer[2]);
GameObject objectFromSceneImSwithcingTo = GameObject.Find("objectFromSceneImSwithcingTo").gameObject;
break;
}
我从 Unity 收到 NullReference 错误。
SceneManager API 具有您可以订阅场景更改的事件。例如:
using UnityEngine.SceneManagement;
void OnEnable()
{
SceneManager.sceneLoaded += OnSceneLoaded;
}
void OnDisable()
{
SceneManager.sceneLoaded -= OnSceneLoaded;
}
private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
// all objects are loaded, call other methods
}