在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