using System; using System.Collections.Generic; using UnityEngine; public class MainThreadDispatcher : MonoBehaviour { private static MainThreadDispatcher instance; private readonly Queue callbacksQueue = new Queue(); private void Awake() { if (instance == null) { instance = this; DontDestroyOnLoad(gameObject); } else { Destroy(gameObject); } } public static void Enqueue(Action callback) { lock (instance.callbacksQueue) { instance.callbacksQueue.Enqueue(callback); } } private void Update() { lock (callbacksQueue) { while (callbacksQueue.Count > 0) { callbacksQueue.Dequeue().Invoke(); } } } }