Unity 似乎有两种结束协程的方式。 StopCoroutine() 的调用方式与 StartCoroutine() 相同,从函数外部调用。然而,似乎还有一种方法可以通过
yield break
语句从协程本身内部停止协程。
我的问题是为什么有两种不同的方法来结束协程? Yield Break 与
StopCoroutine()
的作用相同吗?如果不是,那么有什么区别?我应该使用哪个?
它们具有相同的效果,但它们不是同一件事。
yield break
将结束枚举器,因为它表示迭代已完成。枚举器中的 yield break
语句可以被认为等同于枚举器函数末尾的 goto
。
Unity Coroutine 使用枚举器框架,但任何返回
IEnumerator
的函数都可以是迭代器,您不需要使用 Coruoutines 来获得此行为。仅当您使用迭代器方法作为参数调用 StartCoroutine
时,它才会成为协程。
Couroutne 只是一个附加到单行为的迭代器,每次更新都会调用一次
MoveNext
。
因此,调用
StopCoroutine
,只是告诉单一行为停止调用 MoveNext
并处置迭代器。
那么为什么有两种方法可以做到这一点呢?因为它们有不同的用例。
yield break
只能从协程(枚举器)内部调用,StopCoroutine
可以从协程外部调用。