小功能⭐️U3D异步加载功能
Posted 小星河丨U3D开发支持
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小功能⭐️U3D异步加载功能相关的知识,希望对你有一定的参考价值。
文章目录
假设当前场景为A,我们要切换到下一场景B,如果使用正常加载方式,Unity会在切换场景时加载场景B的所有内容(Hierarchy面板内容)到内存中,由于加载场景B是同步执行的,所以当场景B较大时,就会在加载过程出现卡顿现象
针对这种情况,我们通常会使用异步加载方式来加载场景。异步加载方式是在后台线程运行,不影响当前主线程,所以下一场景即使很大,当前场景也不会出现卡顿。
对于手游来讲,场景切换通常分为三个部分,“UI场景(选择关卡)”——“Loading过渡场景(显示加载进度条)”——“具体的关卡打斗场景”;不使用异步加载的话可能流程就是“UI场景(选择关卡)”——“具体的关卡打斗场景”了。而使用异步加载的话,就会在两者中间加一个过渡场景掩饰异步加载等待的时间。
好了,具体代码如下
// 上略
private AsyncOperation mAsyncOperation;
private int mCurProgress = 0;
void Start ()
StartCoroutine(LoadScene());
private IEnumerator LoadScene ()
// u3d 5.3之后使用using UnityEngine.SceneManagement;加载场景
mAsyncOperation = SceneManager.LoadSceneAsync("sceneName");
// 不允许加载完毕自动切换场景,因为有时候加载太快了就看不到加载进度条UI效果了
mAsyncOperation.allowSceneActivation = false;
// mAsyncOperation.progress测试只有0和0.9(其实只有固定的0.89...)
// 所以大概大于0.8就当是加载完成了
while (!mAsyncOperation.isDone && mAsyncOperation.progress < 0.8f)
yield return mAsyncOperation;
void Update ()
// 以下都是为实现加载进度条的
int progressBar = 0;
if (mAsyncOperation.progress < 0.8)
progressBar = (int)(mAsyncOperation.progress * 100);
else
progressBar = 100;
if (mCurProgress <= progressBar)
mCurProgress++;
// 进度条ui显示(本文不讨论)
((Win_Loading)UIWindowCtrl.GetInstance().GetCurrentWindow()).loadingView.SetLoadSceneInfo(mCurProgress * 0.01f);
else
// 必须等进度条跑到100%才允许切换到下一场景
if (progressBar == 100) mAsyncOperation.allowSceneActivation = true;
大家还有什么问题,欢迎在下方留言!
如果你有 技术的问题 或 项目开发
都可以加下方联系方式
和我聊一聊你的故事🧡
以上是关于小功能⭐️U3D异步加载功能的主要内容,如果未能解决你的问题,请参考以下文章
AVPro Movie Capture☀️一款U3D录屏插件介绍