赞
踩
参考博文
上述博文中,第四种场景异步平滑加载的方法中存在两个问题,具体说明和解决办法如下
public class Loading : MonoBehaviour { public Slider slider; public Text text; void Start() { StartCoroutine(LoadScene()); } /* * 上文第四种方法的代码中,存在两个问题,具体说明如下 */ IEnumerator LoadScene() { int displayProgress=0; int targetProgress=0; AsyncOperation op = SceneManager.LoadSceneAsync(2); op.allowSceneActivation = false; //问题1:协程的第一帧时,op.progress的值为0,此时上述链接代码中内部循环不会走,会一直走外部循环(大概走个十几次),直到这一帧结束; //解决办法A:我倾向于在内部循环中把比较运算符从“<”改为“<=”,还有一种是在外部循环的末尾加上yield return null; while (op.progress<0.9f) { Debug.Log("当前op.progress=" + op.progress); //问题2:上文中为(int)op.progress * 100,此时先向下取整转int,再乘以100。而op.progress的取值范围是[0,0.9) //解决办法;如下所示 targetProgress = (int)(op.progress * 100); while (displayProgress<= targetProgress) { SetCurrentProgress(displayProgress); displayProgress++; yield return null; } //解决方法B,加上yield return null; } targetProgress = 100; while (displayProgress <targetProgress) { //注意一下代码顺序,这样写UI中显示displayProgress能到100 displayProgress++; SetCurrentProgress(displayProgress); yield return null; } op.allowSceneActivation = true; } private void SetCurrentProgress(int progress) { text.text = progress + "%"; slider.value = progress / 100f; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。