在Unity中,如果使用NGUI的UISlider來做讀取場景(或者其他需要一段時間才能完成的事務)的進度條
必須使用次線程調用/刷新
否則到進度條完全完成前,並不會刷新(即一直停留在0%,直至突然跳到100%)
------------------------------------------------------------------------------------
思路
1. 在綁定的腳本內, 添加一個NGUI的UISlider,以及必要的(float)current, total 記錄進度;
2. 在主線程中使用次線程調用方法LoadFoo()讀取內容
3. 主線程的void Update() 可以正常刷新UISlider.sliderValue = current / total;
------------------------------------------------------------------------------------
實現
1. 添加一個UISlider, 以及float total, current等內容,以在Update中修改UISlider.sliderValue
(這部分具體實現不再贅述)
2. 在代碼中, 將讀取進度條的方法LoadFoo()的返回類型改爲IEnumerator
3. 在LoadFoo內,每個需要通知刷新UI的地方, 添加一行: yield return 0.
即告訴Unity這裏暫時有個空檔,通常是在每次foreach任務完成的最後. 此外在完成後也要yield一次.
4. 在原本調用LoadFoo()的地方, 改爲使用次線程調用: StartCoroutine(LoadFoo());
注: Unity目前不支持使用 Thread開啓多線程, 必須使用StartCoroutine