烘焙场景new,加载并显示进度值就这么多!

烘焙场景new,加载并显示进度值就这么多!

首先加载场景显示进度条

简单的说需要coroutine + Update

一直用UGUI,进度条用Slider

别忘了引用

using UnityEngine.UI;

public Slider slider;

如果你想在它旁边显示一个数字百分比,只需添加一个文本

public Text text;

假设我们所在的场景是旧的unity 加载进度条,我们想去新的场景,如何加载显示进度呢?

可以直接在老场景做音乐音效,也可以加个中间场景显示加载进度

让我们添加一个中间场景,称为 middle

加载进度条slder和百分比文本text是在这个场景中创建的

这意味着至少需要三个脚本

一个挂在老场景,一个挂在中间场景,一个脚本负责把老场景新的场景名传给中间场景

先来说说传递场景名的脚本

一个词

public class PassSceneName
{
        public static string SceneName;
}

在旧场景中编写两个动作

1.负责将要开启的场景名称传递给PassSceneName

2.开启中间场景

public void GotoNewScene()
{
        PassSceneName.SceneName="new";
        SceneManager.LoadScene("middle");
}

这样进入中间场景后,可以通过PassSceneName.SceneName读取要加载的场景名称

作为加载场景,显然是自动加载,可以在Start方法中进行异步加载

public Slider slider;
public Text text;
public float speed = 1.0f;
private AsyncOperation op;
private void Start()
{
        StartCoroutine(loadScene());
}
Ienumerator loadScene()
{
        slider.value = 0f;
        op=SceneManager.LoadSceneAsync(PassSceneName.SceneName);
        op.allowSceneActivation = false;     //加载完成不自动切换
        yield return op;
}
private void Update()
{
        if(op != null)
        {
                float val = op.progress;
                slider.value = op.progress;
                int persent=(int)(val * 100);
                text.text = persent + "%";
                if(persent == 100)
                {
                        op.allowSceneActivation = true;      //允许加载完成后切换场景
                }
        }
}

如上,slider的值直接等于异步加载的进度值。

slider.value = op.progress;

百分比文字是progress x100然后四舍五入

进度到100%后才允许自动场景切换,到100%后才允许自动切换场景

其实很容易

下面说一下加载场景不打光的问题,也很简单

首先,场景必须使用实时光照设置

然后在灯光面板

Unity带进度条加载场景及场景变暗的解决方法

先取消Auto Generate前的勾选

Unity带进度条加载场景及场景变暗的解决方法

然后点击生成光照按钮

和baked一样,会在场景文件的同级目录下生成一个同名的文件夹

里面有一个LightingData,一个ReflectionProbe

但是和baked不同的是,这个不算是baked场景,过程很快unity 加载进度条,这样程序运行的时候3D交通工具,后面加载场景的时候,场景不会变暗