天天看點

Unity3D學習筆記09:協同

        協同程式,即在主程式運作時同時開啟另一段邏輯處理,來協同目前程式的執行。換句話說,開啟協同程式就是開啟一個線程。但在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上,運作,在控制台輸出兩次列印的時間。

Unity3D學習筆記09:協同

        從圖檔中看出兩個print函數兩次列印時間差距大約兩秒,是以我們可以用協同函數來實作等待執行某些動作。

        好了,今天就說這麼多,項目源碼就不貼了。

繼續閱讀