小功能⭐️U3D异步加载功能

简介: 小功能⭐️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;
    }
 }


相关文章
|
5月前
|
JavaScript Java 测试技术
基于小程序的微信阅读网站+springboot+vue.js附带文章和源代码设计说明文档ppt
基于小程序的微信阅读网站+springboot+vue.js附带文章和源代码设计说明文档ppt
35 1
|
5月前
|
JavaScript Java 测试技术
原创音乐小程序+springboot+vue.js附带文章和源代码设计说明文档ppt
原创音乐小程序+springboot+vue.js附带文章和源代码设计说明文档ppt
32 1
|
5月前
|
缓存 开发框架 安全
【Uniapp 专栏】详解 Uniapp 的网络请求功能特性
【5月更文挑战第13天】Uniapp是一款跨平台开发框架,提供便捷的网络请求功能,支持HTTP/HTTPS协议及GET/POST等多种请求方法。它允许设置请求参数、处理响应数据,并有超时时间、缓存策略及错误处理机制。还能与状态管理、页面交互结合,确保数据安全并进行性能优化。通过案例和比较,展现了Uniapp在网络请求上的优势,为开发高质量移动应用奠定基础。理解和掌握这些特性对于创建出色应用体验至关重要。
168 1
【Uniapp 专栏】详解 Uniapp 的网络请求功能特性
|
5月前
|
JavaScript Java 测试技术
基于微信小程序的小说阅读系统+vue.js附带文章和源代码设计说明文档ppt
基于微信小程序的小说阅读系统+vue.js附带文章和源代码设计说明文档ppt
82 1
|
4月前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的少儿编程在线培训系统附带文章和源代码设计说明文档ppt
基于ssm+vue.js+uniapp小程序的少儿编程在线培训系统附带文章和源代码设计说明文档ppt
19 0
|
4月前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的在线学习系统附带文章和源代码设计说明文档ppt
基于ssm+vue.js+uniapp小程序的在线学习系统附带文章和源代码设计说明文档ppt
18 0
|
5月前
|
缓存 前端开发 JavaScript
如何优化前端网页加载速度:实用技巧大揭秘
在当今互联网时代,快速加载的网页是用户体验的关键。本文将介绍一些实用的前端优化技巧,从减少HTTP请求到使用CDN加速,帮助开发人员提高网页加载速度,提升用户满意度。
|
5月前
|
缓存 前端开发 JavaScript
如何优化前端网页加载速度:7个实用技巧
在当今互联网时代,网页加载速度对用户体验至关重要。本文将介绍7个实用的技巧,帮助前端开发者优化网页加载速度,提升用户体验。从压缩资源到异步加载,从图片优化到缓存策略,这些技巧将帮助你在前端开发中取得更好的效果。
|
5月前
|
前端开发 JavaScript 数据库
前端 富文本编辑器原理
前端 富文本编辑器原理
112 0
|
JavaScript 测试技术 API
深入解析 Vue 的热更新原理,尤大是如何巧用源码中的细节?
大家都用过 Vue-CLI 创建 vue 应用,在开发的时候我们修改了 vue 文件,保存了文件,浏览器上就自动更新出我们写的组件内容,非常的顺滑流畅,大大提高了开发效率。想知道这背后是怎么实现的吗,其实代码并不复杂。