協同程式,即在主程式運作時同時開啟另一段邏輯處理,來協同目前程式的執行。換句話說,開啟協同程式就是開啟一個線程。但在Unity3D中,協同程式并不是真正的線程,協同程式與線程差不多,也就是一條執行序列,擁有自己獨立的棧,局部變量和指令指針,同時又與其它協同程式共享全局變量和其它大部分東西。線程與協同程式的主要差別在于,一個具有多線程的程式可以同時運作幾個線程,而協同程式卻需要彼此協作地運作。就是說,一個具有多個協同程式的程式在任何時刻隻能運作一 個協同程式,并且正在運作的協同程式隻會在其顯示地挂起時,它的執行才會暫停。
概念總是很枯燥的,我們用一個例子來學習協同的使用方法。建立項目,然後添加一個C#腳本,編輯腳本,代碼如下:
using UnityEngine;
using System.Collections;
public class NewBehaviourScript : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (Input.GetKeyDown(KeyCode.Space))
{
//開啟一個協同
StartCoroutine("fun");
}
}
IEnumerator fun()
{
print(Time.time);
//等待兩秒鐘
yield return new WaitForSeconds(2.0f);
print(Time.time);
}
}
代碼很簡單,隻是在Update函數裡,當按下空格鍵時,我們開啟一個協同,注意開啟協同時用的是StartCoroutine,然後把函數名作為參數,協同程式的傳回類型隻能為null、等待的幀數(frame)以及等待的時間。是以我們在協同函數裡反回等待的時間兩秒鐘,然後執行下一個print函數,把腳本拖到Camera上,運作,在控制台輸出兩次列印的時間。
從圖檔中看出兩個print函數兩次列印時間差距大約兩秒,是以我們可以用協同函數來實作等待執行某些動作。
好了,今天就說這麼多,項目源碼就不貼了。