Unity公共Mono模块:非继承脚本也能更新
公共Mono模块
让不继承MonoBehaviour的脚本也可以
1.利用帧更新或定时更新处理逻辑
2.利用协同程序处理逻辑
实现公共Mono模块
1.创建MonoMgr继承MonoBehaviour的单例模式基类
2.实现Update、FixedUpdate、LateUpdate生命周期函数
3.声明对应事件或委托用于存储外部函数,并提供添加移除方法,从而达到让不继承MonoBehaviour的脚本可以执行帧更新或定时更新的目的
4.声明协同程序开启关闭函数,从而达到让不继承MonoBehaviour的脚本可以执行协同程序的目的
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;/// <summary>
/// 公共Mono模块管理器
/// </summary>
public class MonoMgr : SingletonAutoMono<MonoMgr>
{private event UnityAction updateEvent;private event UnityAction fixedUpdateEvent;private event UnityAction lateUpdatetEvent;#region 添加事件/// <summary>/// 添加Update帧更新监听函数/// </summary>/// <param name="unityAction"></param>public void AddUpdateListener(UnityAction unityAction){ updateEvent += unityAction;}/// <summary>/// 添加FixedUpdate帧更新监听函数/// </summary>/// <param name="unityAction"></param>public void AddFixedUpdateListener(UnityAction unityAction){fixedUpdateEvent += unityAction;}/// <summary>/// 添加LateUpdate帧更新监听函数/// </summary>/// <param name="unityAction"></param>public void AddLateUpdateListener(UnityAction unityAction){lateUpdatetEvent += unityAction;}#endregion#region 移除事件/// <summary>/// 移除Update帧更新监听函数/// </summary>/// <param name="unityAction"></param>public void RemoveUpdateListener(UnityAction unityAction){updateEvent -= unityAction;}/// <summary>/// 移除FixedUpdate帧更新监听函数/// </summary>/// <param name="unityAction"></param>public void RemoveFixedUpdateListener(UnityAction unityAction){fixedUpdateEvent -= unityAction;}/// <summary>/// 移除LateUpdate帧更新监听函数/// </summary>/// <param name="unityAction"></param>public void RemoveLateUpdateListener(UnityAction unityAction){lateUpdatetEvent -= unityAction;}#endregionprivate void Update(){updateEvent?.Invoke();}private void FixedUpdate(){fixedUpdateEvent?.Invoke();}private void LateUpdate(){lateUpdatetEvent?.Invoke();}}
