在Unity开发中,有时我们不想继承Mono却想使用其中的功能,于是写了这样一个公共Mono模块,使用举例:MonoManager.MainInstance.AddStart(传入一个Action)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| using System; using UnityEngine;
public class MonoManager : SingleMono<MonoManager> { // 使用标准的 System.Action 替代 UnityAction(除非需要序列化) private event Action onStart; private event Action onUpdate; private event Action onLateUpdate; private event Action onFixedUpdate;
void Start() => onStart?.Invoke(); void Update() => onUpdate?.Invoke(); void LateUpdate() => onLateUpdate?.Invoke(); void FixedUpdate() => onFixedUpdate?.Invoke(); //防止内存泄露 void OnDestroy() => ClearAll();
// 添加监听(线程安全版) public void AddStart(Action action) { onStart += action; }
public void AddUpdate(Action action) { onUpdate += action; }
public void AddLateUpdate(Action action) { onLateUpdate += action; }
public void AddFixedUpdate(Action action) { onFixedUpdate += action; }
// 移除监听(线程安全版) public void RemoveStart(Action action) { onStart -= action; }
public void RemoveUpdate(Action action) { onUpdate -= action; }
public void RemoveLateUpdate(Action action) { onLateUpdate -= action; }
public void RemoveFixedUpdate(Action action) { onFixedUpdate -= action; }
// 清空所有监听 public void ClearAll() { onStart = null; onUpdate = null; onLateUpdate = null; onFixedUpdate = null; } }
|