1. 程式人生 > >Unity帶進度條加載場景及場變黑的解決方法

Unity帶進度條加載場景及場變黑的解決方法

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帶進度條加載場景及場變黑的解決方法