unity3d 结束协程
示例
通常,您将协程设计为在达到某些目标时自然终止。
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"); }
要从协程“内部”阻止协程,您不能像在普通功能中早退一样简单地“返回”。而是使用yieldbreak。
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 () { /* ... */ } }