首页 > 其他分享 >Unity游戏通用框架——事件的订阅和发布(观察者模式)

Unity游戏通用框架——事件的订阅和发布(观察者模式)

时间:2024-10-11 11:48:36浏览次数:12  
标签:订阅 name Unity 观察者 listeners handler coin event string

在游戏开发的基本思想中,逻辑与表现的分离极为重要,相互之间并不关心具体实现,只注册对应的事件,有事件发生时才调用相应的函数

事件管理器

using System.Collections;
using System.Collections.Generic;

public class event_manager : Singletom<event_manager> {
    public delegate void on_event_handler(string name, object udata);
    
    private Dictionary<string, on_event_handler> event_listeners = new Dictionary<string,on_event_handler>();

    // 订阅者而言
    public void add_event_listener(string name, on_event_handler handler) {
        if (this.event_listeners.ContainsKey(name)) {
            this.event_listeners[name] += handler;
        }
        else {
            this.event_listeners.Add(name, handler);
        }
    }

    public void remove_event_listener(string name, on_event_handler handler) {
        if (!this.event_listeners.ContainsKey(name)) {
            return;
        }

        this.event_listeners[name] -= handler;
        if (this.event_listeners[name] == null) {
            this.event_listeners.Remove(name);
        }
    }
    // end 

    // 发布
    public void dispatch_event(string name, object udata) {
        if (!this.event_listeners.ContainsKey(name)) {
            return;
        }

        if (this.event_listeners[name] != null) {
            this.event_listeners[name](name, udata);
        }
    }
    // end 

}

使用

发布

event_manager.Instance.dispatch_event("coin", (object)100);

订阅

void on_coin_value(string name, object udata) {
    int coin = (int)udata;
    Debug.Log("coin = " + coin);
}
event_manager.Instance.add_event_listener("coin", this.on_coin_value);

标签:订阅,name,Unity,观察者,listeners,handler,coin,event,string
From: https://blog.csdn.net/tianjuewudi/article/details/142850097

相关文章

  • 重修设计模式-行为型-观察者模式
    重修设计模式-行为型-观察者模式Defineaone-to-manydependencybetweenobjectssothatwhenoneobjectchangesstate,allitsdependentsarenotifiedandupdatedautomatically.在对象之间订阅一个一对多的依赖,当一个对象状态改变时,它的所有依赖对象都会自动......
  • Unity 之如何开发 VisionPro 应用
    文章目录介绍关于先决条件已确认可运行的Unity版本和软件包Unity项目版本项目中默认安装的包(模板为Universal3D)自己安装的包作为依赖项自动安装的软件包(仅摘录与开发相关的软件包)项目设置将所需组件添加到示例应用程序构建Unity项目运行应用程序时的......
  • 【Unity】数据持久化PlayerPrefs
    PlayerPrefs存储数据,数据为[key-value]形式可以用保存用户的设置、偏好;历史得分数据等;保存的数据位置不同的系统数据将被保存在不同的位置。Windows系统保存的数据将会被存储在系统注册表中,位置如下:(编辑器运行模式)\HKEY_CURRENT_USER\SOFTWARE\Unity\UnityEditor\DefaultCom......
  • unity简单内存池案例
    unity简单内存池案例组件准备代码部分 1.组件准备在unity中创建一个空白物体命名为cubepawner,并拖到主摄像机之前 然后再创建cubepawner和cubePool脚本挂载到该物体上  再创建一个正方体,同时再创建一个空脚本,命名为cube挂上去,并将该正方体拖入下方文件浏览器中......
  • Unity使用DOTween实现金币飞入效果
    1publicGameObjectshowRewardPanel;2publicTextSetCoinText;3publicTextSetLevelText;//经验exp4privateintgetCoin;5privateintgetExp;6publicImagecoinImage;7publicImagetargetImage;8publicCameramainCamera;9publicTextMeshco......
  • 设计模式——观察者模式
    哈喽,各位盆友们!我是你们亲爱的学徒小z,今天给大家分享的文章是设计模式的——观察者模式。定义定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。通用类图1.具体结构Subject被观察者定义被观察者必须实现的职......
  • Unity ML-Agents: 革新游戏AI开发的开源工具包
    ml-agentsUnityML-Agents:革新游戏AI开发的开源工具包UnityML-Agents(MachineLearningAgents)是UnityTechnologies推出的一个开源项目,旨在将游戏和模拟环境转变为训练智能代理的平台。这个工具包为游戏开发者和AI研究人员提供了一个强大而灵活的框架,使他们能够轻松地在Un......
  • 简单的c++实现消息发布/订阅机制例子(成员函数被其他类掉调用的例子)
    以下是一个简单的使用C++实现发布/订阅机制的示例代码。这个示例包含一个简单的事件系统,其中有发布者(Publisher)和订阅者(Subscriber)。以下代码需要C++11以上支持#include<iostream>#include<vector>#include<functional>//事件参数结构体,可以根据实际需求修改struc......
  • unity 摇杆
    /***********************************************EasyTouchControlsCopyright©2016TheHedgehogTeamhttp://www.thehedgehogteam.com/Forum/[email protected]************************************......
  • Unity 从零开始的框架搭建1-1 unity中对象调用的三种方式的优缺点分析【干货】
    该文章专栏是向QFrameWork作者凉鞋老师学习总结得来,吃水不忘打井人,不胜感激Unity框架搭建学习笔记1-1,前一个1代表凉鞋的第一季教程,后一个1代表该季第一篇我的文章 unity中对象调用的三种方式方法调用,例如:A调用B的SayHello方法委托或者回调,例如:界面监听子按钮的点击......