通常,您将协程设计为在达到某些目标时自然终止。
IEnumerator TickFiveSeconds()
{
var wait = new WaitForSeconds(1f);
int counter = 1;
while(counter < 5)
{
Debug.Log("Tick");
counter++;
yield return wait;
}
Debug.Log("I am done ticking");
}要从协程“内部”阻止协程,您不能像在普通功能中早退一样简单地“返回”。而是使用yield break。
IEnumerator ShowExplosions()
{
... show basic explosions
if(player.xp < 100) yield break;
... show fancy explosions
}您还可以强制脚本启动的所有协程在完成之前停止。
void OnDisable()
{
// 停止所有正在运行的协程
StopAllCoroutines();
}从调用方停止特定协程的方法因启动方式而异。
如果您通过字符串名称启动了协程:
StartCoroutine("YourAnimation");那么您可以通过使用相同的字符串名称调用StopCoroutine来停止它:
StopCoroutine("YourAnimation");或者,你可以保持一个参考或者在IEnumerator由协同程序方法,返回或将Coroutine被返回的对象StartCoroutine,并调用StopCoroutine无论是那些对:
public class SomeComponent : MonoBehaviour
{
Coroutine routine;
void Start () {
routine = StartCoroutine(YourAnimation());
}
void Update () {
// 稍后,响应一些输入...
StopCoroutine(routine);
}
IEnumerator YourAnimation () { /* ... */ }
}