如何用Unity加载一个真实的加载进度条的真正作用

我想~我要~我在做游戏 B站unity学习讨论群
视频地址复制
Flash地址复制
Html地址复制
离线看更方便
用或其他应用扫描二维码
Unity3D游戏制作过程录制
广播电视节目制作经营许可证:(沪)字第1248号
| 网络文化经营许可证:沪网文[6号 | 信息网络传播视听节目许可证:0910417 | 互联网ICP备案:沪ICP备号-3 沪ICP证:沪B2- | 违法不良信息举报邮箱: | 违法不良信息举报电话:转3
网上有害信息举报专区: |Unity3d游戏开发中异步Loading进度条所遇问题
Unity3d游戏开发中异步Loading进度条所遇问题
浏览次数:1632
浏览次数:483
浏览次数:771
浏览次数:761
浏览次数:902
如果你对以下课程意犹未尽,,查看全部课程
HTML5全栈开发
HTML5最新课程
156 人在学
c#编程概述
C#快速入门
简单又好玩
120 人在学
没有账号?
s后重新发送
已有账号?
已有账号?
验证码确认
话题标题:
400-877-8190
登录后反馈UGUI提高(四)
异步加载场景进度条
直接上代码,需要注意几个API就可以了。
using UnityEngine.SceneM //使用场景管理空间
AsyncOperation prog = SceneManager.LoadSceneAsync(&场景&); //新的异步加载场景API,返回异步参数
AsyncOperation.progress // 获取进度(我测试了一下最大是0.9,可能要真正跳到场景才是1)
AsyncOperation.allowSceneActivation ////如果加载完成,是否立刻进入场景
using UnityE
using System.C
using UnityEngine.UI;
using UnityEngine.SceneM
public class Load : MonoBehaviour {
public Slider progressUI;
public Text
private AsyncO
void Start() {
prog = SceneManager.LoadSceneAsync(&场景名&);
//异步加载场景
StartCoroutine(LoadingScene());
//设置滑动条
private void setProgressValue(int value) {
progressUI.value =
progressValue.text = value + &%&;
private IEnumerator LoadingScene()
prog.allowSceneActivation =
//如果加载完成,也不进入场景
int toProgress = 0;
int showProgress = 0;
//测试了一下,进度最大就是0.9
while (prog.progress & 0.9f)
toProgress = (int)prog.progress * 100;
while ( showProgress&toprogress) 1=&& yield=&& return=&& new=&& 0.9---1=&& toprogress=&100;& while=&& showprogress=&& prog.allowsceneactivation=&& pre=&&&
参考了一下别的地方的文章,但是实在不知道哪个是出处,另外,这个加载速度太快了,我的电脑,我搞了很复杂的场景也是一下就过去了。当前位置: >
如何加载进度条案例
时间: 09:00 来源:互联网 作者:网络 浏览:
游戏中的Loading现在都做得很漂亮,但是归根究底就两种类型,静态Loading和动态Loading。 静态Loading可能就是一张背景图。而动态的Loading就是在读取的同时有一个东西在“转圈”。 1.静态Loading: 优点:读取场景使用同步的方法就可以,因为是同步方法所以读取的速度是最快的,也不用更新界面,因为同步执行方法的时候程序在等待读取结束。 执行Application.LoadLevel(“name”);同步方法来加载你的场景。 缺点:Loading的时候如果界面不动,那么用户体验肯定不佳,因为读取的时间如果过长用户就会误以为手机卡死了。其实我个人还是觉得最好用动态加载Loading的方式,虽然读取的时间没有静态Loading快,但是用户体验很好。 2.动态Loading: 优点:读取的时候界面可以有动画,甚至还可以做一些小游戏。场景可以异步加载,那么脚本上的Update就会每一帧都执行,所以就能做一些动态的东西。 缺点:没有缺点,嘿嘿,建议大家一定要使用动态loading、 执行 AsyncOperation async = Application.LoadLevelAsync(“MyBigLevel”); 方法就可以异步加载场景。 常见问题: 一. 游戏是否可以只做一个场景? 可以,而且我也看见过一些游戏只做一个场景,因为你所有的东西都可以动态加载来完成、比如场景模型、人物模型、场景烘培贴图等等。 执行 GameObject.Instantiate(“prefabName”) 方法来读取。 但是游戏只做一个场景有两个致命的问题。& 1.Loading界面没动画或者动画很难看 因为有个办法可以有动画,比如把你的读取场景的方法拆成3个,用协同任务来依次执行这三个方法,因为协同任务没执行一个后,会调用一下所有脚本的
Update,所以按照这个逻辑你界面的动画就可以动3下。。如果你真想这么干?我劝你还是早点放弃。因为你的同步方法不会拆分的那么均匀的,就算做出来
了动画动的也会非常难看!! 2.内存的卸载完全需要你自己手工维护 Unity对读取的内存有一个缓存池的概念,如果你采用它的标准方式来切换场景,那么Unity会在切换场景的时候自动帮你把没有被引用的资源对象从内存中卸载掉。但是你现在是一个场景了,那么卸载内存的东西就要万全自己手工维护了。。 二.异步加载场景为什么最后会卡一下 这个罪魁祸首就是Unity不支持多线程。游戏加载被你分成了两部分、第一部分是加载场景,你可以把场景上已知的模型都保存在Scene上面,此时你在调
用异步加载场景的时候会进度动画会非常的均匀。加载场景你可以理解成Unity自己在多线程加载,有可能他的后台也是同步,但是我们看不到源码从它的效果
上来看它加载场景是多线程。 但是问题出在了第二步上,因为你需要加载未知模型,举个例子,当你进副本加载场景的时候,场景可不知道你身上带了那几个英雄。所以场景加载完毕后你还需要
去加载的这些模型。无论你是用协同任务也好,还是在方法里面执行也好,因为Unity没有多线程,一般为了更快的能进游戏这里的加载都会选择同步加载,所
以你会发现大部分游戏进度条加载到最后都会卡一下。 为了解决这个问题,在加载的时候一定要避免加载场景后自己写的哪个同步加载的方法,尽量让他执行更少的加载。 1.尽可能让场景多包含一些资源,我看有些人为了节省资源,打开场景以后动态的加载一些地面上的小物件。我觉得这种情况多做几个场景就可以了,不用在一个同步方法里出力过多的东西。 2.人物模型可以考虑预加载,也可以考虑常驻内存。。因为你的人物模型可能不止在战斗中才会被使用。 三、减少Loading的次数 尤其是战斗场景,重复挑战同一关卡的时候,因为场景没有变化,尽量就不要在去读取场景。所以你可以写一个加载的界面,根据当前场景名 和需要加载的场景名 如果场景相同 就不去加载, 如果场景不同再去加载,这样其实能省很多时间。 //参数1 加载场景之前做的事情
//参数2 新加载的场景名
//参数3 加载场景后要做的事情
public void LoadScene(System.Action before, string sceneName, System.Action end)
if(Application.loadedLevelName != sceneName)
{&&&&&&&&&& //异步加载场景, 加载完毕后 调用 end方法。
(责任编辑:脚印)
免责声明:Unity之家部分内容来源于互联网,如有侵权,请联系我们,本站将立即进行处理。
猜你也喜欢看这些 ??????
其他类型的Unity入门 ??????

我要回帖

更多关于 ajax 加载实时进度条 的文章

 

随机推荐