Unity的协同停止问题

Unity的官方文档上描述,停止Unity的单个协同是以下的代码:

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
	IEnumerator Start() {
		StartCoroutine("DoSomething", 2.0F);
		yield return new WaitForSeconds(1);
		StopCoroutine("DoSomething");
	}
	IEnumerator DoSomething(float someParameter) {
		while (true) {
			print("DoSomething Loop");
			yield return null;
		}
	}
}
但是实际的协同在项目中并不能停止。

所以需要在调用方法StopAllCoroutines(),如果是在协同中调用这个方法的话,本身这个协同也会被停掉,所以,最好在调用需要用的协同之前停掉再调用。

下面是验证次说法的测试代码

using UnityEngine;
using System.Collections;

public class test0216 : MonoBehaviour {

	// Use this for initialization
	void Start () 
	{
		StartCoroutine(one());
		StartCoroutine(two());
		StartCoroutine(three());
	}


	IEnumerator one()
	{
		while(true)
		{
			for(int i=0;i<150;i++)
			{
				Debug.Log("one"+i);
				yield return 2;
			}

			yield break;
		}
	}

	IEnumerator two()
	{
		while(true)
		{
			for(int i=0;i<150;i++)
			{
				Debug.Log("two"+i);
				yield return 2;
			}
			
			yield break;
		}
	}

	IEnumerator three()
	{
		while(true)
		{
			for(int i=0;i<150;i++)
			{
				Debug.Log("three"+i);
				yield return 2;

				if(i>100)
				{
					Debug.Log("=============================");
					StopAllCoroutines();
					Debug.Log("-----------------------------");
				}
			}
			
			yield break;
		}
	}


}

打印结果如图:

Unity的协同停止问题_第1张图片

你可能感兴趣的:(unity3d)