Unity协程使用范例(踩坑记)

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

你可能感兴趣的:(Unity开发)