本節(jié)要點
1.協(xié)同程序簡介
1.什么是協(xié)同程序
協(xié)同程序,簡稱“協(xié)程”。在腳本運行過程中,需要額外的執(zhí)行一些其他的代碼,
這個時候就可以將“其他的代碼”以協(xié)程的形式來運行。
類似于開啟了一個線程,但是協(xié)程不是線程。
2.協(xié)同程序的使用前提
只有在繼承了“MonoBehaviour”這個類的子類中才能使用相關(guān)的協(xié)程方法。
2.協(xié)同程序語法格式
1.定義協(xié)同程序
協(xié)同程序就是一個“代碼片段”,往往我們需要將這個代碼片段封裝成一個方法,
或者稱之為函數(shù)。
IEnumerator Task3()
{
yield return new WaitForSeconds (2); Debug.Log ("任務(wù) 3");
}
參數(shù)說明:
IEnumerator:協(xié)同程序的返回值類型;
yield return:協(xié)同程序返回 xxxxx;
new WaitForSeconds (秒數(shù)):實例化一個對象,等待多少秒后繼續(xù)執(zhí)行。
這個 Task3()的作用就是等待兩秒后,繼續(xù)執(zhí)行任務(wù) 3.
2.開啟協(xié)同程序
StartCoroutine(“協(xié)同程序方法名”);
這個 StartCoroutine 有三種重載形式,目前先只介紹這一種。
3.停止協(xié)同程序
StopCoroutine(“協(xié)同程序方法名”);
這個 StopCoroutine 也有三種重載形式,目前先只介紹這一種。
關(guān)鍵代碼
CoroutinTest
public class CoroutinTest : MonoBehaviour {
// Use this for initialization
void Start () {
//普通程序 從上往下執(zhí)行;
//Debug.Log("任務(wù)1");
//Debug.Log("任務(wù)2");
//Debug.Log("任務(wù)3");
//Debug.Log("任務(wù)4");
//協(xié)同程序
Debug.Log("任務(wù)1");
Debug.Log("任務(wù)2");
//Task3();//不是這樣調(diào)用協(xié)同程序的
StartCoroutine("Task3");//開啟協(xié)程; 跟之前線程不同的是 這是字符串的方法名
Debug.Log("任務(wù)4");
}
IEnumerator Task3() {//要注意協(xié)同程序返回值類型
//等待兩秒后執(zhí)行;
yield return new WaitForSeconds(2);//協(xié)同程序返回值格式 yield return
Debug.Log("任務(wù)3");
yield return new WaitForSeconds(2);//協(xié)同程序返回值格式 yield return,為了測試按下空格鍵后是否停止執(zhí)行協(xié)程;
Debug.Log("任務(wù)5");
}
// Update is called once per frame
//通過按鍵停止協(xié)程的執(zhí)行
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
StopCoroutine("Task3");
}
}
}
小結(jié)

普通程序執(zhí)行圖.png

協(xié)程執(zhí)行圖.png

Unity API.png