public class CoTest : MonoBehaviour
{
void Start ()
{
Invoke("Test1", 0.1f);
Invoke("Test1", 0.2f);
Invoke("Test2", 1.1f);
Invoke("Test2", 1.2f);
Invoke("Test3", 2.1f);
Invoke("Test3", 2.2f);
Invoke("Test4", 3.1f);
Invoke("Test4", 3.2f);
}
// ----------------------------------------------
void Test1()
{
StopCoroutine(Test1Co());
StartCoroutine(Test1Co());
}
IEnumerator Test1Co()
{
yield return new WaitForSeconds(1);
Debug.Log("Test1Co");
}
void Test2()
{
StopCoroutine("Test2Co");
StartCoroutine(Test2Co());
}
IEnumerator Test2Co()
{
yield return new WaitForSeconds(1);
Debug.Log("Test2Co");
}
// ----------------------------------------------
void Test3()
{
StopCoroutine("Test3Co");
StartCoroutine("Test3Co");
}
IEnumerator Test3Co()
{
yield return new WaitForSeconds(1);
Debug.Log("Test3Co");
}
IEnumerator last4;
void Test4()
{
if (last4 != null)
{
StopCoroutine(last4);
last4 = null;
}
last4 = Test4Co();
StartCoroutine(last4);
}
IEnumerator Test4Co()
{
yield return new WaitForSeconds(1);
Debug.Log("Test4Co");
}
}
以上范例1和2 均为坑,无法停止前面的协程
只有范例3和4为正确用法
正确的输出为:
Test1Co
Test1Co
Test2Co
Test2Co
Test3Co
Test4Co