事件中心使用

事件中心管理器的解释

事件中心管理器 (EventCenter) 实现了观察者模式,用于管理事件的订阅、触发和移除。它的作用是让不同的系统模块能够通过事件进行通信,而无需直接引用或依赖彼此。这种解耦的设计特别适合大型项目中模块间的交互。

主要功能和结构:

  1. EventInfoBase: 这是一个抽象类,作为事件数据类型的基类,用于实现里氏替换原则,便于对不同事件类型进行存储。

  2. EventInfo<T> : 这是一个泛型类,继承自 EventInfoBase。它用于封装带参数的事件,通过 UnityAction<T> 委托来保存订阅的回调函数。

  3. EventInfo : 这个类用于封装无参事件,通过 UnityAction 委托保存无参事件的回调函数。

  4. 事件管理功能:

    • 事件触发(EventTrigger:根据事件类型触发相应的回调,通知所有订阅该事件的对象。
    • 添加监听(AddEventListener:添加对某个事件的监听,并注册对应的回调。
    • 移除监听(RemoveEventListener:从事件中移除某个监听者。
    • 清除事件(Clear/Clear(E_EventType):清空所有事件监听或清除指定事件的监听者。

使用案例

假设我们在游戏中有一个玩家和怪物系统,当怪物死亡时,玩家需要获取奖励。我们可以使用事件中心来处理这个逻辑。

代码展示

实现

cs 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EventCenterPlayer : MonoBehaviour
{
    private int totalReward = 0;
    private void Start()
    {
        EventCenter.Instance.AddEventListener<EventCenterMonster>(E_EventType.E_Monster_Dead,OnMonsterDead);
    }
    private void OnMonsterDead(EventCenterMonster monster)
    {
        totalReward += monster.rewardAmount;
        Debug.Log("玩家获得奖励,当前奖励总额:" + totalReward);
    }
    private void OnDestroy()
    {
        EventCenter.Instance.RemoveEventListener<EventCenterMonster>(E_EventType.E_Monster_Dead, OnMonsterDead);
    }
}
cs 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EventCenterMonster : BaseManager<EventCenterMonster>
{
    EventCenterMonster() { }
    public int rewardAmount = 100;

    public void Die()
    {
        // 触发怪物死亡
        EventCenter.Instance.EventTrigger(E_EventType.E_Monster_Dead, this);
    }
}

使用

cs 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EventCenterMain : MonoBehaviour
{
    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            EventCenterMonster.Instance.Die();
        }
    }
}

解释

  1. Monster :模拟了怪物死亡的行为,并在死亡时触发 E_Monster_Dead 事件,传递当前怪物的实例。

  2. Player :玩家通过 EventCenter 订阅 E_Monster_Dead 事件,当怪物死亡时,玩家会收到通知,并调用 OnMonsterDead 函数,更新玩家的奖励。

运行流程:

  • 当怪物死亡时,Monster 触发 E_Monster_Dead 事件,并传递当前怪物信息。
  • Player 类监听此事件,并根据怪物传递的信息来处理玩家获取奖励的逻辑。
相关推荐
William_cl18 分钟前
C# ASP.NET 分层架构实战:BLL (Service) 业务层从入门到封神(规范 + 避坑)
架构·c#·asp.net
weixin_424294671 小时前
Unity 的Button Animator
unity·游戏引擎
qq_454245031 小时前
图数据标准化与智能去重框架:设计与实现解析
数据结构·架构·c#·图论
UQ_rookie2 小时前
【Unity3D】在URP渲染管线下使用liltoon插件出现粉色无法渲染情况的解决方案
unity·游戏引擎·shader·urp·着色器·vrchat·liltoon
CSharp精选营2 小时前
C# 如何减少代码运行时间:7 个实战技巧
性能优化·c#·.net·技术干货·实战技巧
aqiu~13 小时前
VSCode编辑器用于Unity项目
vscode·unity
hhh3u3u3u15 小时前
Visual C++ 6.0中文版安装包下载教程及win11安装教程
java·c语言·开发语言·c++·python·c#·vc-1
加号315 小时前
【C#】实现沃德普线光控制器通信控制(附完整源码)
开发语言·c#
lzhdim16 小时前
SharpCompress:跨平台的 C# 压缩与解压库
开发语言·c#
~plus~18 小时前
.NET 8 C# 委托与事件实战教程
网络·c#·.net·.net 8·委托与事件·c#进阶