From 1b79ca871dff7a56dad8a9857f151011c1cfd9e3 Mon Sep 17 00:00:00 2001 From: chai Date: Fri, 18 Feb 2022 16:19:48 +0800 Subject: +CustomExecutionOrder --- .../JamUtils/Scripts/Utils/CustomExecutionOrder.cs | 72 ++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 JamHelper/Assets/JamUtils/Scripts/Utils/CustomExecutionOrder.cs (limited to 'JamHelper/Assets/JamUtils/Scripts/Utils/CustomExecutionOrder.cs') 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(); + } + 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 -- cgit v1.1-26-g67d0