給想用多執行緒, 但又需要和 unity 互動的人有個粗淺的測試環境/方式~
概念很單純, 在主執行緒裡面放一份清單, 定期檢查是否有委託的"任務",
通常可用來處理「xxx can only be called from the main thread」這類的錯誤.
反之, 也可以從 main thread 委託其他 thread 處理東西~
// main thread 的處理者 class MainThreadTaskMan : MonoBehaviour { public static MainThreadTaskMan Singleton { get; set; } Queue<Action> mThreadTaskOnMain = new Queue<Action>(); void Awake() { // 確保不死 DontDestroyOnLoad(this); Singleton = this; } void Update() { // 記得先 lock 住核心資料(常用作法) lock (mThreadTaskOnMain) { if (mThreadTaskOnMain.Count < 1) return; // 取出 var task = mThreadTaskOnMain.Dequeue(); // 執行 task(); } } // 通常是給非主執行緒的地方呼叫, 當然這種作法也可以在主執行緒委託呼叫 public void AddTask(Action task) { // 記得先 lock 住核心資料(常用作法) lock (mThreadTaskOnMain) { mThreadTaskOnMain.Enqueue(task); } } }