IEnumerator在yield返回新的WaitForSeconds()单位后停止

时间:2019-01-25 21:24:06

标签: c# unity3d ienumerator

我有一个调用IEnumerator的函数,但是每次我尝试运行它时,IEnumerator都会在yiel返回new后立即停止。有人可以帮忙吗?它会在调试中启动日志,但不会登录。

public void StartAnimation()
{
   StartCoroutine(ResizeText());        
}

IEnumerator ResizeText()
{        
    Debug.Log("start");
    yield return new WaitForSeconds(0.1f);
        Debug.Log("over");
}

1 个答案:

答案 0 :(得分:2)

实际上,这段代码是完全有效的(考虑到协程的实现方式和工作方式,这是有意义的)。这也是有道理的,因为它是yield return而不是yield break。因此从技术上讲,代码应按原样工作。

我也在空白的场景中尝试过。

首先,您是在时间流逝之前“很可能”杀死场景。

复制:

创建一个空白场景。将脚本添加到相机。添加:

void Start()
{
    StartCoroutine(meh()); //OR: StartCoroutine("meh"); //Both will work just fine..
}

private IEnumerator meh()
{
    Debug.Log("Hello");
    yield return new WaitForSeconds(2.0f);
    Debug.Log("Bye");

}

运行它时,它将打印“ Hello”,然后等待2.0秒,然后显示“ Bye”。

因此,您的方案中有其他遗漏/错误。

yield语句之后,只有在yield break语句之后代码才能运行的唯一时间:

private IEnumerator meh()
{
    Debug.Log("Hello");
    yield return new WaitForSeconds(2.0f);

    Debug.Log("Bye");
    yield break;

    //NOTHING here will be executed because `yield break;` is like a permanent exit of the Coroutine..

    //Therefore these statements below will NOT execute..
    Debug.Log("Reboot");
}