- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Unity3D游戏开发之异步加载游戏场景与异步加载游戏资源进度条.
Unity3D游戏开发之异步加载
--游戏场景游戏资源进度条
??????? 异步任务相信大家应该不会陌生那么本章内容将带领大家学习Unity中的一些异步任务。在同步加载游戏场景的时候通常会使用方法 Application.LoadLevel(“yourScene”); ?这句代码执行完毕后程序会干什么呢如下图所示这是我随便找了一个游戏场景 在Hierarchy视图中我们可以看到该场景中“天生”的所有游戏对象。
?????? 天生的意思就是运行程序前该场景中就已经存在的所有游戏对象。然后这些对象就会在执行完 Application.LoadLevel(“yourScene”);方法后加载至内存当中。如果该场景中的游戏对象过多那么瞬间将会出现卡一下的情 况因为LoadLevel()方法是同步进行的。把这种加载起个名字叫A形式加载。
?????? 下面我说说“后天“加载的游戏对象。意思是这些游戏对象是通过脚本动态的创建出来的。比如常用方法 :
GameObject Obj = (GameObject)Instantiate(prefab);
??????? 这句代码执行完毕后同样会在Hierarchy视图中添加对应的游戏对象。把这种加载起个名字叫B形式加载。
??????? 下面我们学习异步加载游戏场景异步异步顾名思义就是不影响当前游戏场景的前提下加载新场景。通常异步加载的方式分为两种第一种是异步加载新游戏场景当新场 景加载完成后进入新场景并且销毁之前的场景。第二种:同样异步加载新场景新场景加载完毕后保留旧场景的游戏对象并且进入新场景。 这里加载的内容就是上面提到的A形式加载。然后B形式加载不会记入这里的加载。
第一种异步加载游戏场景对应的方法是
Application.LoadLevelAsync(yourScene);
第二种异步家在游戏场景对应的方法是
Application.LoadLevelAdditiveAsync (yourScene);
??????? 这两种方法加载的方式完全一样。异步加载其实重要还是应用于游戏LOADING界面毕竟LOADING如果采用同步的机制会影响用户体验说到这里告诉大家 如何在Unity中制作游戏进度条。我们应当在Unity中创建一个专门用于读取进度的场景假设A场景到C场景我们应当让A场景先到读取进度的场景B场景 当异步任务完成后在进入C场景。 A – 》B -》 C 在B场景中绘制游戏进度条或读取动画。因为B场景仅仅是个显示LOADING动画的场景所以读取该场景是瞬间就完成的。
??????? 程序在切换场景时应当有一个全全局的静态变量来记录简要读取的场景名称。这里简单的写一下。
using UnityEngine;
using System.Collections;
public class Globe
{
//在这里记录当前切换场景的名称
public static string loadName;
在A场景中通过某些触发条件 调用LoadLevel进入B场景。
//记录LOADING场景中需要读取的C场景名称
Globe.loadName = C;
//先进入B场景
Application.LoadLevel (B);
??????? OK我们在B场景中异步读取C场景与 播放读取动画Loading.cs 绑定在B场景的摄像机对象身上。当C场景异步读取完毕后即可直接进入C场景。
div class=blockcodeblockquoteusing UnityEngine;
using System.Collections;
public class Loading : MonoBehaviour {
private float fps = 10.0f;
private float time;
//一组动画的贴图在编辑器中赋值。
public Texture2D[] animations;
private int nowFram;
//异步对象
AsyncOperation async;
//读取场景的进度它的取值范围在0 - 1 之间。
int progress = 0;
void Start()
{
//在这里开启一个异步任务
//进入loadScene方法。
StartCoroutine(loadScene());
}
//注意这里返回值一定是 IEnumerator
IEnumerator loadScene()
{
//异步读取场景。
//Globe.loadName 就是A场景中需要读取的C场景名称。
文档评论(0)