繁体   English   中英

从监听器调用时如何更改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
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM