Unity实现异步加载场景+进度条

22 篇文章 1 订阅

场景的切换是游戏中不可避免的。一般来说,为了防止同步加载所带来的卡顿感,我们都会选择使用异步加载场景。
在加载的过程中,一般是弄一个进度条或者弄个转转转的小圈圈,甚至可以弄个小游戏。
这里简单介绍一下如何实现进度条。

思路

定义异步对象

	private AsyncOperation m_Operation;

场景加载协程

	IEnumerator LoadScence(String loadScenceName)  
    {  
        operation = SceneManager.LoadSceneAsync(loadScenceName);  
        //阻止当加载完成自动切换  
        operation.allowSceneActivation = false;  
        yield return operation;  
    }  

update方法控制进度条

	 private void Update() {
        SceneLoadingRate = m_asyncOperation.progress;
        if(SceneLoadingRate != 0) {
            //这个变量上限就是0.9
            if(m_asyncOperation.progress >= 0.9f) {
                SceneLoadingRate = 1f;
            }
            //差值运算
            if(SceneLoadingRate != m_Slider.value) {
                m_Slider.value = Mathf.Lerp(m_Slider.value, SceneLoadingRate, Time.deltaTime * 2);
                if(SceneLoadingRate - m_Slider.value <= 0.01f) {
                    m_Slider.value = SceneLoadingRate;
                }
            }
            if(m_Slider.value == 1f) {
                m_asyncOperation.allowSceneActivation = true;
            }
        }

当然可以加上其他逻辑集成一个场景管理脚本,这里就不赘述了。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity中,异步加载场景并显示进度可以通过以下步骤实现: 1. 创建一个UI界面,用于显示加载进度。 2. 使用SceneManager.LoadSceneAsync()方法异步加载场景。 3. 在加载场景的同,使用AsyncOperation.progress属性获取加载进度,并将其显示在UI界面上。 4. 在场景加载完成后,隐藏UI界面。 下面是一个示例代码: ```csharp using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; using System.Collections; public class SceneLoader : MonoBehaviour { public Slider progressBar; public Text progressText; void Start() { StartCoroutine(LoadSceneAsync()); } IEnumerator LoadSceneAsync() { AsyncOperation operation = SceneManager.LoadSceneAsync("MyScene"); while (!operation.isDone) { float progress = Mathf.Clamp01(operation.progress / 0.9f); progressBar.value = progress; progressText.text = "Loading..." + (int)(progress * 100) + "%"; yield return null; } progressBar.gameObject.SetActive(false); progressText.gameObject.SetActive(false); } } ``` 在这个示例中,我们使用了Slider和Text UI元素来显示加载进度。在Start()方法中启动了一个协程来异步加载场景。在协程中,我们使用AsyncOperation.progress属性获取加载进度,并将其转换为0到1之间的值。最后,我们使用SetActive()方法隐藏进度条和文本UI元素。 需要注意的是,AsyncOperation.progress属性的值在0到0.9之间,因为在此阶段Unity会在后台加载所有场景数据。只有在最后10%的间内,Unity才会开始实际加载场景,此AsyncOperation.progress的值将达到1。因此,在计算进度,我们需要将AsyncOperation.progress除以0.9来获得0到1之间的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值