InstantiateAsync 能够执行,没有报错,能够返回 Succeeded。
如果我取 handle.Result 打印到控制台上,控制台上也能显示这个物体的名字,但是当我运行游戏的时候就是看不到他
对于我这个情况,出现这个问题的原因是,我在具有多个场景的时候执行了 InstantiateAsync,这个物体被实例化到当前激活的场景中,这可以用 Debug.LogError(SceneManager.GetActiveScene().name); 来查看当前激活的场景的名字
然后我在代码中很快就卸载了当前激活的场景,因此我刚刚实例化出来的物体就随着这个场景一起被删除了
对于我而言:
旧代码:
private void InitGame()
{
GameController.Instance.BeginGame();
Addressables.UnloadSceneAsync(lastLoadHandle);
}
我的 lastLoadHandle 是加载 Loading 界面的 handle,然后我希望是在加载完新界面的所有东西之后,才卸载 Loading 界面。这就会导致一个问题,当前激活场景是 Loading 场景,我实例化的新物体都会实例化到 Loading 场景中
然后我新场景完成加载之后,删掉了 Loading 界面,就顺便删掉了 Loading 场景里面的新物体
作为对比,新代码:
private void InitGame()
{
Debug.LogError(SceneManager.GetActiveScene().name);
Addressables.UnloadSceneAsync(lastLoadHandle);
GameController.Instance.BeginGame();
}
这样就可以顺利看到新物体在新场景中了
如果要达成我之前的想法,就是
private void InitGame()
{
Debug.LogError(SceneManager.GetActiveScene().name);
SceneManager.SetActiveScene(newScene);
Debug.LogError(SceneManager.GetActiveScene().name);
GameController.Instance.BeginGame();
// Game 场景加载完时卸载 loading 场景
GameController.Instance.OnGameInitCompleted += () => { Addressables.UnloadSceneAsync(lastLoadHandle); };
}
在控制台也能看到激活的场景的变化跟我的判断是一样的