Unity3D EventMgr事件订阅与发布详解

在游戏开发过程中,经常需要处理各种事件,比如角色的移动、碰撞、攻击等。为了更好地管理和处理这些事件,Unity3D提供了EventMgr事件订阅与发布机制,通过该机制可以实现不同对象之间的事件通信,让游戏逻辑更加清晰和灵活。

对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀!

在本文中,我们将详细介绍Unity3D中的EventMgr事件订阅与发布机制,包括其原理、技术细节和代码实现。希望能帮助开发者更好地理解和应用该机制。

一、EventMgr事件订阅与发布原理

EventMgr事件订阅与发布机制是一种常见的设计模式,也称为观察者模式。其原理是定义一个主题对象(Subject),负责管理事件的订阅和发布;同时定义一个观察者对象(Observer),负责订阅和处理事件。当主题对象发生变化时,会通知所有观察者对象,并调用其相应的处理方法。

在Unity3D中,EventMgr事件订阅与发布机制的实现主要依赖于C#语言的委托和事件。委托是一种类型,它可以存储对一个或多个方法的引用,并在需要时调用这些方法。事件是委托的一种特殊形式,它可以让类的实例在发生特定事件时通知其他对象。

二、EventMgr事件订阅与发布技术细节

  1. 定义事件委托和事件

在Unity3D中,定义事件委托和事件的方式如下所示:

public delegate void EventHandler();
public static event EventHandler MyEvent;

其中,EventHandler是一个委托类型,用于定义事件处理方法的签名。MyEvent是一个事件,用于触发事件通知。

  1. 订阅事件

在Unity3D中,订阅事件的方式如下所示:

void PublishEvent()
{if (EventMgr.MyEvent != null){EventMgr.MyEvent();}
}

在Start方法中,通过+=操作符将OnMyEvent方法订阅到MyEvent事件上,当事件触发时,会自动调用OnMyEvent方法。

  1. 发布事件

在Unity3D中,发布事件的方式如下所示:

void PublishEvent()
{if (EventMgr.MyEvent != null){EventMgr.MyEvent();}
}

在PublishEvent方法中,首先判断MyEvent事件是否为空,然后通过()操作符触发事件,通知所有订阅者处理事件。

  1. 取消订阅事件

在Unity3D中,取消订阅事件的方式如下所示:

void OnDestroy()
{EventMgr.MyEvent -= OnMyEvent;
}

在OnDestroy方法中,通过-=操作符将OnMyEvent方法从MyEvent事件上取消订阅,避免内存泄漏。

三、EventMgr事件订阅与发布代码实现

下面我们通过一个简单的示例来演示如何在Unity3D中实现EventMgr事件订阅与发布机制。

  1. 创建一个名为EventMgr的单例类,用于管理事件的订阅和发布:
public class EventMgr : MonoBehaviour
{public delegate void EventHandler();public static event EventHandler MyEvent;private static EventMgr instance;public static EventMgr Instance{get{if (instance == null){instance = new GameObject("EventMgr").AddComponent<EventMgr>();}return instance;}}public void PublishEvent(){if (MyEvent != null){MyEvent();}}void OnDestroy(){MyEvent = null;}
}
  1. 创建一个名为EventSubscriber的脚本,用于订阅和处理事件:
public class EventSubscriber : MonoBehaviour
{void Start(){EventMgr.MyEvent += OnMyEvent;}void OnMyEvent(){Debug.Log("Event received!");}void OnDestroy(){EventMgr.MyEvent -= OnMyEvent;}
}
  1. 创建一个名为EventPublisher的脚本,用于发布事件:
public class EventPublisher : MonoBehaviour
{void Update(){if (Input.GetKeyDown(KeyCode.Space)){EventMgr.Instance.PublishEvent();}}
}

在这个示例中,EventMgr类负责管理事件的订阅和发布,EventSubscriber类负责订阅和处理事件,EventPublisher类负责发布事件。当按下空格键时,EventPublisher类会发布事件,通知所有订阅者处理事件。

通过上面的示例,我们可以看到Unity3D中EventMgr事件订阅与发布机制的简单实现。开发者可以根据实际需求,灵活运用该机制,方便地实现对象之间的事件通信和交互。

总结

本文详细介绍了Unity3D中的EventMgr事件订阅与发布机制,包括其原理、技术细节和代码实现。通过该机制,开发者可以更加灵活地管理和处理游戏中的各种事件,提高开发效率和游戏质量。希望本文能帮助开发者更好地理解和应用EventMgr事件订阅与发布机制,为游戏开发工作带来帮助。

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

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

相关文章

LLVM Cpu0 新后端7 第一部分 DAG调试 dot文件 Machine Pass

想好好熟悉一下llvm开发一个新后端都要干什么&#xff0c;于是参考了老师的系列文章&#xff1a; LLVM 后端实践笔记 代码在这里&#xff08;还没来得及准备&#xff0c;先用网盘暂存一下&#xff09;&#xff1a; 链接: https://pan.baidu.com/s/1V_tZkt9uvxo5bnUufhMQ_Q?…

单线服务器与双线服务器的区别?

单线服务器和双线服务器之间有什么区别呢&#xff1f;接下来就让小万来为大家具体分析一下吧&#xff01; 首先单线服务器和双线服务器之间运营商的性质是不同的&#xff0c;单线服务器主要是一家带宽运营商&#xff0c;而双线服务器则是有两家运营商提供带宽的线路。 单线服务…

spring两种代理方式

Spring 提供了两种主要的代理&#xff08;proxy&#xff09;方式&#xff0c;分别是基于JDK动态代理和基于CGLIB的代理。这两种代理方式各有其特点和适用场景。 1. JDK动态代理 特点&#xff1a; - 基于Java的接口&#xff08;Interface&#xff09;。 - 代理类必须实现一个或…

contos7使用docker安装vulhub

contos7下使用docker安装vulhub 1. 安装docker 1. 更新yum &#xff08;1&#xff09;切换root用户 su root &#xff08;2&#xff09;更新yum yum update 2. 卸载旧版本的docker sudo yum remove docker sudo yum remove docker-client sudo yum remove docker-clien…

【个人博客搭建】(21)使用AutoMap对象映射

在.NET WebAPI项目中&#xff0c;使用AutoMap进行对象映射是一种高效的数据处理方式。通过自动映射机制&#xff0c;可以极大地简化对象之间的转换过程&#xff0c;提高代码的可维护性和整洁性。下面将详细探讨如何在.NET WebAPI中使用AutoMap进行对象映射&#xff1a; 安装和配…

高并发ping多台主机IP

简介 社区或者是大型公司往往有成千上万或者几百台设备&#xff0c;保持设备始终在线对网络运维人员来说至关重要&#xff0c;然而一个一个登录检查&#xff0c;或者一个一个ping并不明智&#xff0c;累人且效率极低&#xff0c;并出错率高。花钱买检测服务当我没说。 shell编…

K210视觉识别模块学习笔记5:(嘉楠)训练使用模型_识别人脸

今日开始学习K210视觉识别模块:(嘉楠)训练与使用模型_识别人脸 亚博智能的K210视觉识别模块...... 固件库版本: canmv_yahboom_v2.1.1.bin 之前的训练网址部署模型时需要我们自己更换固件&#xff0c;而且还不能用亚博的图像操作库函数了&#xff0c;这十分不友好&#xff0…

Web前端从什么学起:探索前端世界的起点与路径

Web前端从什么学起&#xff1a;探索前端世界的起点与路径 在数字化浪潮席卷而来的今天&#xff0c;Web前端技术作为构建用户界面的核心力量&#xff0c;日益受到人们的关注。对于初学者来说&#xff0c;Web前端的学习旅程可能充满了未知与挑战。那么&#xff0c;Web前端究竟应…

liunx查看日志

tail查看日志 tail 查看文件的末尾部分 -f 实时监控日志文件的更新&#xff0c;如果有新的日志将会实时显示 -n 查看日志的后n行 tail -fn 100 filename.log // 实时查看filename.log的最后100行head查看日志 head 查看日志的头部 -n 指定查看行数 head -n 100 filename.log…

vue 使用 Vxe UI vxe-print 实现复杂的 Web 打印,支持页眉、页尾、分页的自定义模板

Vxe UI vue 使用 Vxe UI vxe-print 实现复杂的 Web 打印&#xff0c;支持页眉、页尾、分页的自定义模板 官方文档 https://vxeui.com 查看 github、gitee 页眉-自定义标题 说明&#xff1a;vxe-print-page-break标签用于定义分页&#xff0c;一个标签一页内容&#xff0c;超…

c语言基础篇B

B1.数据的输入与输出 c语言本身不提供输入输出语句&#xff0c;输入和输出操作是由c函数库中的函数来实现的在使用系统库函数时&#xff0c;要用预编译命令“#include”将有关的“头文件”包括到用户源文件中 include"stdio.h"或者include B2.printf()函数&#x…

Python怎么分开画图:深入探索与实战应用

Python怎么分开画图&#xff1a;深入探索与实战应用 在Python的数据可视化领域&#xff0c;分开画图是一项至关重要的技能。它能够帮助我们更清晰、更有条理地展示数据&#xff0c;进而发现数据中的规律和趋势。本文将从四个方面、五个方面、六个方面和七个方面&#xff0c;详…

YOLOv5改进 | 主干网络 | 用SimRepCSP作为主干网络提取特征【全网独家 + 降本增效】

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; SimRepCSP 类似于 YOLOv7的主干网络&#xff0c;由卷积模块和重参数化卷积&#xff08;RepConv&#xff09;模块组合而成&#xff0c;以 Cro…

WPF Command 的使用

一、Command类的创建 >> 构造函数方法中传入了一个委托 public class MyCommand : ICommand { public readonly Action _action; public MyCommand(Action action) { this._action action; } public event EventHandler CanExecuteChanged;…

学习使用 Frida 过程中出现的问题

一、adb shell命令报错&#xff1a;error: no devices found 目前该问题解决方法仅供参考&#xff0c;可先看看再选择试试&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 查看此电脑也会发现没有出现手机型号文件夹。 第一步&#xff1a; 检查一下手机开了u…

谷神后端代码模板:导入

SELECT NULL AS MID,NULL AS FILE_NAME,NULL AS FILE_PATH FROM DUAL;

【打印100个常用Linux命令】

#!/bin/bash 定义一个函数&#xff0c;用于打印100个常用Linux命令 print_commands() { echo “以下是一些常用的Linux命令&#xff1a;” echo “----------------------------------” echo “1. pwd - 显示当前工作目录” echo “2. ls - 列出当前目录下的文件和文件夹” …

qmt量化交易策略小白学习笔记第16期【qmt编程之获取北向南向资金(沪港通,深港通和港股通)】

qmt编程之获取北向南向资金 qmt更加详细的教程方法&#xff0c;会持续慢慢梳理。 也可找寻博主的历史文章&#xff0c;搜索关键词查看解决方案 &#xff01; 北向南向资金&#xff08;沪港通&#xff0c;深港通和港股通&#xff09; #北向南向资金交易日历 获取交易日列表…

【CentOS 7】CentOS 7极致指南:高级部署PyCharm 2022.3.3专业版,实现定制化配置与无缝桌面集成

【CentOS 7】CentOS 7极致指南&#xff1a;高级部署PyCharm 2022.3.3专业版&#xff0c;实现定制化配置与无缝桌面集成 大家好 我是寸铁&#x1f44a; 总结了一篇CentOS 7极致指南&#xff1a;高级部署PyCharm 2022.3.3专业版&#xff0c;实现定制化配置与无缝桌面集成✨ 喜欢的…

线性代数|机器学习-P10最小二乘法的四种方案

文章目录 1. 概述2. SVD奇异值分解3. 最小二乘法方程解4. 最小二乘法图像解释5. Gram-Schmidt 1. 概述 当我们需要根据一堆数据点去拟合出一条近似的直线的时候&#xff0c;就会用到 最小二乘法 .根据矩阵A的情况&#xff0c;有如下四种方法 在r n m 时&#xff0c;SVD奇异…