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