r2/DemoUnity/Assets/Scripts/MainThreadDispatcher.cs
lightings 4c647507d2 init
2023-03-27 17:26:02 +08:00

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();
}
}
}
}