IEnumerator 在 yield return new WaitForSeconds() unity 后停止
IEnumerator stops after yield return new WaitForSeconds() unity
我有一个调用 IEnumerator 的函数,但每次我尝试 运行 它时,IEnumerator 在 yiel return new 之后立即停止。有人可以帮忙吗?它在调试中记录启动但不登录。
public void StartAnimation()
{
StartCoroutine(ResizeText());
}
IEnumerator ResizeText()
{
Debug.Log("start");
yield return new WaitForSeconds(0.1f);
Debug.Log("over");
}
实际上这段代码是完全有效的(考虑到协程的实现方式和工作方式,它是有意义的)。这也是有道理的,因为它是 yield return
而不是 yield break
.. 所以从技术上讲,代码应该按原样工作。
我也在空白场景中试过..
首先,你正在"probably"在时间流逝之前杀死你的场景。
转载:
创建一个空白场景.. 将脚本添加到相机。添加:
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"..
因此,在您的场景中 missing/wrong 还有其他内容..
在 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");
}
我有一个调用 IEnumerator 的函数,但每次我尝试 运行 它时,IEnumerator 在 yiel return new 之后立即停止。有人可以帮忙吗?它在调试中记录启动但不登录。
public void StartAnimation()
{
StartCoroutine(ResizeText());
}
IEnumerator ResizeText()
{
Debug.Log("start");
yield return new WaitForSeconds(0.1f);
Debug.Log("over");
}
实际上这段代码是完全有效的(考虑到协程的实现方式和工作方式,它是有意义的)。这也是有道理的,因为它是 yield return
而不是 yield break
.. 所以从技术上讲,代码应该按原样工作。
我也在空白场景中试过..
首先,你正在"probably"在时间流逝之前杀死你的场景。
转载:
创建一个空白场景.. 将脚本添加到相机。添加:
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"..
因此,在您的场景中 missing/wrong 还有其他内容..
在 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");
}