我有一个调用IEnumerator的函数,但是每次我尝试运行它时,IEnumerator都会在yiel返回new后立即停止。有人可以帮忙吗?它会在调试中启动日志,但不会登录。
public void StartAnimation()
{
StartCoroutine(ResizeText());
}
IEnumerator ResizeText()
{
Debug.Log("start");
yield return new WaitForSeconds(0.1f);
Debug.Log("over");
}
答案 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");
}