首先說加載場景顯示進度條異步
簡單的來講須要協程+Updateide
一直用UGUI,進度條就用Slidercode
別忘了引用協程
using UnityEngine.UI;
public Slider slider;
若是想在旁邊顯示個數字百分比,就再加個Text就行了blog
public Text text;
假設咱們所在場景爲old,要去往場景new,如何加載並顯示進度呢string
能夠直接在old場景中作,也能夠加一箇中間場景專門顯示加載進度it
咱們就加個中間場景吧,叫middleio
而加載的進度條slder和百分比文字text就在此場景中創建class
也就是說至少須要三個腳本date
一個掛在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不一樣的是,這個不算是烘焙場景,過程很是快,這樣,之後再在程序運行時加載其場景,就不會進去場景變暗了