📅  最后修改于: 2023-12-03 15:05:45.122000             🧑  作者: Mango
在 Unity3D 中,场景(Scene)是游戏中的不同界面、关卡等区域,场景之间的切换是游戏中重要的一部分,本文将介绍如何在 C# 代码中实现 Unity 场景切换。
在 Unity 中,使用 SceneManager 类来进行场景的加载和卸载操作。首先,在使用 SceneManager 之前,需要在代码中添加如下的命名空间:
using UnityEngine.SceneManagement;
要加载一个场景,可以使用 SceneManager 的 LoadScene
方法。如果要加载的场景是另一个名称不同的场景,可以提供一个场景名称:
SceneManager.LoadScene("MyOtherScene");
也可以使用场景在 Build Settings 中的索引来加载场景:
SceneManager.LoadScene(1);
如果你想在加载时指定加载方式,可以将加载场景的方式作为一个可选参数传入 LoadScene
方法中。例如,如果你想要使用 Additive 方式加载场景,可以这样调用:
SceneManager.LoadScene("MyOtherScene", LoadSceneMode.Additive);
有三种加载方式可供选择:
LoadSceneMode.Single
:此方式直接替换当前场景,不考虑当前场景是否保存过。LoadSceneMode.Additive
:此方式将新场景加载到现有场景之上。可以多次调用此方法来加载多个场景。LoadSceneMode.Single
,Async:此方式是异步的,它会在后台加载场景并返回一个 AsyncOperation 对象。使用此对象可以检查加载进度和取消操作。卸载场景同样使用 SceneManager 类的 UnloadSceneAsync
方法。与 LoadScene 方法一样,可以指定要卸载的场景的名称或构建索引。例如:
SceneManager.UnloadSceneAsync("MyScene");
可以指定多个场景进行卸载:
SceneManager.UnloadSceneAsync("MyScene1");
SceneManager.UnloadSceneAsync("MyScene2");
Unity 的场景切换分为两个阶段:加载新场景和卸载旧场景。
SceneManager 类的 LoadScene
方法是直接替换当前场景。如果你想要进行场景切换,需要手动卸载旧场景并加载新场景。下面是一种方式实现场景切换:
public void ChangeScene(string sceneName)
{
StartCoroutine(LoadSceneCoroutine(sceneName));
}
private IEnumerator LoadSceneCoroutine(string sceneName)
{
// 开始异步加载新场景
AsyncOperation asyncLoad = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Single);
// 等待新场景加载完成
while (!asyncLoad.isDone)
{
Debug.Log($"加载新场景 {sceneName} 进度:{asyncLoad.progress * 100}%");
yield return null;
}
// 卸载旧场景
SceneManager.UnloadSceneAsync(SceneManager.GetActiveScene().name);
}
这个方法开启了一个协程,异步地加载新场景,并将进度输出到日志中。当新场景加载完成后,该方法会卸载旧场景。如果你需要在切换场景之前做一些其他操作,可以在开始加载新场景之前的任何时候执行它们,只要在执行 UnloadSceneAsync
方法时等待旧场景的卸载即可。
在场景之间传递数据需要使用某种方法。这里介绍三种常见的方法:
下面是 PlayerPrefs 的示例。
// 在切换场景之前设置玩家积分
PlayerPrefs.SetInt("Score", 1000);
SceneManager.LoadScene("MyOtherScene");
// 在另一个场景中检索玩家积分
int score = PlayerPrefs.GetInt("Score");
在本文中,我们介绍了 SceneManager 类的用法,并说明了如何使用它来加载和卸载场景。我们还展示了一种方式来切换场景,并说明了如何在场景之间传递数据。希望这篇文章对你有帮助!