42 lines
859 B
C#
42 lines
859 B
C#
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class MainThreadDispatcher : MonoBehaviour
|
|
{
|
|
private static MainThreadDispatcher instance;
|
|
private readonly Queue<Action> callbacksQueue = new Queue<Action>();
|
|
|
|
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();
|
|
}
|
|
}
|
|
}
|
|
}
|