Unity帶進度條加載場景及場變黑的解決方法
阿新 • • 發佈:2018-09-07
mage dsc 異步加載 協程 fff 引用 文件 簡單的 term 首先說加載場景顯示進度條
簡單的來說需要協程+Update
一直用UGUI,進度條就用Slider
別忘了引用
using UnityEngine.UI;
public Slider slider;
如果想在旁邊顯示個數字百分比,就再加個Text就好了
public Text text;
假設我們所在場景為old,要去往場景new,如何加載並顯示進度呢
可以直接在old場景中做,也可以加一個中間場景專門顯示加載進度
我們就加個中間場景吧,叫middle
而加載的進度條slder和百分比文字text就在此場景中建立
也就是說至少需要三個腳本
一個掛在old場景中,一個掛在middle場景中,還有一個腳本負責把場景new的名字從old場景中傳遞至middle場景
首先說傳遞場景名字的腳本
一句話
public class PassSceneName
{
public static string SceneName;
}
old場景中的腳本兩個動作
1.負責把要打開場景的名字傳給PassSceneName
2.打開middle場景
public void GotoNewScene()
{
PassSceneName.SceneName="new";
SceneManager.LoadScene("middle");
}
這樣,在進入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;
而百分比文字則是進度x100再取整
在進度達到100%之前不允許自動切換場景,達到100%再允許
其實很簡單
再說說加載場景,不亮的問題,也很簡單
首先場景肯定用的是實時光設置
那麽在lighting面板中
首先把Auto Generate前的勾取消
再點擊 Generate Lighting按鈕
與baked相同,也會在場景文件同級目錄下生成一個同名的文件夾
裏面有一個LightingData,一個ReflectionProbe
但與baked不同的是,這個不算是烘焙場景,過程非常快,這樣,以後再在程序運行時加載其場景,就不會進去場景變暗了
Unity帶進度條加載場景及場變黑的解決方法