程序框架-事件中心模块-观察者模式

news2024/12/26 22:47:26

 

1.Monster

//触发事件
EventCenter.GetInstance().EventTrigger("MonsterDead",this);

2.Player

void Start()
{    
  EventCenter.GetInstance().AddEventListener("MonsterDead", MonsterDeadDo);
}

public void MonsterDeadDo(object info)
{
    Debug.Log("玩家的奖励"+ (info as Monster).name);
}


void OnDestory()
{
    EventCenter.GetInstance().RemoveEventListener("MonsterDead", MonsterDeadDo);
}

3.EventCenter

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;

/// <summary>
/// 事件中心 单例模式对象
/// 1.dictionary
/// 2.委托
/// 3.观察者设计模式
/// </summary>
public class EventCenter : Singleton<EventCenter>
{
    //使用泛型委托传递怪物-蝙蝠等 具体敌人类型
    public Dictionary<string, UnityAction<object>> eventDic = new Dictionary<string, UnityAction<object>>();

    /// <summary>
    /// 添加事件监听
    /// </summary>
    /// <param name="name">事件的名字</param>
    /// <param name="action">准备用来处理事件的 委托函数</param>
    public void AddEventListener(string name,UnityAction<object> action)
    {
        //判断事件中心是否有此 函数
        if (eventDic.ContainsKey(name))
            eventDic[name] += action;
        //无
        else
            eventDic.Add(name, action);
    }

    /// <summary>
    /// 执行函数
    /// </summary>
    /// <param name="name">事件名</param>
    /// <param name="info">传递参数 具体怪物类型</param>
    public void EventTrigger(string name,object info)
    {
        //判断触发中心是否有此 函数
        if (eventDic.ContainsKey(name))
        {
            eventDic[name](info);
        }
    }

    /// <summary>
    /// 移除对应事件监听
    /// </summary>
    /// <param name="name">事件名</param>
    /// <param name="action">委托函数</param>
    public void RemoveEventListener(string name, UnityAction<object> action)
    {
        //判断事件中心是否有此 函数
        if (eventDic.ContainsKey(name))
            eventDic[name] -= action;
    }

    /// <summary>
    /// 清空事件中心,主要用于场景切换
    /// </summary>
    public void Clear()
    {
        eventDic.Clear();
    }
}

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

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

相关文章

【测试开发】Mq消息重复如何测试?

本篇文章主要讲述重复消费的原因&#xff0c;以及如何去测试这个场景&#xff0c;最后也会告诉大家&#xff0c;目前互联网项目关于如何避免重复消费的解决方案。 Mq为什么会有重复消费的问题? Mq 常见的缺点之一就是消息重复消费问题&#xff0c;产生这种问题的原因是什么呢…

从封面开始,打造一个引人注目的视频作品

在如今的互联网时代&#xff0c;短视频已经成为了人们生活中不可或缺的一部分。而一个吸引人的视频封面可以让你的作品更具吸引力&#xff0c;吸引更多观众的点击。那么&#xff0c;如何制作一个令人印象深刻的视频封面呢&#xff1f;下面就让我们揭秘一些实用技巧吧&#xff0…

Chrome 75不支持保存成mhtml的解决方法

在Chrome 75之前&#xff0c;可以设置chrome://flags -> save as mhtml来保存网页为mhtml。 升级新版&#xff0c;发现无法另存为/保存网页为MHTML了。 在网上搜索无果后&#xff0c;只得从chromium项目的commits中查找&#xff0c;原来chrome搞了个"Chrome Flag Owner…

新闻稿发布中,首发来源和转载是什么意思?

一秒推小编告诉您&#xff0c;在新闻稿发布中&#xff0c;首发来源和转载是两个常用的词语&#xff0c;它们有着不同的含义和使用场合。#新闻稿发布# 首发来源指的是原创的、第一次发布该条新闻的媒体或媒体机构。比如&#xff0c;如果一家新闻机构发布了一则新闻稿&#xff0c…

圆圈中最后剩下的数字(约瑟夫环)——剑指 Offer 62

文章目录 题目描述法一 数学递归 题目描述 法一 数学递归 int lastRemaining(int n, int m){return f(n, m);}int f(int n, int m){if(n1){return 0;}int x f(n-1, m);return (mx)%n;}

浅析视频技术与AI智能感知与生鲜供应链的数字化应用

一、行业背景 近年来&#xff0c;我国肉类、水果、蔬菜、水产品、乳品、速冻食品等生鲜市场需求快速增长&#xff0c;营商环境持续改善&#xff0c;推动冷链物流较快发展&#xff0c;但仍面临不少突出瓶颈和痛点难点卡点问题&#xff0c;难以有效满足市场需求。传统生鲜食材供…

【EI/SCOPUS征稿】2023年通信网络与机器学习国际学术会议(CNML 2023)

2023年通信网络与机器学习国际学术会议&#xff08;CNML 2023&#xff09; 2023 International Conference on Communication Networks and Machine Learning 随着数据流量的显著增长&#xff0c;新的通信应用程序不断出现&#xff0c;并产生更多的数据流量&#xff0c;这些数…

单片机外部晶振故障后自动切换内部晶振——以STM32为例

单片机外部晶振故障后自动切换内部晶振——以STM32为例 作者日期版本说明Dog Tao2023.08.02V1.0发布初始版本 文章目录 单片机外部晶振故障后自动切换内部晶振——以STM32为例背景外部晶振与内部振荡器STM32F103时钟系统STM32F407时钟系统 代码实现系统时钟设置流程时钟源检测…

RabbitMQ输出日志配置

参考地址rabbitmq启用日志功能记录消息队列收发情况_rabbitmq开启日志_普通网友的博客-CSDN博客 启用日志插件命令 # 设置用户权限 rabbitmqctl set_user_tags mqtt-user administrator rabbitmqctl set_permissions -p / mqtt-user ".*" ".*" ".*&…

总结动量定理的交易规则

动量定理策略是一种趋势策略&#xff0c;基于周线图中的“三烛台”形态(上涨或下跌)进行交易。Forexclub总结的交易规则如下&#xff1a; 1. 下一个烛台必须比上一个烛台大&#xff0c;以确认趋势存在。 2. 多奇烛台(不带主体的烛台)不考虑在内。 3. 止损设置在序列中第一根蜡…

线性代数 | 机器学习数学基础

前言 线性代数&#xff08;linear algebra&#xff09;是关于向量空间和线性映射的一个数学分支。它包括对线、面和子空间的研究&#xff0c;同时也涉及到所有的向量空间的一般性质。 本文主要介绍机器学习中所用到的线性代数核心基础概念&#xff0c;供读者学习阶段查漏补缺…

AIGC风起,快看能否走出“水逆周期”?

文|琥珀消研社 作者| 石榴 7月28日-31日&#xff0c;终于回归线下的ChinaJoy 2023在上海新国际博览中心举行&#xff0c;不仅吸引了广大二次元爱好者&#xff0c;还有不少互联网大厂的影子&#xff0c;比如腾讯、网易、美团、哔哩哔哩等等。 而在同月快看世界举办的第二届KK…

【BASH】回顾与知识点梳理(六)

【BASH】回顾与知识点梳理 六 六. 管线命令 (pipe)6.1 撷取命令&#xff1a; cut, grepcutgrep 6.2 排序命令&#xff1a; sort, wc, uniqsortuniqwc 6.3 双向重导向&#xff1a; tee6.4 字符转换命令&#xff1a; tr, col, join, paste, expandtrcoljoinpasteexpand 6.5 分区命…

VSCode和QT联合开发

提示&#xff1a;本文为学习记录&#xff0c;若有错误&#xff0c;请联系作者&#xff0c;谦虚受教。 文章目录 前言一、VSCODE下载二、使用步骤1.下载扩展 二、新建工程1.新建文件夹2.新建工程3.UI界面文件操作4.效果 总结 前言 一、VSCODE下载 下载地址 二、使用步骤 1.下…

Docker Dockerfile 语法与指令

一、简介 Docker 镜像原理、容器转成镜像 随便找个案例&#xff0c;进入 https://hub.docker.com/ 搜索 centos&#xff0c;然后随便找个版本&#xff08;例如&#xff1a;centos7&#xff09;点击一下&#xff0c;就会进入 centos7 的 dockerfile 文件&#xff1a; // 空镜像…

用python画满天星花朵,用python绘制漫天雪花

这篇文章主要介绍了用python绘制漫天雪花&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获&#xff0c;下面让小编带着大家一起了解一下。 import turtle as t import random t.pensize(1) t.screensize(800,800,black) def s…

全新升级!腾讯云大数据 ES Serverless 服务开启日志分析新体验

2023年8月1号&#xff0c;腾讯云大数据 ES Serverless服务重磅发布&#xff0c;拥有自动弹性、完全免运维、极致成本、Elastic Stack生态兼容、灵活易用、稳定可靠等优势特性&#xff0c;提供开箱即用的云端Elasticsearch体验&#xff0c;助力企业高效上云&#xff01; 自建El…

【云原生K8s】初识Kubernetes的理论基础

K8S由google的Borg系统(博格系统&#xff0c;google内部使用的大规模容器编排工具)作为原型&#xff0c;后经GO语言延用Borg的思路重写并捐献给CNCF基金会开源。 云原生基金会&#xff08;CNCF&#xff09;于2015年12月成立&#xff0c;隶属于Linux基金会。CNCF孵化的第一个项目…

swing布局详解

1. 布局管理器接口 &#xff08;1&#xff09;说明 布局管理器接口为LayoutManager和LayoutManager2&#xff0c;LayoutManager2是LayoutManager的子类。 &#xff08;2&#xff09;常用方法 方法描述LayoutManageraddLayoutComponent(String name, Component comp) removeL…

使用HBuilderX如何创建一个vue项目?

要在HBuilderX中创建一个Vue项目&#xff0c;可以按照以下步骤进行操作&#xff1a; 1.【创建】打开HBuilderX&#xff0c;点击菜单栏中的"文件"&#xff0c;然后选择"新建"&#xff0c;再选择"项目"。 在弹出的对话框中&#xff0c;选择"…