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