码迷,mamicode.com
首页 > 编程语言 > 详细

Unity进度条场景载入的制作思路

时间:2015-03-12 11:26:16      阅读:559      评论:0      收藏:0      [点我收藏+]

标签:

有两种做法,如果全部都是AssetsBundle动态载入,可以自己管控加载和释放。还有一种是借助Unity的Level(场景)。

 

如果直接A-B场景切换,我比较担心加载峰值过高,所以采取这种做法:A-L-B。L是进度条专用场景

 

第一个问题是如何检测,OnLevelWasLoaded可以判断是否新场景加载完了,并调用Application.LoadLevelAsync(...)进行加载,可以通过返回对象获取到加载进度

使用时发现一个比较奇怪的事情,当场景很小秒载的时候,加载进度条执行OnDestroy,加载进度才0.9。

而通过FixedUpdate判断加载进度是否isDone会发现,AsyncOperation的操作对象已经被释放了

但非Additive加载的情况下,新场景载入完又会销毁进度条,所以也取不到OnLevelWasLoaded的消息。

所以既不能通过OnDestroy也不能通过Update判断场景是否加载完

 

最终做法是把进度条做成新场景载入不释放的对象DontDestroyOnLoad(...),然后手动控制销毁即可。

这样就可以通过OnLevelWasLoaded判断是否加载完成

 

第二个问题是,秒载进度条速度太快,有时候0.2秒,0.3秒用户体验也不好。所以需要做一个差值,给一个最快时间限制。大体思路各人有各人的做法,这里提供一个伪代码:

var realTime = ...//真实时间0-1
var simTime = ...//模拟时间0-1
var minValue = Math.Min(realTime,simTime);
var maxValue = Math.Min(realTime,simTime);
var lerpLoading = Mathf.Lerp(minValue, maxValue, Math.Min(simTime, realTime));


//...label.text = (lerpLoading * 100).ToString();

 

Unity进度条场景载入的制作思路

标签:

原文地址:http://www.cnblogs.com/hont/p/4331698.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!