Mono管理器的使用

介绍

Mono 管理器 ,用于集中管理和调度 UpdateFixedUpdate、和 LateUpdate 方法中的逻辑。它继承自 SingletonAutoMono<MonoMgr>,即通过单例模式管理,使得项目中任何地方都可以使用该类提供的功能。

主要功能:

  1. 帧更新事件管理:

    • Update:用于监听常规每帧的更新函数。
    • FixedUpdate:用于监听固定时间间隔的更新函数,通常用于物理相关的计算。
    • LateUpdate :用于在所有 Update 调用结束后执行的更新函数,常用于相机的跟踪等。
  2. 事件注册和移除:

    • 提供了 AddUpdateListenerRemoveUpdateListenerAddFixedUpdateListenerRemoveFixedUpdateListenerAddLateUpdateListenerRemoveLateUpdateListener 方法来动态添加或移除不同类型的更新事件监听。
  3. 内部调用:

    • Update()FixedUpdate()LateUpdate() 会自动调用对应的事件,当这些方法被触发时,所有注册的回调函数都会被执行。

代码解释:

  • UnityAction 是 Unity 内置的委托类型,允许注册无参数的函数作为回调。
  • updateEventfixedUpdateEventlateUpdateEvent 是存储对应的帧更新事件的委托链,允许多个函数同时监听同一类型的事件。
  • ?.Invoke() 是 C# 中的空检查操作符,确保在事件链不为空时才触发回调函数。

使用场景:

MonoMgr 是一个 全局的事件调度器 ,能够帮助你在项目中避免每个对象都定义 UpdateFixedUpdateLateUpdate 方法,改为将逻辑集中在统一的管理器中执行,减少性能开销并提高代码管理的便捷性。

案例实现:管理敌人移动

假设我们有一个敌人移动的逻辑,每帧需要更新敌人的位置。我们可以使用 MonoMgr 来管理敌人的移动更新,而不需要每个敌人自己实现 Update 方法。

步骤:

  1. 创建一个敌人管理类 EnemyManager,将每帧的更新操作注册到 MonoMgrUpdate 事件中。
  2. 当敌人被销毁时,取消对 Update 的注册。

案例代码:

cs 复制代码
using UnityEngine;

public class MonoEnemy : MonoBehaviour
{
    private Vector3 targetPosition;
    private float speed = 2f;

    private void Start()
    {
        // 将移动逻辑注册到 MonoMgr 的 Update 事件中
        MonoMgr.Instance.AddUpdateListener(MoveTowardsTarget);
        // 定义敌人移动目标点
        targetPosition = new Vector3(10, 0, 0);
    }

    private void MoveTowardsTarget()
    {
        // 计算移动
        transform.position = Vector3.MoveTowards(transform.position, targetPosition, speed * Time.deltaTime);
        // 如果到达目标点,取消监听
        if (transform.position == targetPosition)
        {
            MonoMgr.Instance.RemoveUpdateListener(MoveTowardsTarget);
        }
    }

    private void OnDestroy()
    {
        // 当敌人被销毁时,取消事件监听
        MonoMgr.Instance.RemoveUpdateListener(MoveTowardsTarget);
    }
}

分析:

  • MonoMgr.Instance.AddUpdateListener(MoveTowardsTarget) :注册了敌人移动的逻辑,使其在每帧调用 MoveTowardsTarget 方法。
  • MonoMgr.Instance.RemoveUpdateListener(MoveTowardsTarget):在敌人到达目标位置或被销毁时,移除了更新监听,避免不必要的性能开销。
  • 移动逻辑 :在 MoveTowardsTarget 方法中,每帧根据速度移动敌人到目标位置。

优点:

  1. 集中管理:所有的帧更新逻辑可以集中管理,方便调试和维护。
  2. 性能优化 :避免过多的 MonoBehaviour 实现 UpdateFixedUpdate 等方法,减轻引擎调用的负担。
  3. 动态注册和移除:可以根据对象的需求动态注册和移除监听,避免了不必要的更新开销。

通过这样的管理方式,你可以更加有效地控制多个对象的生命周期和帧更新逻辑。

相关推荐
我不是程序猿儿1 小时前
【C#】观察者模式 + UI 线程调度、委托讲解
观察者模式·ui·c#
专注VB编程开发20年1 小时前
c# .net支持 NativeAOT 或 Trimming 的库是什么原理
前端·javascript·c#·.net
钢铁男儿2 小时前
C# 简单工厂模式(简单工厂模式如何工作)
前端·c#·简单工厂模式
isyoungboy4 小时前
c#实现鼠标mousemove事件抽稀,避免大数据阻塞网络
c#·计算机外设·远程桌面·deskflow
一枚小小程序员哈8 小时前
基于asp.net 的在线餐饮订餐系统的设计与实现/基于c#的网上订餐系统/餐厅管理系统
后端·c#·asp.net
好望角雾眠8 小时前
第三阶段数据库-7:sql中函数,运算符,常用关键字
数据库·笔记·sql·学习·sqlserver·c#
海绵宝宝汉堡包12 小时前
c# 项目 文件夹
开发语言·c#
曹牧15 小时前
C#:窗体间传值
c#
Thomas_YXQ17 小时前
Unity3D编辑器扩展-物体批量替换设置材质
游戏·unity·编辑器·游戏引擎·材质
一个会的不多的人20 小时前
C# NX二次开发:面收集器控件和曲线收集器控件详解
开发语言·c#