aboutsummaryrefslogtreecommitdiff
path: root/JamHelper/Assets/JamUtils/Scripts/Utils/CustomExecutionOrder.cs
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2022-02-18 16:19:48 +0800
committerchai <chaifix@163.com>2022-02-18 16:19:48 +0800
commit1b79ca871dff7a56dad8a9857f151011c1cfd9e3 (patch)
tree1f456a8e9f842670263c2b61d97a124c90515014 /JamHelper/Assets/JamUtils/Scripts/Utils/CustomExecutionOrder.cs
parent2ac3ab0c6a315e678d21aa6bd4a0a660a2c46acf (diff)
+CustomExecutionOrder
Diffstat (limited to 'JamHelper/Assets/JamUtils/Scripts/Utils/CustomExecutionOrder.cs')
-rw-r--r--JamHelper/Assets/JamUtils/Scripts/Utils/CustomExecutionOrder.cs72
1 files changed, 72 insertions, 0 deletions
diff --git a/JamHelper/Assets/JamUtils/Scripts/Utils/CustomExecutionOrder.cs b/JamHelper/Assets/JamUtils/Scripts/Utils/CustomExecutionOrder.cs
new file mode 100644
index 0000000..acef40f
--- /dev/null
+++ b/JamHelper/Assets/JamUtils/Scripts/Utils/CustomExecutionOrder.cs
@@ -0,0 +1,72 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace JamUtils
+{
+ [DefaultExecutionOrder(ORDER_EXECUTION)]
+ public class CustomExecutionOrder : MonoBehaviour
+ {
+ private const int ORDER_EXECUTION = -98;
+
+ static CustomExecutionOrder _instance;
+
+ public static CustomExecutionOrder Instance
+ {
+ get
+ {
+ if (_instance == null)
+ {
+ GameObject inst = new GameObject("CustomExecutionOrder");
+ inst.hideFlags = HideFlags.DontSave;
+ DontDestroyOnLoad(inst);
+
+ _instance = inst.AddComponent<CustomExecutionOrder>();
+ }
+ return _instance;
+ }
+ }
+
+ public event Action beforeFixedUpdate;
+ public event Action afterFixedUpdate;
+
+ public event Action beforeUpdate;
+ public event Action afterUpdate;
+
+ private void Awake()
+ {
+ StartCoroutine(WaitForEndOfFrame());
+ StartCoroutine(WaitForFixedUpdate());
+ }
+
+ private IEnumerator WaitForEndOfFrame()
+ {
+ while (true)
+ {
+ yield return new WaitForEndOfFrame();
+ if (afterUpdate != null)
+ afterUpdate();
+ if (beforeFixedUpdate != null)
+ beforeFixedUpdate();
+ }
+ }
+
+ private IEnumerator WaitForFixedUpdate()
+ {
+ while (true)
+ {
+ yield return new WaitForFixedUpdate();
+ if (afterFixedUpdate != null)
+ afterFixedUpdate();
+ }
+ }
+
+ private void Update()
+ {
+ if (beforeUpdate != null)
+ beforeUpdate();
+ }
+
+ }
+} \ No newline at end of file