Unity场景切换可使用以下方法:
1、SceneManager.LoadScene()方法:
using UnityEngine.SceneManagement;
// 切换到Scene2场景
SceneManager.LoadScene("Scene2");
2、使用SceneManager.LoadSceneAsync()方法异步加载场景,异步加载我们还可以设置进度条:
using System.Collections;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using TMPro;
public class SceneLoader : MonoBehaviour
{
public Image progressImg; // 进度条UI元素
public TextMeshProUGUI progressText; // 百分比文本元素
private void Start()
{
}
private IEnumerator LoadSceneAsync(string name)
{
AsyncOperation asyncOperation = SceneManager.LoadSceneAsync(name);
// 禁止场景在加载完成后自动切换
asyncOperation.allowSceneActivation = false;
while (!asyncOperation.isDone)
{
// 更新进度条的值
float progress = Mathf.Clamp01(asyncOperation.progress / 0.9f); // 0.9是加载完成时的进度
progressImg.fillAmount = progress;
// 更新百分比文本
int percentage = Mathf.RoundToInt(progress * 100);
progressText.text = percentage.ToString() + "%";
// 如果进度达到90%,允许场景切换
if (progress >= 0.9f)
{
//因为在加载完成时,asyncOperation.progress的值可能不会达到100%,因此我们使用0.9作为阈值来判断加载是否完成。
asyncOperation.allowSceneActivation = true;
}
//此处暂停一帧,等待进度条更新完成后进行渲染
yield return null;
}
}
// 启动异步加载场景的协程
public void LoadAnotherScene(string name)
{
StartCoroutine(LoadSceneAsync(name));
}
}
这里,我通过一个Image设置进度条,并加一个Text记录进度百分比,并写了个方法调用切换场景方法。我模拟的场景效果如下:
无论使用何种方法,我们都要在Build Setting中把场景加进去。
当我们使用上面两个方法切换场景,其中的参数就是进入这里查询,只有这里有参数对应的场景才能正常切换,此外参数除了用场景名,也可以用上图中场景添加的顺序值,如0,1...作为参数代替场景名参数。