首先加载场景显示进度条
简单的说需要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%后才允许自动切换场景
其实很容易
下面说一下加载场景不打光的问题,也很简单
首先,场景必须使用实时光照设置
然后在灯光面板
先取消Auto Generate前的勾选
然后点击生成光照按钮
和baked一样,会在场景文件的同级目录下生成一个同名的文件夹
里面有一个LightingData,一个ReflectionProbe
但是和baked不同的是,这个不算是baked场景,过程很快unity 加载进度条,这样程序运行的时候3D交通工具,后面加载场景的时候,场景不会变暗