三步搞定Unity异步加载场景

 加载场景的功能想必在游戏开发中是十分常见的了。如果想从一个场景过渡到另一个包含资源较多的场景,必然需要等待一段时间,这时候就需要有一个滑动条来动态显示加载进度了。本案例提到三个场景:A(原始的场景)、B(加载场景)和C(想要切换到的场景)。当然,很多时候B场景是和A场景是合并的。


1.先写一个全局类,记录当前要切换场景的名称

public class Globe

{

    public static string loadName;

}


2.在A场景中,执行如下脚本后,会瞬间过渡到B场景:

public class A : MonoBehaviour

{

    void Start()

    {

        Globe.loadName = "C";                  //记录Loading场景中 需要异步加载的场景名称

        SceneManager.LoadScene("B");   //进入B场景

    }

}


3.在B场景中,应该有进度条、进度百分比等UI,同时也可以配上自定义的动画。

该场景自动运行以下脚本:

public class AsyncLoadScene : MonoBehaviour

{

    public Slider loadingSlider;     //显示进度的滑动条

    public Text loadingText;          //显示进度的文本

    public string SceneName;     

    private float loadingSpeed = 1;

    private float targetValue;

    private AsyncOperation async;

    private void Start()

    {

        loadingSlider.value = 0.0f;

        StartCoroutine(AsyncLoading());

    }

    IEnumerator AsyncLoading()

    {

        //异步加载场景

        async = SceneManager.LoadSceneAsync(Globe.nextSceneName);   

        //阻止当加载完成自动切换

        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;

        }

    }

}

更多unity2018的功能介绍请到paws3d爪爪学院查找。链接https://www.paws3d.com/learn/,也可以加入unity学习讨论群935714213

近期更有资深开发人士直播分享unity开发经验,详情请进入官网或加入QQ群了解

猜你喜欢

转载自blog.csdn.net/qq_35037137/article/details/88826732