这里查看Unity协程Coroutine使用总结和一些坑
MonoBehavior关于协程提供了下面几个接口:
可以使用函数或者函数名字符串来启动一个协程,同时可以用函数,函数名字符串,和Coroutine对象来终止一个协程。
使用上有这几种问题:
1,使用 Coroutine StartCoroutine(IEnumerator routine)来启动一些协程,能否使用StopCoroutine(string methodName) 和StopCoroutine(Coroutine routine);StopCoroutine(IEnumerator routine)来结束对应的协程:
答案:StopCoroutine(string methodName)不能
能否用StopCoroutine(IEnumerator routine)来终止对应的协程?
需要使用IEnumerator tempEnum把协程方法保存下来,然后调用来StopCoroutine(tempEnum)终止
2,使用StartCoroutine(string methodName)来启动的协程,能否使用StopCoroutine(Coroutine routine)和StopCoroutine(IEnumerator routine)来结束对应的协程:
答案:不能
StopCoroutine(Coroutine routine)肯定不行了,没有Coroutine对象
3, Coroutine StartCoroutine(IEnumerator routine)可以将一个非MonoBehavior对象里的IEnumerator传入,在当前Mono对象里管理启动这个协程。
但是StartCoroutine(string methodName)不能将非MonoBeahvior对象里的函数名串作为参数来启动协程,因为StartCoroutine(string methodName)是在当前Mono对象下匹配对应的函数名字
4,Coroutine StartCoroutine(IEnumerator routine)来启动多个协程 Coroutine1和Coroutine2,分别使用StopCoroutine(Coroutine )来终止对应的协程
5,调用StartCoroutine(string methodName)多次来启动多个协程,使用StopCoroutine(string methodName) 一次可以终止所有的该协程函数
虽然unity文档上是这么说的:
但实际上会把所有叫做methodName的协程都取消掉,源码里也是这么做的
源码不便分享,需要请私信