yield break 的工作原理与 StopCoroutine() 相同吗?团结[已关闭]

问题描述 投票:0回答:1

Unity 似乎有两种结束协程的方式。 StopCoroutine() 的调用方式与 StartCoroutine() 相同,从函数外部调用。然而,似乎还有一种方法可以通过

yield break
语句从协程本身内部停止协程。

我的问题是为什么有两种不同的方法来结束协程? Yield Break 与

StopCoroutine()
的作用相同吗?如果不是,那么有什么区别?我应该使用哪个?

c# unity-game-engine coroutine
1个回答
4
投票

它们具有相同的效果,但它们不是同一件事。

yield break
将结束枚举器,因为它表示迭代已完成。枚举器中的
yield break
语句可以被认为等同于枚举器函数末尾的
goto

Unity Coroutine 使用枚举器框架,但任何返回

IEnumerator
的函数都可以是迭代器,您不需要使用 Coruoutines 来获得此行为。仅当您使用迭代器方法作为参数调用
StartCoroutine
时,它才会成为协程。

Couroutne 只是一个附加到单行为的迭代器,每次更新都会调用一次

MoveNext

因此,调用

StopCoroutine
,只是告诉单一行为停止调用
MoveNext
并处置迭代器。

那么为什么有两种方法可以做到这一点呢?因为它们有不同的用例。

yield break
只能从协程(枚举器)内部调用,
StopCoroutine
可以从协程外部调用。

© www.soinside.com 2019 - 2024. All rights reserved.