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