using System; using System.Collections.Generic; using UnityEngine; public class UnityMainThreadDispatcher : MonoBehaviour { private static readonly Queue executionQueue = new Queue(); private static UnityMainThreadDispatcher instance = null; public static UnityMainThreadDispatcher Instance() { if (instance == null) { var obj = new GameObject("UnityMainThreadDispatcher"); instance = obj.AddComponent(); DontDestroyOnLoad(obj); } return instance; } public void Enqueue(Action action) { lock (executionQueue) { executionQueue.Enqueue(action); } } private void Update() { lock (executionQueue) { while (executionQueue.Count > 0) { executionQueue.Dequeue().Invoke(); } } } }