Files
EasyInteractive/EasyInteractive/GameMonoUpdater.cs
T
2025-02-25 21:42:01 +08:00

78 lines
1.9 KiB
C#

using System;
using UnityEngine;
namespace HalfDog.GameMonoUpdater
{
/// <summary>
/// 游戏MonoUpdater
/// </summary>
public class GameMonoUpdater : MonoBehaviour
{
private static GameMonoUpdater _instance = null;
public event Action updateAction;
public event Action fixedUpdateAction;
public event Action lateUpdateAction;
private static GameMonoUpdater instance
{
get
{
if (_instance == null)
{
GameObject obj = new GameObject("[GameMonoUpdater]");
_instance = obj.AddComponent<GameMonoUpdater>();
DontDestroyOnLoad(obj);
}
return _instance;
}
}
/// <summary>
/// 添加Update事件
/// </summary>
public static void AddUpdateAction(Action action) => instance.updateAction += action;
/// <summary>
/// 移除Update事件
/// </summary>
public static void RemoveUpdateAction(Action action) => instance.updateAction -= action;
/// <summary>
/// 添加FixedUpdate事件
/// </summary>
public static void AddFixedUpdateAction(Action action) => instance.fixedUpdateAction += action;
/// <summary>
/// 移除FixedUpdate事件
/// </summary>
public static void RemoveFixedUpdateAction(Action action) => instance.fixedUpdateAction -= action;
/// <summary>
/// 添加LateUpdate事件
/// </summary>
public static void AddLateUpdateAction(Action action) => instance.lateUpdateAction += action;
/// <summary>
/// 移除LateUpdate事件
/// </summary>
public static void RemoveLateUpdateAction(Action action) => instance.lateUpdateAction -= action;
void Awake()
{
if (_instance != null)
{
Destroy(gameObject);
return;
}
_instance = this;
DontDestroyOnLoad(gameObject);
}
void Update()
{
updateAction?.Invoke();
}
private void FixedUpdate()
{
fixedUpdateAction?.Invoke();
}
private void LateUpdate()
{
lateUpdateAction?.Invoke();
}
}
}