您的位置:首页 > 移动开发 > Unity3D

Unity3D——异步加载游戏场景loading界面的开发!

2014-06-18 11:02 417 查看
最近在开始研究整个项目的开发!毕竟针对一些的开发,对我感觉没有整体感。所以就打算通过查看整体的开发的源代码来进一步的学习!所以这段时间都没有怎么更新博客!因为个人感觉还是要开发一个自己的游戏才行,山寨没关系,重要的是思想,感受一下那些大牛的设计的思想和代码的实现是一件很享受的事情!我推荐大家也可以这么做试试哈!

ok,废话不多说啦!我们开始吧!

首先还是要感谢雨松的Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条(三十一)通过它的博客让我对这个场景的加载有了更深刻的感悟!

在我们的游戏开发过程中,场景间的交换是很正常的事情!但是并不是说我们实现了交换的效果就可以啦!我们在实现效果的同时也需要注意用户的体验和考虑机器的性能,同时也要考虑代码的优化,这样才能出更好的游戏。

在我们的开发过程中一般交换场景都是用Application.loadLevel("scenename");就可以轻松搞定啦!但是这种加载场景的方法只是适用于加载资源较少的场景,对于一个资源较大的场景的话,这个就容易造成界面的卡死,这样就对用户的体验感造成很大的伤害啦!

比如现在我们要从A场景加载到B场景,如果我们使用Application.LoadLevel("B");想象一下,这样的效果未免也太不理想啦!

所以我们在A,B的中见加入了一个新的场景,我们称之为loading场景,在俩种场景的过度,这样的感觉如何呢?首先你可以再loading场景中增加了很多花样比如可以显示一些游戏的提示语,可以显示不同的图片,来让用户度过这无聊的加载过渡期!想想一下,和上一个相比确实很不错啦!

貌似,感觉废话真的太多啦!好吧!直接上代码!

首先要定义一个全局的类,用来保存场景的名称!

using UnityEngine;
using SystemColliections;

public class Global{
public static string global_name;
}


我们利用这个类中的global_name来进行保存要跳转到的场景!

然后在A场景

using UnityEngine;
using SystemColliections;

public class A : MonoBehavious{

void Start()
{

}

void Update()
{

}

void OnGUI()
{
if(GuiLayout.Button("loading",GuiLayout.Width(80),GuiLayout.Height(40)))
{
//点击加载按钮后进入加载界面
Golbal.Load_name = "B";
Application.loadLevel("loading");//到加载界面B的场景
}
}
}


这样我们就进入loading场景啦!进入到加载的界面中来啦!下面我们需要通过loading 场景来加载B场景啦!

using UnityEngine;
using SystemColliections;

public class loadingScene : MonoBehavious{

private AsyneOperation async;//异步加载操作
int  process;//加载的进度

void Start()
{
startCoroutine(loading());//利用协程来进行加载,也就是异步加载
}

void Update()
{
//在这里我们可以实时的更新加载的进度主要通过
process = (int)(async.progress*100);
}

IEnumerator loading()
{
async = Application.LoadLevelAsync(Global.Load_name);

yelid return ansyn;
}

void OnGUI()
{
//在这里可以对显示一些提示或者一些图片
显示图片可以用GUI.DrawTextTure();显示提示可以使用GUI.Label();
}
}


ok,主体代码已经呈现啦!相信大家现在对异步加载有了自己的理解了吧!原理很简单,就是调用协程stratCoroutine()来进行处理异步加载Application.loadLevelAsync()。

哦,对了还有一个重要的步骤,就是你加载的场景必须在Untiy里注册

大体的步骤为file->BUild Setting ->Scences in Build 然后使用Add Current是加载当前场景,也可以直接将场景拖入!

最后提供下unity3d中文api.chm

谢谢大家的支持,你的支持是我前进的动力!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息