因此,正如我在此处被告知的那样,我无法从 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
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句