加载场景这个功能在游戏开发中一定很常见。 如果你想从一个场景过渡到另一个资源更多的场景unity 异步切换场景,你将不得不等待一段时间。 这时候就需要一个过渡场景来告诉用户当前的加载进度。 此示例使用滑块和文本来显示加载进度。
使用系统。 收藏品;
使用统一引擎;
使用 UnityEngine.UI;
使用统一引擎。 场景管理;
公共类加载:MonoBehaviour
{
异步操作异步; //异步对象
公共字符串场景名称;
公共滑块加载滑块; //滑动条显示进度
公共文本加载文本; //显示进度的文本
private float loadingSpeed = 1;
私有浮动目标值;
无效开始()
{
加载滑块。 值 = 0.0f;
StartCoroutine("LoadScene");
}
IEnumerator 加载场景()
{
异步 = 场景管理器。 LoadSceneAsync(场景名称);
//异步。 allowSceneActivation = false;
打印(“加载:”+异步);
收益返回异步;
}
无效更新()
{
如果(异步==空)返回;
targetValue = async.progress;
//值高达0.9
如果(异步。进度> = 0.9f)
{
目标值 = 1.0f;
}
// 给滑块赋值
if (targetValue != loadingSlider.value)
{
loadingSlider.value = Mathf.Lerp(loadingSlider.value, targetValue, Time.deltaTime * loadingSpeed);
如果 (Mathf.Abs(loadingSlider.value - targetValue) < 0.01f)
{
加载滑块。 价值=目标价值;
}
}
// 给文本赋值
loadingText.text = ((int)(loadingSlider.value * 100)).ToString() + "%";
//允许异步加载后自动切换场景
如果 ((int)(loadingSlider.value * 100) == 100)
异步。 allowSceneActivation = true;
}
}
需要注意的是,在场景加载过程中音效,可能会出现一些耗时的线程卡死操作(比如从数据库中读取大量数据到内存中)unity 异步切换场景,此时要将相关代码放入另一个执行线程。 主线程和副线程同时运行。 在副线程完成之前,如果主线程无事可做,它就会等待。 当副线程运行完毕后音效,会向主线程发送信号,然后完成场景的加载动画。