unity 游戏滑动条加载异步场景显示

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
/// <summary>  
/// 脚本位置:Main Camera  
/// 脚本功能:场景异步加载的进度条显示  
/// </summary>  
public class LoadingScene : MonoBehaviour
{

    // 滑动条  
    public Slider processBar;

    // Application.LoadLevelAsync()这个方法的返回值类型是AsyncOperation  
    private AsyncOperation async;

    // 当前进度,控制滑动条的百分比  
    private uint nowprocess = 0;
    [SerializeField]
    Text text_;//显示百分比

    void Start()
    {
        // 开启一个协程  
        StartCoroutine(loadScene());
    }

    // 定义一个协程  
    IEnumerator loadScene()
    {
        // 异步读取场景  
        // 指定需要加载的场景名  
        //async = Application.LoadLevelAsync("需要加载的场景名字或者index");

        async= SceneManager.LoadSceneAsync("Uguiframwork");
        // 设置加载完成后不能自动跳转场景  
        async.allowSceneActivation = false;

        // 下载完成后返回async  
        yield return async;

    }

    void Update()
    {
        // 判断是否加载完需要跳转的场景数据  
        if (async == null)
        {
            // 如果没加载完,就跳出update方法,不继续执行return下面的代码  
            return;
        }

        // 进度条需要到达的进度值  
        uint toProcess;
        Debug.Log(async.progress * 100);

        // async.progress 你正在读取的场景的进度值  0---0.9  
        // 如果当前的进度小于0.9,说明它还没有加载完成,就说明进度条还需要移动  
        // 如果,场景的数据加载完毕,async.progress 的值就会等于0.9  
        if (async.progress < 0.9f)
        {
            //  进度值  
            toProcess = (uint)(async.progress * 100);
        }
        // 如果能执行到这个else,说明已经加载完毕  
        else
        {
            // 手动设置进度值为100  
            toProcess = 100;
        }

        // 如果滑动条的当前进度,小于,当前加载场景的方法返回的进度  
        if (nowprocess < toProcess)
        {
            // 当前滑动条的进度加一  
            nowprocess++;
        }

        // 设置滑动条的value  
        processBar.value = nowprocess / 100f;
        text_ .text= nowprocess.ToString() + "%";
        // 如果滑动条的值等于100,说明加载完毕  
        if (nowprocess == 100)
        {
            // 设置为true的时候,如果场景数据加载完毕,就可以自动跳转场景  
            async.allowSceneActivation = true;
        }
    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值