Unity学习笔记——异步加载的使用和跳转场景灯光变暗的解决方法

游戏中需要一个加载界面来过渡,比如从A界面(选关)跳转到C界面(游戏),由于游戏界面有大量3d模型,需要加载时间,或者为了美观,我们都需要一个B场景来过渡。

其中有一点需要注意,你会发现跳转场景后,后者的游戏场景的灯光会变暗,而且还改不回原来的效果,这里需要对场景进行灯光烘培,具体操作:Window-Lighting-Settings,取消勾选Auto,然后building。。他会在场景保存的当前目录生成一个文件夹,保存着场景的灯光贴图。

以下是loading界面挂载的脚本,需要一个slider做的加载条

public class Loading : MonoBehaviour {

    private AsyncOperation async;
    int currProgress;
    public Slider loadingBar;

    private void Start()
    {
        StartCoroutine(loadScene());
    }
    IEnumerator loadScene()
    {
        async = SceneManager.LoadSceneAsync("LevelScene");
        //不允许加载完后立即跳转
        async.allowSceneActivation = false;
        while(async.isDone&& async.progress < 0.8f)
        {
            //自己设置的游戏开始标志位,可删去
            Global.gameStart = true;
            yield return async;
        }
        
    }
    private void Update()
    {
        /// <summary>
        /// 这里copy的网上代码,懒得写逻辑了,具体思路是,获取异步加载的进度
        /// 如果小于0.8(因为0.8异步加载就算完成了),得到异步加载进度的百分制进度,及乘以100以得到小于80的数
        /// 如果超过了0.8,即异步加载完成,但是前面不允许加载完立即跳转,因为这样会让加载场景存在时间过短
        /// 需要让玩家看到一个需要合理的加载时间的界面
        /// 如果当前进度小于异步加载的进度,当前进度++,给加载条UI的值赋值,如果大于说明加载条也走到了80,当异步加载进度完成后,就允许跳转了
        /// </summary>

        int progressBar = 0;
        if (async.progress < 0.8)
            progressBar = (int)(async.progress * 100);
        else
            progressBar = 100;
        if (currProgress <= progressBar)
        {
            currProgress++;
            loadingBar.value = currProgress;
        }
        else
        {
            if (progressBar == 100) async.allowSceneActivation = true;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/u012187817/article/details/80459773