Unity中的委托和事件构成的发布-订阅模式(观察者模式)

目录

1,引言

2,委托和事件

3,什么是发布-订阅模型(观察者模式)

4,代码示例


1,引言

在游戏开发中会经常用到发布-订阅模型,Unity中的发布-订阅模式,也叫观察者模式,是通过C#中的委托和事件来实现,这种模式可以有效的减少代码之间的耦合,开发中只需要关注具体操作的实现即可,并且对象之间可以通过事件进行通信而不需要显式的相互引用。

2,委托和事件

委托就是将方法封装在委托中,之后就可以将委托对象传递给可调用所引方法的代码,不必在编译时知道将要调用什么方法。

具体可以看这个文章:C#-委托的详细用法_c# 委托用法-CSDN博客

事件就是可以为任何一种委托提供一种发布-订阅机制,用户可以订阅这个事件,当发布者触发事件后,所有的订阅都会收到通知。

事件通常和委托一起使用构成发布-订阅模式,具体可以看这个文章:

C#-事件的详细用法_c# 调用事件-CSDN博客

3,什么是发布-订阅模型(观察者模式)

发布-订阅模型,或者使观察者模式是游戏开发中经常用到的模型,其包含两部分,一个是发布器,一个是订阅器。

发布器负责发布消息或事件,它有一个订阅器集合并负责向集合中的订阅器发送消息或触发事件。

订阅器可以订阅相关的发布器,当发布器触发时,所有的订阅器都会收到通知。

4,代码示例

这样说有点抽象,下面通过一个代码演示一下:

复制代码
using UnityEngine;
using System;

public class Publisher : MonoBehaviour
{
    // 声明一个事件
    public static event Action OnEventPublished;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            // 发布事件
            OnEventPublished?.Invoke();
        }
    }
}

public class Subscriber : MonoBehaviour
{
    private void OnEnable()
    {
        // 订阅事件
        Publisher.OnEventPublished += HandleEvent;
    }

    private void OnDisable()
    {
        // 取消订阅事件
        Publisher.OnEventPublished -= HandleEvent;
    }

    // 事件处理方法
    private void HandleEvent()
    {
        Debug.Log("Event received!");
    }
}

在这个示例中,Publisher 类发布了一个名为 OnEventPublished 的事件,而 Subscriber 类订阅了这个事件,并在事件发生时调用 HandleEvent 方法。

这个代码中Publisher就是一个发布器,而Subscriber 就是一个订阅器,当按下空格时就会触发发布器事件时,所有订阅了此发布器的订阅器都会收到通知,并执行对应的操作。即这里的Subscriber就会执行HandleEvent方法。所以输出结果就是每按下一次空格键就会输出一次Event received!。

上述的

相关推荐
懒狗跑ai的程序员Brain32 分钟前
如何利用粒子系统在unity制作一个烟花(粒子系统学习向)
学习·unity·游戏引擎
xcLeigh2 小时前
Unity基础:材质与纹理入门——给物体穿上“衣服“
unity·游戏引擎·材质
ellis19702 小时前
u3d插件xLua[二]例2:U3DScripting,例3:UIEvent分析
unity·lua
派葛穆12 小时前
Unity-UI 输入框功能
ui·unity·游戏引擎
玖玥拾12 小时前
Unity3D RPG 入门项目(一)开场动画/人物移动/摄像机跟随场景切换
unity·游戏引擎
2401_8949155314 小时前
GEO 搜索优化完整源码从零部署:环境配置、集群搭建全流程
开发语言·python·tcp/ip·算法·unity
WarPigs15 小时前
PC端加载安卓AB包资源显示紫色的问题
unity
scott.cgi18 小时前
Unity使用AndroidX获取,导航栏与虚拟键盘的高度
unity·androidx·keyboard·导航栏高度·虚拟键盘高度·判断键盘关闭·获取虚拟键盘高度
丁小未19 小时前
Unity车机地图Tile流式渲染系统高性能架构方案
unity·架构·ecs·dots·车机系统·车机系统架构图
LONGZETECH1 天前
工业实训仿真设计实践:电机拆装软件的 DAG 流程建模、工具精度分级与数据体系搭建
大数据·算法·unity·架构·汽车