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

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

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

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

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

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

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

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

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

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

[C#]  纯文本查看  复制代码
?
1
2
3
4
5
6
using UnityEngine;[/align]
[align=left] using SystemColliections;[/align]
 
[align=left] public class Global{[/align]
[align=left]        public static string global_name;[/align]
[align=left]}


我们利用这个类中的global_name来进行保存要跳转到的场景!然后在A场景
[C#]  纯文本查看  复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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场景啦!
[C#]  纯文本查看  复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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是加载当前场景,也可以直接将场景拖入!
作者:lmzqm
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值