天天看點

Unity的協程,多線程,處理與使用方法

在Unity3D中,使用MonoBehaviour.StartCoroutine方法即可開啟一個協同程式,也就是說該方法必須在MonoBehaviour或繼承于MonoBehaviour的類中調用。

在Unity3D中,使用StartCoroutine(string methodName)和StartCoroutine(IEnumerator routine)都可以開啟一個線程。差別在于使用字元串作為參數可以開啟線程并線上程結束前終止線程,相反使用IEnumerator 作為參數隻能等待線程的結束而不能随時終止(除非使用StopAllCoroutines()方法);另外使用字元串作為參數時,開啟線程時最多隻能傳遞一個參數,并且性能消耗會更大一點,而使用IEnumerator 作為參數則沒有這個限制。

在Unity3D中,使用StopCoroutine(string methodName)來終止一個協同程式,使用StopAllCoroutines()來終止所有可以終止的協同程式,但這兩個方法都隻能終止該MonoBehaviour中的協同程式。

還有一種方法可以終止協同程式,即将協同程式所在gameobject的active屬性設定為false,當再次設定active為ture時,協同程式并不會再開啟;如是将協同程式所在腳本的enabled設定為false則不會生效。這是因為協同程式被開啟後作為一個線程在運作,而MonoBehaviour也是一個線程,他們成為互不幹擾的子產品,除非代碼中用調用,他們共同作用于同一個對象,隻有當對象不可見才能同時終止這兩個線程。然而,為了管理我們額外開啟的線程,Unity3D将協同程式的調用放在了MonoBehaviour中,這樣我們在程式設計時就可以友善的調用指定腳本中的協同程式,而不是無法去管理,特别是對于隻根據方法名來判斷線程的方式在多人開發中很容易出錯,這樣的設計保證了對象、腳本的條理化管理,并防止了重名。

繼續閱讀