文章日志
日志类别:Unity3d
2021-08-16 16:36

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 函数始终立即返回,但是您可以生成结果。生成操作将等待协程完成执行。即使多个协程在同一帧中完成,也不能保证它们按照与启动相同的顺序结束。




0    0
昵称: