欢迎来到天天文库
浏览记录
ID:39891020
大小:169.50 KB
页数:8页
时间:2019-07-14
《Unity3D学习之异步加载游戏场景与异步加载游戏资源进度条》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Unity3D学习之异步加载游戏场景与异步加载游戏资源进度条欢迎来到狗刨学习网,这里有很多U3D资源、U3D培训视频、U3D常见问题、U3D项目源码,我们致力于打造业内unity3d培训、学习第一品牌 异步任务相信大家应该不会陌生那么本章内容将带领大家学习Unity中的一些异步任务。在同步加载游戏场景的时候通常会使用方法Application.LoadLevel(“yourScene”); 这句代码执行完毕后程序会干什么呢如下图所示这是我随便找了一个游戏场景在Hierarchy视图中
2、我们可以看到该场景中“天生”的所有游戏对象。 天生的意思就是运行程序前该场景中就已经存在的所有游戏对象。然后这些对象就会在执行完Application.LoadLevel(“yourScene”);方法后加载至内存当中。如果该场景中的游戏对象过多那么瞬间将会出现卡一下的情况因为LoadLevel()方法是同步进行的。把这种加载起个名字叫A形式加载。 下面我说说“后天“加载的游戏对象。意思是这些游戏对象是通过脚本动态的创建出来的。比如常用方法:GameObjectObj=(Gam
3、eObject)Instantiate(prefab); 这句代码执行完毕后同样会在Hierarchy视图中添加对应的游戏对象。把这种加载起个名字叫B形式加载。 下面我们学习异步加载游戏场景异步异步顾名思义就是不影响当前游戏场景的前提下加载新场景。通常异步加载的方式分为两种第一种是异步加载新游戏场景当新场景加载完成后进入新场景并且销毁之前的场景。第二种:同样异步加载新场景新场景加载完毕后保留旧场景的游戏对象并且进入新场景。这里加载的内容就是上面提到的A形式加载。然后B形式加
4、载不会记入这里的加载。第一种异步加载游戏场景对应的方法是Application.LoadLevelAsync("yourScene");第二种异步家在游戏场景对应的方法是Application.LoadLevelAdditiveAsync("yourScene"); 这两种方法加载的方式完全一样。异步加载其实重要还是应用于游戏LOADING界面毕竟LOADING如果采用同步的机制会影响用户体验说到这里告诉大家如何在Unity中制作游戏进度条。我们应当在Unity中创建一个专门用于读取进
5、度的场景假设A场景到C场景我们应当让A场景先到读取进度的场景B场景当异步任务完成后在进入C场景。A–》B-》C在B场景中绘制游戏进度条或读取动画。因为B场景仅仅是个显示LOADING动画的场景所以读取该场景是瞬间就完成的。 程序在切换场景时应当有一个全全局的静态变量来记录简要读取的场景名称。这里简单的写一下。usingUnityEngine;usingSystem.Collections;publicclassGlobe{//在这里记录当前切换场景的名称publicstaticstri
6、ngloadName;在A场景中通过某些触发条件调用LoadLevel进入B场景。//记录LOADING场景中需要读取的C场景名称Globe.loadName="C";//先进入B场景Application.LoadLevel("B"); OK我们在B场景中异步读取C场景与播放读取动画Loading.cs绑定在B场景的摄像机对象身上。当C场景异步读取完毕后即可直接进入C场景。usingUnityEngine;usingSystem.Collections;publicclassLoad
7、ing:MonoBehaviour{privatefloatfps=10.0f;privatefloattime;//一组动画的贴图在编辑器中赋值。publicTexture2D[]animations;privateintnowFram;//异步对象AsyncOperationasync;//读取场景的进度它的取值范围在0-1之间。intprogress=0;voidStart(){//在这里开启一个异步任务//进入loadScene方法。StartCoroutine(loadScene());
8、}//注意这里返回值一定是IEnumeratorIEnumeratorloadScene(){//异步读取场景。//Globe.loadName就是A场景中需要读取的C场景名称。async=Application.LoadLevelAsync(Globe.loadName);//读取完毕后返回系统会自动进入C场景yieldreturnasync;}voidOnGUI(){//因为在异步读取场景//所以这里我们可以刷新UIDrawAnimation(animations);}void
此文档下载收益归作者所有