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 的注册。

案例代码:

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. 动态注册和移除:可以根据对象的需求动态注册和移除监听,避免了不必要的更新开销。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/55974.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

真别跟风,CISP认证只对这些人有用

CISP认证&#xff0c;作为信息安全领域的重要专业资格认证&#xff0c;受到了业界的广泛认可。 它不仅证明了持证者在信息安全方面的专业能力&#xff0c;也是许多企业和组织在招聘信息安全岗位时的重要参考标准。然而&#xff0c;CISP认证并非适合所有人。 虽然安全方向热度很…

ArkUI自定义Scroll滑动 指示器

最近项目中有个需求&#xff0c;关于滑动组件 Scroll 底部指示器跟随手势滑动等比例展示的效果&#xff0c;下图展示了要实现的效果。 自定义指示器组件 这里其实不是一个进度条&#xff0c;所以需要我们需要自定义绘制该组件&#xff0c;在鸿蒙中绘制组件单独使用&#xff0c…

九盾叉车高位显示器:重塑叉车视界,引领高位精准

在繁忙的物流与仓储中&#xff0c;叉车不仅是力量与效率的化身&#xff0c;更是精准与安全的守护者。九盾安防&#xff0c;以科技之名&#xff0c;打造叉车高位显示器&#xff0c;彻底革新了货叉升降的盲区挑战&#xff0c;为物流、仓储及码头等领域带来了前所未有的作业体验。…

arm架构ceph pacific部署

背景 合作伙伴实验室的华为私有云原来使用单点的nfs做为存储设备&#xff0c;现有两方面考量&#xff0c;业务需要使用oss了&#xff0c;k8s集群及其他机器也需要一套可扩展的分布式文件系统 部署ceph 初始机器配置规划 IP配置主机名Role10.17.3.144c8g1T数据盘ceph-node01…

2024java高频面试之JVM

说说 JVM 内存区域 程序计数器 是「程序控制流的指示器&#xff0c;循环&#xff0c;跳转&#xff0c;异常处理&#xff0c;线程的恢复等工作都需要依赖程序计数器去完成」。程序计数器是「线程私有」的&#xff0c;它的「生命周期是和线程保持一致」的&#xff0c;我们知道&a…

大模型落地实践:同花顺大模型技术应用及优化

这份完整版的大模型 LLM 学习资料已经上传CSDN&#xff0c;朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】 众所周知&#xff0c;大模型参数量大&#xff0c;通用能力强&#xff0c;综合性能好。但在同花顺业务场景中最初使用大模型的时候&#xf…

Python数据分析工具OpenCV用法示例

Python数据分析工具OpenCV是一个强大的计算机视觉库&#xff0c;提供了丰富的图像处理算法和功能&#xff0c;支持多种编程语言&#xff0c;包括Python、C、C#等。以下是OpenCV在Python中的一些常见用法示例&#xff1a; 一、图像读取、显示与保存 读取图像 import cv2 im…

2024年制冷与空调设备安装修理证模拟考试题库及制冷与空调设备安装修理理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年制冷与空调设备安装修理证模拟考试题库及制冷与空调设备安装修理理论考试试题是由安全生产模拟考试一点通提供&#xff0c;制冷与空调设备安装修理证模拟考试题库是根据制冷与空调设备安装修理最新版教材&#…

2024年最新苹果iOS证书申请创建App详细图文流程

iOS 证书设置指南&#xff1a; 对于开发者来说&#xff0c;在没有Mac电脑或对Xcode等开发工具不熟悉的情况下&#xff0c;如何快速完成IOS证书制作和IPA文件提交至开发者中心一直是一个难题。但是现在&#xff0c;有了初雪云提供的极简工具&#xff0c;您可以轻松实现这两个任…

分布式数据库环境(HBase分布式数据库)的搭建与配置

分布式数据库环境&#xff08;HBase分布式数据库&#xff09;的搭建与配置 1. VMWare安装CentOS7.9.20091.1 下载 CentOS7.9.2009 映像文件1.2启动 VMware WorkstationPro&#xff0c;点击“创建新的虚拟机”1.3在新建虚拟机向导界面选择“典型&#xff08;推荐&#xff09;”1…

springBoot集成nacos注册中心以及配置中心

一、安装启动nacos 访问&#xff1a;http://127.0.0.1:8848/nacos/index.html#/login 二、工程集成nacos 1、引入依赖 我这里搭建的父子工程哈&#xff0c;在子工程引入 <dependencies><!-- SpringBoot Web --><dependency><groupId>org.sp…

【Golang】关于Gin框架请求参数的获取

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

基于springboot的网上服装购物商城系统

基于springboot的网上服装购物商城系统 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;idea 源码获取&#xff1a; &#x…

【conda环境打包】ubuntu的conda环境打包导出方法 conda-pack

【conda环境打包】ubuntu的conda环境打包导出方法 conda-pack 1.准备工作2.解压3.后续处理参考文献 1.准备工作 安装conda-pack pip install conda-pack激活要被打包的环境&#xff0c;打包环境之前 先激活要打包的环境 conda activate 被打包的环境打包命令 conda pack --…

Java 输入与输出(I\O)之字节缓冲流【BufferedInputStream】【BufferedOutputStream】详解

缓冲流是Java I/O中的一个重要概念&#xff0c;它可以提高文件读写的性能。 由于磁盘的IO处理速度远低于内存的读写速度。 为了提高文件读写性能&#xff0c;我们可以使用缓冲流。缓冲流使用内存缓冲区&#xff0c;可以一次性读取或写入大量数据&#xff0c;从而减少与磁盘的交…

将图片转换为PDF:Python初学者指南

前言 最近,我去进行了一次入职体检,第二天在体检医院的公众号中查看了体检报告。但遗憾的是,医院没有提供下载功能,而公司需要的是PDF格式的报告。市面上很多工具或软件都能将图片转换为PDF格式,但大多数都要求开会员,而我不常用这些工具,因此没必要为此花钱。出于囊中羞…

华为OD机试真题---关联子串

华为OD机试中的“关联子串”题目是一个考察字符串处理和算法理解的经典问题。以下是对该题目的详细解析&#xff1a; 一、题目描述 给定两个字符串str1 和 str2&#xff0c;如果字符串 str1 中的字符&#xff0c; 经过排列组合后的字符串中只要有一个是 str2 的子串&#xff…

oracle和hive之间关于sql的语法差异及转换

目录 前言 1、oracle中的&#xff08;&#xff09;写法 1.1、区分左右连接 1.2、hive中的写法 a、最常用 b、副表带条件 c、只显示过滤条件的数据 2、select中含有子查询 3、oracle的decode函数 4、oracle的时间转化 5、oracle的trunc函数 6、oracle instr函数 7…

vscode中每个打开的文件都显示在一个单独的标签页中

版本&#xff1a;1.94 实现步骤&#xff1a; 1、打开设置 File-》Preferences-》Settings 2、具体设置 2.1、在配置中搜索 workbench.editor.showTabs 设置为multiple。 2.2、在配置中搜索 workbench.editor.enablePreview 取消勾选。 根据这个功能的说明&#xff0c;在…

24.10.20(换根哈希)

星期一&#xff1a; 阴间场 cf渡劫成功&#xff0c;拿下三题&#xff0c;终于上蓝&#x1f973;&#x1f973;&#x1f973; 贴 cf round978 div2 C cf传送门 答案取到n1但初始化没到n1&#xff0c;wa了一发&#xff0c;很烦&#x1f63f;…