从侦听器调用时如何在 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
  }