JeCodeLeSoir

Untitled

Jun 24th, 2022
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.89 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using System;
  5.  
  6. [DefaultExecutionOrder(0)]
  7. public class UnityThread : MonoBehaviour
  8. {
  9.     public class ActionByParameter
  10.     {
  11.         public Delegate m_delegate;
  12.         public object[] parameter;
  13.  
  14.         public ActionByParameter(Delegate m_delegate, object[] parameter)
  15.         {
  16.             this.m_delegate = m_delegate;
  17.             this.parameter = parameter;
  18.         }
  19.     }
  20.  
  21.     public static UnityThread instance;
  22.     private Queue<ActionByParameter> Fixed_queue = new Queue<ActionByParameter>();
  23.     private Queue<ActionByParameter> _queue = new Queue<ActionByParameter>();
  24.  
  25.     [RuntimeInitializeOnLoadMethod]
  26.     static void OnRuntimeMethodLoad()
  27.     {
  28.         GameObject GameManagerObj = new GameObject("===== UnityThread =====");
  29.         UnityThread.instance = GameManagerObj.AddComponent<UnityThread>();
  30.         DontDestroyOnLoad(GameManagerObj);
  31.     }
  32.    
  33.     public static void FixedDynamicInvoke(Delegate m_delegate, params object[] args){
  34.         instance.Fixed_queue.Enqueue(new ActionByParameter (m_delegate, args ));
  35.     }
  36.  
  37.     public static void DynamicInvoke(Delegate m_delegate, params object[] args){
  38.         instance._queue.Enqueue(new ActionByParameter(m_delegate, args));
  39.     }
  40.  
  41.     //UnityThread.DynamicInvoke
  42.     private void FixedUpdate()
  43.     {
  44.         while (Fixed_queue.Count > 0)
  45.         {
  46.             ActionByParameter actionByParameter = Fixed_queue.Dequeue();
  47.             actionByParameter.m_delegate.DynamicInvoke(actionByParameter.parameter);
  48.         }
  49.         Fixed_queue.Clear();
  50.     }
  51.  
  52.     private void Update()
  53.     {
  54.         while (_queue.Count > 0)
  55.         {
  56.             ActionByParameter actionByParameter = _queue.Dequeue();
  57.             actionByParameter.m_delegate.DynamicInvoke(actionByParameter.parameter);
  58.         }
  59.         _queue.Clear();
  60.     }
  61. }
Advertisement
Add Comment
Please, Sign In to add comment