今天在程序邏輯的時候遇到一個小問題,就是在Awake開啓了一個協程,發現協程怎麼都無法往下執行。
void Awake ()
{
StartCoroutine (DelayCheckState ());
}
IEnumerator DelayCheckState(){
Debug.Log ("AAAA");
yield return null;
Debug.Log ("BBB");
CheckState ();
}
後來發現原來是因爲其他地方將這個GameObject隱藏了再打開,以爲是像Invoke一樣,不顯示的時候暫停,顯示了再繼續一樣。
後來查到資料才知道:
II:StartCoroutine(IEnumerator routinue);
只能等待線程的終止而不能隨時終止
銷燬:StopAllStoroutines(),
協同程序所在的gameObject 的 active屬性設置爲false,再次設置active爲true,協同程序將不會再次開啓。
如果將協同程序所在的腳本的enable設置爲false則不會消失。這是因爲協同程序被開啓後作爲一個線程在運行,
而MonoBehaviour也是一個線程,他們成爲互不干擾的的模塊。他們公用一個對象,只有在這個對象不可見才能同時終止這兩個線程。然而爲了
管理我們額外開啓的線程,Unity3D將協同程序的調用放在了MonoBehaviour中,這樣在編程時就可以方便的調用指定的腳本中的協同程序,而不是
無法去管理,特別是對於只根據方法名來判斷線程的方式在多人開發中很容易出錯,這樣的設計是爲了保證對象,腳本的條件管理,並防止重名。
有點略坑。開此貼警示下。