如何从侦听器调用Unity中的场景?

时间:2017-04-15 18:44:55

标签: c# unity3d unity5

因为我在这里被告知,我不能从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错误。

1 个答案:

答案 0 :(得分:1)

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
  }