Unity异步场景加载

unity异步场景加载

在Unity项目中,经常要用到异步场景加载:通常通过登录场景进入其他场景时、或者切换场景时,切换的场景资产非常多时,会出现卡顿的现象。你不可能让用户一直停留在你之前的场景,一直等待。
可以使用一个纯UI的场景进行过度,显示要切换场景加载的进度。

public class HuangControlLoading : MonoBehaviour
{

    private Slider loadingSlider;     //显示进度的滑动条
    private Text loadingText;          //显示进度的文本
    private float loadingSpeed = 1;   //滑动条的速度。
    private float targetValue;        //加载场景实际的进度
    private AsyncOperation async;      //加载的场景
    private void Awake()
    {
        Init();
    }
    private void Start()

    {

        loadingSlider.value = 0.0f;

        StartCoroutine(AsyncLoading());

    }
    /// <summary>
    /// 进行初始化
    /// </summary>
    void Init()
    {
        loadingSlider = GameObject.Find("Slider").GetComponent<Slider>();
        loadingText = GameObject.Find("DataText").GetComponent<Text>();
    }
    IEnumerator AsyncLoading()
    {
        //异步加载场景
        async = SceneManager.LoadSceneAsync(HuangChoseScene.ChoseSceneName);
        //阻止当加载完成自动切换
        async.allowSceneActivation = false;
        //读取完毕后返回,系统会自动进入C场景
        yield return async;

    }

    void Update()

    {

        if (async == null) { return; }

        targetValue = async.progress;

        if (async.progress >= 0.9f)

        {

            //值最大为0.9

            targetValue = 1.0f;

        }
        //为滑动条赋值
        if (targetValue != loadingSlider.value)
        {
            loadingSlider.value = Mathf.Lerp(loadingSlider.value, targetValue, Time.deltaTime * loadingSpeed);

            if (Mathf.Abs(loadingSlider.value - targetValue) < 0.01f)

            {

                loadingSlider.value = targetValue;

            }
        }

        loadingText.text = "加载中..."+((int)(loadingSlider.value * 100)).ToString() + "%";

        if ((int)(loadingSlider.value * 100) == 100)

        {

            //允许异步加载完毕后自动切换场景

            async.allowSceneActivation = true;

        }

    }

}
发布了12 篇原创文章 · 获赞 18 · 访问量 567

猜你喜欢

转载自blog.csdn.net/weixin_42132959/article/details/103539780