前言:
想做個排程工具,不是那種"系統排程"工具,而是給遊戲怪物AI用的。最近在搞怪物AI,隨著動作越來越多,若每個動作都分開判斷執行,這樣加一堆鎖也不夠,再來是Unity 2D animator也很奇怪,在3D上的smooth轉換是很漂亮,但2D完全就變成個累贅,動畫都沒播完就轉換下一個
。

C# 的Task又是另一個世界,但因為一下接觸太多新資訊,所以開個創作邊學邊紀錄自己蠢蠢的實驗。

Async 和 Unity Coroutine的差別:

來源(裡面有程式碼比對)
- Async是C#的東西,生命週期要自己控制。 Coroutine是Unity的東西,生命週期綁在MonoBehavior上,若在Coroutine結束前刪掉啟動它的MonoBehavior物件會報錯,所以重要的Coroutine我會用單例物件去啟動。
- Async不用Unity引擎也能存在。 (如下圖所示,遊戲都沒在play了,沒收掉的Async還是會跑)
- 根據這串討論,Coroutine適合以frame為基準執行的動作(例如移動),Async適合用在工作排程。
- 來源影片
- Async沒管控好會造成memery leaks,而且線程很珍貴,用太多很浪費,可用yield舒緩。 Coroutine則比較沒有記憶體的問題。
Action 和 Task
這著這個參考做,不知道為什麼第17、18行不會執行,只有第19行會。
結果:但若是在裡面用await Task.Run卻又會執行:
另外這篇文章有比較 Func , Action 和 Task。
Task.WhenAll 等待Task跑完
124
巴幣:
12