1. 假设当前场景为A,我们要切换到下一场景B,如果使用正常加载方式,Unity会在切换场景时加载场景B的所有内容(Hierarchy面板内容)到内存中,由于加载场景B是同步执行的,所以当场景B较大时,就会在加载过程出现卡顿现象
  2. 针对这种情况,我们通常会使用异步加载方式来加载场景。异步加载方式是在后台线程运行,不影响当前主线程,所以下一场景即使很大,当前场景也不会出现卡顿。
  3. 对于手游来讲,场景切换通常分为三个部分,“UI场景(选择关卡)”-》“Loading过渡场景(显示加载进度条)”-》“具体的关卡打斗场景”;不使用异步加载的话可能流程就是“UI场景(选择关卡)”-》“具体的关卡打斗场景”了。而使用异步加载的话,就会在两者中间加一个过渡场景掩饰异步加载等待的时间。
  4. 好了,具体代码如下
 // 上略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;}}

补充(2020.05.16)
如果游戏只有一个Scene场景,就无法用异步加载场景方式,但是换个思路可以利用异步加载界面方式,其实场景和界面对于用户来讲是没什么区别的。
比如在场景里可以设计有《登录界面 关卡界面,加载界面,战斗界面》;或者另一种没有“关卡界面”的就是《登录界面 加载界面 战斗界面》;加载界面就是我们这里的重点,其功能是预加载资源,通常界面设计就是一张背景图和一个进度条表示资源加载进度了。
预加载资源一般是拼好的prefab、动态加载的图片、音效、动画、特效等资源,预加载就是提前把资源加载到内存,用时直接实例化即可;
预加载资源作用就是为了避免在游戏战斗进行中加载耗时导致卡顿,预加载后在游戏中实例化一般不耗时的,但也不能频繁实例化,对于常用的资源,太频繁的实例化和销毁容易导致内存泄漏;预加载资源进度统计可以直接在加载函数后面加个计数器即可。

【Unity3D 打斗游戏开发】之二 异步加载场景或预加载资源后进入游戏相关推荐

  1. 【Visual C++】游戏开发笔记二十三 游戏基础物理建模 五 粒子系统模拟 二

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  2. 【Visual C++】游戏开发笔记二十三 游戏基础物理建模(五) 粒子系统模拟(二)

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7607916 作者:毛星云    邮箱: h ...

  3. 【Visual C++】游戏开发笔记二十七 Direct3D 11入门级知识介绍

    游戏开发笔记二十七 Direct3D 11入门级知识介绍 作者:毛星云    邮箱: happylifemxy@163.com    期待着与志同道合的朋友们相互交流 上一节里我们介绍了在迈入Dire ...

  4. Pascal游戏开发入门(二):渲染图片

    Pascal游戏开发入门(二):渲染图片 渲染静态图片 新增一个Texture,然后Render出来 创建Texture,并获取尺寸 procedure TGame.Init(title: strin ...

  5. 【Visual C++】游戏开发笔记二十七 Direct3D 11入门级知识介绍

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7707628 作者:毛星云 邮箱: happ ...

  6. java游戏开发入门(二) - 菜单

    java游戏开发入门(二) - 菜单 前言 编码 主菜单 游戏内菜单(按下ESC后出现,并会暂停游戏) 效果展示 主菜单 游戏内菜单 完整代码 完整项目 前言   上一章我们创建了一个600x600的 ...

  7. Cocos2d游戏开发之如何解包获得pvr.ccz中的美术资源

    Cocos2d游戏开发之如何解包获得pvr.ccz中的美术资源 在大部分时候,Cocos2d游戏会将美术资源打包以减轻性能要求,提高加载速度.而如果我们需要获得其中的美术资源,就得解包.这里以plis ...

  8. 5首页加载慢_UIViewController 预加载方案浅谈

    作者 | hite,目前在网易严选iOS 组,主要工作内容 webview 相关,业余时间会写一些胡思乱想产品策划稿,各类游戏云玩家. 一. 引子 预加载作为常规性能优化手段,在所有性能敏感的场景都有 ...

  9. android调用h5预加载图片,图片预加载 preload

    图片预加载 HTML5学堂:2014年年初的时候,曾经在自己的博客"独行冰海"里写过关于图片预加载和懒加载的博文,当时的文章当中没有写什么关于预载的代码范例,当前打算把预载和懒载分 ...

最新文章

  1. Windows7防火墙服务无法启用怎么办
  2. 设计模式---原型模式(Prototype Pattern)
  3. Linux文件类型有哪些?
  4. 【网址收藏】VMware虚拟机安装Windows7
  5. [转]详细易懂的Linux makefile教程(7)
  6. android id 重名_android - 解决“应用自定义权限重名”
  7. html让后端删除数据库,Chrome在请求之间删除WebSQL数据库
  8. 去重 属性_Javascript算法 — 数组去重
  9. Oracle RAC tns 00505,Alert Log Errors: 12170 TNS-12535/TNS-00505: Operation Timed Out
  10. [纯前端]打造自己的ORK管理软件
  11. 【Verilog 常见设计】(0)二进制码和格雷码互转 Verilog 实现
  12. MFC采用定时器绘制简单动画
  13. smartupload 路径不存在_使用SmartUpload上传文件不成功
  14. IOS和安卓微信打开网页,界面显示差异大的问题。
  15. LNK1123转换到COFF期间失败
  16. 球体积公式推导(积分)
  17. php5.4.45连接mssql2000,用php在linux下连接mssql2000(转)
  18. Flutter补间动画
  19. neo4j :rel_Neo4j:足球转移图表
  20. 如何将heic转成jpg或png格式?

热门文章

  1. andorid g13 刷机
  2. 瑞萨RL78\G13编译出现Segment ‘@@CODEL‘ can‘t allocate to memory
  3. linux模式下无奶瓶程序,PE加载BEINI奶瓶,看不到奶瓶图标?忘指导
  4. 【python】字典按键、按值排序
  5. xerces-c++内存管理策略为何耗费大量内存
  6. #无线电子产品,蓝牙耳机,无线遥控器#CE-RED认证怎么办理
  7. 手机浏览器devtools_使用DevTools在浏览器中调整设计
  8. 京东首页制作html+css+js
  9. Excel固定首行在滚动时不动
  10. IDEA导入Maven模块未识别,包颜色不对(包显示灰色)