IEnumerator (迭代器)
void Start() { StartCoroutine(LoadScene()); } IEnumerator LoadScene() { int i = 0; print("a:" + ++i); AsyncOperation ao = null; if (level1 == 1) { ao = SceneManager.LoadSceneAsync("Normal"); } else if (level1 == 2) { ao = SceneManager.LoadSceneAsync("Woods"); } else if (level1 == 3) { ao = SceneManager.LoadSceneAsync("Peak"); } ao.allowSceneActivation = false; while (!ao.isDone) { print("b:" + ++i); if (ao.progress >= 0.9f) { GameObject.Destroy(Camera.main); ao.allowSceneActivation = true; } yield return null; if (ao.isDone) { Instantiate(mapManager).gameManager = this; } print("c:" + ++i); }输出结果如下:
a:1
b:2
c:3
b:4
c:5
启动一个协同程序。
可以使用 yield 语句,随时暂停协程的执行。使用 yield 语句时,协程将暂停执行,并在下一帧自动恢复。协程非常适合用于在若干帧中对行为建模。协程几乎没有性能开销。StartCoroutine 函数始终立即返回,但是您可以生成结果。生成操作将等待协程完成执行。即使多个协程在同一帧中完成,也不能保证它们按照与启动相同的顺序结束。