Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity无法设置活动场景_C#_Unity3d_Unity5 - Fatal编程技术网

C# Unity无法设置活动场景

C# Unity无法设置活动场景,c#,unity3d,unity5,C#,Unity3d,Unity5,我正在切换场景: SceneManager.LoadScene("Scene2"); Debug.Log("Current scene: " + SceneManager.GetActiveScene().name); 调试说: Current scene: Scene1 我也试过: SceneManager.LoadScene("Scene2"); StartCoroutine(WaitUntilEndOfFrame()); Debug.Log("Current scene: " + Sc

我正在切换场景:

SceneManager.LoadScene("Scene2");
Debug.Log("Current scene: " + SceneManager.GetActiveScene().name);
调试说:

Current scene: Scene1
我也试过:

SceneManager.LoadScene("Scene2");
StartCoroutine(WaitUntilEndOfFrame());
Debug.Log("Current scene: " + SceneManager.GetActiveScene().name);

private IEnumerator WaitUntilEndOfFrame() {

yield return new WaitForEndOfFrame();

}
还是说

Current scene: Scene1.
我尝试了SetActiveScene(SceneManager.GetSceneByBuildId(1))


我试着把它作为一个协同程序来启动,我试过了,等了5秒钟。静止活动场景是场景1,即使场景在统一中发生变化。当
SceneManager.LoadScene(“Scene2”)时,活动场景不会发生任何更改…

时,场景直到下一帧才卸载。因此,如果
Debug.Log(“当前场景:+SceneManager.GetActiveScene().name”)调用之后,它将返回当前场景的名称,而不是刚刚加载的场景

即使您使用协同程序并等待帧,这也不会起作用,因为在帧之后,脚本和游戏对象将被销毁,您的
Debug.Log(“当前场景:+SceneManager.GetActiveScene().name”)无法运行

不要在
SceneManager.LoadScene(“Scene2”)之后立即调用
SceneManager.GetActiveScene().name
。将
SceneManager.GetActiveScene().name
放入
Awake
Start
函数中,您将能够在加载场景后获取场景名称

编辑:

另一件事是订阅活动。现在,调用
SceneManager.LoadScene(“Scene2”)。场景加载完成后,应调用注册的函数

void Start()
{
    SceneManager.LoadScene("Scene2");
}

void OnEnable()
{
    SceneManager.sceneLoaded += this.OnLoadCallback;
}

private void OnLoadCallback(Scene scene, LoadSceneMode sceneMode)
{
    UnityEngine.Debug.Log("Current scene: " + SceneManager.GetActiveScene().name);
}

最后,如果不将场景添加到构建设置中,
SceneManager.LoadScene(“Scene2”)甚至不起作用,因此当前场景仍将是当前场景。下面是如何将场景添加到构建设置中


场景管理器加载场景(“场景2”)时,场景直到下一帧才卸载。因此,如果
Debug.Log(“当前场景:+SceneManager.GetActiveScene().name”)调用之后,它将返回当前场景的名称,而不是刚刚加载的场景

即使您使用协同程序并等待帧,这也不会起作用,因为在帧之后,脚本和游戏对象将被销毁,您的
Debug.Log(“当前场景:+SceneManager.GetActiveScene().name”)无法运行

不要在
SceneManager.LoadScene(“Scene2”)之后立即调用
SceneManager.GetActiveScene().name
。将
SceneManager.GetActiveScene().name
放入
Awake
Start
函数中,您将能够在加载场景后获取场景名称

编辑:

另一件事是订阅活动。现在,调用
SceneManager.LoadScene(“Scene2”)。场景加载完成后,应调用注册的函数

void Start()
{
    SceneManager.LoadScene("Scene2");
}

void OnEnable()
{
    SceneManager.sceneLoaded += this.OnLoadCallback;
}

private void OnLoadCallback(Scene scene, LoadSceneMode sceneMode)
{
    UnityEngine.Debug.Log("Current scene: " + SceneManager.GetActiveScene().name);
}

最后,如果不将场景添加到构建设置中,
SceneManager.LoadScene(“Scene2”)甚至不起作用,因此当前场景仍将是当前场景。下面是如何将场景添加到构建设置中


请发布场景设置的屏幕截图。@程序员我不确定您指的是什么。渲染设置?他们改变了一点UI逻辑,你能澄清一下你在找什么吗?很抱歉给您带来不便!请发布您的场景设置的屏幕截图。@程序员我不确定您指的是什么。渲染设置?他们改变了一点UI逻辑,你能澄清一下你在找什么吗?很抱歉给您带来不便!谢谢你的回答!是否有一种方法可以按程序等待,直到使用协同程序或任何其他方法加载该级别?我更愿意保留我的线性逻辑流,但如果不是这样的话,我会重新编写它。注意:即使是Update()也不起作用?不,甚至可以使用
Update()
函数。就像我说的,即使是协同程序也不能做到这一点。请看我在回答中对
SceneManager.sceneLoaded
所做的编辑。这是另一种方法。谢谢你的回答!是否有一种方法可以按程序等待,直到使用协同程序或任何其他方法加载该级别?我更愿意保留我的线性逻辑流,但如果不是这样的话,我会重新编写它。注意:即使是Update()也不起作用?不,甚至可以使用
Update()
函数。就像我说的,即使是协同程序也不能做到这一点。请看我在回答中对
SceneManager.sceneLoaded
所做的编辑。这是另一种方法。