赞
踩
目录
在游戏开发中会经常用到发布-订阅模型,Unity中的发布-订阅模式,也叫观察者模式,是通过C#中的委托和事件来实现,这种模式可以有效的减少代码之间的耦合,开发中只需要关注具体操作的实现即可,并且对象之间可以通过事件进行通信而不需要显式的相互引用。
委托就是将方法封装在委托中,之后就可以将委托对象传递给可调用所引方法的代码,不必在编译时知道将要调用什么方法。
具体可以看这个文章:C#-委托的详细用法_c# 委托用法-CSDN博客
事件就是可以为任何一种委托提供一种发布-订阅机制,用户可以订阅这个事件,当发布者触发事件后,所有的订阅都会收到通知。
事件通常和委托一起使用构成发布-订阅模式,具体可以看这个文章:
发布-订阅模型,或者使观察者模式是游戏开发中经常用到的模型,其包含两部分,一个是发布器,一个是订阅器。
发布器负责发布消息或事件,它有一个订阅器集合并负责向集合中的订阅器发送消息或触发事件。
订阅器可以订阅相关的发布器,当发布器触发时,所有的订阅器都会收到通知。
这样说有点抽象,下面通过一个代码演示一下:
- 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!。
上述的
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。