同步加载 (同步加载:如果场景很大,有可能会卡顿。)
using UnityEngine;
using UnityEngine.SceneManagement;
public class Class_Name: MonoBehaviour {
void Start () {
SceneManager.LoadScene("mai 1");
}
}
异步加载
需要三个场景来完成异步加载,开始场景、过渡场景、目标场景,一般会在过渡场景来做个加载进度条。
假设我们现在有SceneA、SceneB、SceneC三个场景,完成A到B到C的异步加载,并实现加载进度条。
using UnityEngine;
using UnityEngine.SceneManagement;
// 跳转到过度场景
public class SceneA : MonoBehaviour {
void Start () {
SceneManager.LoadSceneAsync("SceneB");
}
}
using System.Collections;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
//异步加载目标场景
public class SceneB : MonoBehaviour {
public Slider _slider; //加载进度条
private AsyncOperation m_AsyncOperation; //异步加载信息
private void Start()
{
StartCoroutine(LoadScene());
}
private void Update()
{
UpdateSlider();
}
// 异步加载场景
IEnumerator LoadScene()
{
m_AsyncOperation = SceneManager.LoadSceneAsync("SceneC");
//不跳转场景,停留在当前场景
m_AsyncOperation.allowSceneActivation = false;
yield return m_AsyncOperation;
}
// 更新加载进度条
private void UpdateSlider()
{
if (_slider.value >= 1)
{
//跳转到目标场景
m_AsyncOperation.allowSceneActivation = true;
return;
}
else if (_slider.value >= 0.9f)
{
_slider.value += Time.deltaTime;
return;
}
//m_AsyncOperation.progress属性为场景加载进度,但是最大值为0.9f。
_slider.value = m_AsyncOperation.progress;
}
}
注意:关键函数或属性
//跳转场景时禁止销毁游戏物体
DontDestroyOnLoad(trnasform.gameObject);
//跳转到目标场景(allowSceneActivation来控制什么时候跳转场景)
mAsyncOperation.allowSceneActivation = true;
//progress属性为场景加载进度,但是最大值为0.9f。
_slider.value = m_AsyncOperation.progress;
网友评论