Unity3D手游开发日记(3) - 场景加载进度条的完美方案

我以为做个进度条很简单,分分钟解决,结果折腾了一天才搞定,Unity有很多坑,要做完美需要逐一解决.问题1:最简单的方法不能实现100%的进度用最简单的方法来实现,不能实现100%的进度,原因是Unity加载完新场景立马就激活新场景了,无法显示最后的进度.解决办法就是使用allowSceneActivation来控制进入场景的时机.问题2:使用allowSceneActivation后
摘要由CSDN通过智能技术生成

我以为做个进度条很简单,分分钟解决,结果折腾了一天才搞定,Unity有很多坑,要做完美需要逐一解决.

问题1:最简单的方法不能实现100%的进度

用最简单的方法来实现,不能实现100%的进度,原因是Unity加载完新场景立马就激活新场景了,无法显示最后的进度.解决办法就是使用allowSceneActivation来控制进入场景的时机.

问题2:使用allowSceneActivation后进度卡在90%

这个问题官网论坛也有人讨论,解决办法就是自己手动修补最后的10%,

问题3:进度条一顿一顿地增加.不平滑

解决办法手动插值平滑

问题4:www和LoadLevelAsync两部分进度的整合问题

大部分场景是打成Bundle包的,先要WWW加载,再LoadLevelAsync,两部分的进度要整合在一起,

少量场景是不打Bundle包的,比如登录场景,

                if (nextSceneID == (int)GlobeEnum.SceneDefine.LOGIN)
                    yield return StartCoroutine(LoadNormalScene(sceneTable.ResName));
                else
                    yield return StartCoroutine(LoadBundle
  • 6
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Unity中实现进度条首先要使用异步场景的方式。当场景时,我们可以通过使用Unity的异步操作来显示进度条,并在完成后跳转到另一个场景。 首先,在场景A中创建一个空物体,并给它添一个C#脚本。在脚本中,我们可以使用以下代码来进行异步的操作: ```csharp using UnityEngine; using UnityEngine.SceneManagement; public class AsyncLoader : MonoBehaviour { public string nextSceneName; // 下一个场景的名称 void Start() { StartCoroutine(LoadNextSceneAsync()); } IEnumerator LoadNextSceneAsync() { AsyncOperation asyncLoad = SceneManager.LoadSceneAsync(nextSceneName); // 异步下一个场景 asyncLoad.allowSceneActivation = false; // 禁止切换到下一个场景 while (!asyncLoad.isDone) { // 获取进度(范围:0-1) float progress = Mathf.Clamp01(asyncLoad.progress / 0.9f); // 在这里更新你的进度条 UpdateProgressBar(progress); yield return null; } asyncLoad.allowSceneActivation = true; // 允许切换到下一个场景 } void UpdateProgressBar(float progress) { // 在这里更新你的进度条的显示 } } ``` 然后,在场景A中添一个你喜欢的进度条,可以是UI控件或者3D模型,然后将该进度条的显示与UpdateProgressBar函数中的progress参数相关联。 最后,在场景A中将需要的新场景的名称赋值给AsyncLoader组件的nextSceneName变量。 这样,当场景A时,进度条将会根据进度进行显示,当完成后,AsyncLoader会将allowSceneActivation属性设置为true,从而切换到另一个场景。这样就实现了进度条先显示前一个场景后跳转到另一个场景的效果。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值