Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using System;
- [DefaultExecutionOrder(0)]
- public class UnityThread : MonoBehaviour
- {
- public class ActionByParameter
- {
- public Delegate m_delegate;
- public object[] parameter;
- public ActionByParameter(Delegate m_delegate, object[] parameter)
- {
- this.m_delegate = m_delegate;
- this.parameter = parameter;
- }
- }
- public static UnityThread instance;
- private Queue<ActionByParameter> Fixed_queue = new Queue<ActionByParameter>();
- private Queue<ActionByParameter> _queue = new Queue<ActionByParameter>();
- [RuntimeInitializeOnLoadMethod]
- static void OnRuntimeMethodLoad()
- {
- GameObject GameManagerObj = new GameObject("===== UnityThread =====");
- UnityThread.instance = GameManagerObj.AddComponent<UnityThread>();
- DontDestroyOnLoad(GameManagerObj);
- }
- public static void FixedDynamicInvoke(Delegate m_delegate, params object[] args){
- instance.Fixed_queue.Enqueue(new ActionByParameter (m_delegate, args ));
- }
- public static void DynamicInvoke(Delegate m_delegate, params object[] args){
- instance._queue.Enqueue(new ActionByParameter(m_delegate, args));
- }
- //UnityThread.DynamicInvoke
- private void FixedUpdate()
- {
- while (Fixed_queue.Count > 0)
- {
- ActionByParameter actionByParameter = Fixed_queue.Dequeue();
- actionByParameter.m_delegate.DynamicInvoke(actionByParameter.parameter);
- }
- Fixed_queue.Clear();
- }
- private void Update()
- {
- while (_queue.Count > 0)
- {
- ActionByParameter actionByParameter = _queue.Dequeue();
- actionByParameter.m_delegate.DynamicInvoke(actionByParameter.parameter);
- }
- _queue.Clear();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment