2025-09-24 19:24:19 +08:00
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
|
|
|
|
|
|
namespace UnityThreadingUtils
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD><DFB3>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD>ص<EFBFBD><D8B5>ȵ<EFBFBD>Unity<74><79><EFBFBD>߳<EFBFBD>ִ<EFBFBD>еĹ<D0B5><C4B9><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class UnityMainThreadDispatcher : MonoBehaviour
|
|
|
|
|
|
{
|
|
|
|
|
|
private static UnityMainThreadDispatcher _instance;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ڴ洢<DAB4><E6B4A2>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>ִ<EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
private readonly Queue<System.Action> _actionQueue = new Queue<System.Action>();
|
|
|
|
|
|
|
|
|
|
|
|
private void Awake()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (_instance == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
_instance = this;
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD>л<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>٣<EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-11-25 17:26:38 +08:00
|
|
|
|
//DontDestroyOnLoad(gameObject);
|
2025-09-24 19:24:19 +08:00
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
//Destroy(gameObject);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns>UnityMainThreadDispatcher<65><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></returns>
|
|
|
|
|
|
public static UnityMainThreadDispatcher Instance()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (_instance == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>µ<EFBFBD><C2B5><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
GameObject dispatcherGameObject = new GameObject("UnityMainThreadDispatcher");
|
|
|
|
|
|
_instance = dispatcherGameObject.AddComponent<UnityMainThreadDispatcher>();
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD>л<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>٣<EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2025-11-25 17:26:38 +08:00
|
|
|
|
//UnityEngine.Object.DontDestroyOnLoad(dispatcherGameObject);
|
2025-09-24 19:24:19 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return _instance;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD>߳<EFBFBD>ִ<EFBFBD>еĶ<D0B5><C4B6><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="action"><3E><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>ִ<EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Actionί<6E>б<EFBFBD>ʾ<EFBFBD><CABE></param>
|
|
|
|
|
|
public void Enqueue(System.Action action)
|
|
|
|
|
|
{
|
|
|
|
|
|
lock (_actionQueue)
|
|
|
|
|
|
{
|
|
|
|
|
|
_actionQueue.Enqueue(action);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void Update()
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>̰߳<DFB3>ȫ<EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
lock (_actionQueue)
|
|
|
|
|
|
{
|
|
|
|
|
|
while (_actionQueue.Count > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
System.Action action = _actionQueue.Dequeue();
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
action.Invoke();
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (System.Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
//Debug.LogError($"ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD><DFB3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>: {ex.Message}");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|