面向对象之蓝图通信
参考资料:b站甜筒老师
-
蓝图通信的三种方式:
- 直接通信:一对一的通信方式,具体对象发送具体指令。
- 蓝图接口:类似于群聊,可以一对多通信,但每个对象对同一指令的反应可能不同。
- 事件分发器:一种反向监听机制,类似于发布-订阅模式,一个对象发出事件,所有监听该事件的对象都会收到通知。

-
获得引用的方法:
- 指派:直接指定特定对象。
- 碰撞:通过物理碰撞检测来获得对象引用。
- 创建:通过创建对象的节点获得新创建对象的引用。
- Get(打听):通过对象的社会身份(如玩家角色、父对象、子对象等)来获取引用。
- 人口普查法(Get All):通过搜索所有符合条件的对象来获取引用,类似于在大量数据中筛选。

-
蓝图接口和事件分发器的区别:
- 蓝图接口更像是一个中心化的广播机制,一个对象发送消息,所有连接到该接口的对象都会收到消息。
- 事件分发器则是一种去中心化的监听机制,对象不需要知道是谁发送了事件,只要监听相应的事件即可。

1.怎么理解蓝图通信
- 直接通信
- 就像你直接跟你的朋友说“把你的玩具给我玩一下”。这是你和你朋友之间的直接对话,只有你们两个人知道。
- 蓝图接口
- 想象一下你在公园里大声说“谁想来玩捉迷藏?”公园里的很多小朋友都听到了,他们可以选择加入你的游戏。每个听到的人都可以有不同的反应,有的会跑过来,有的可能只是看看你。
- 事件分发器
- 这就像你在家里看电视,你最喜欢的卡通节目开始了,电视会告诉你“卡通时间到了!”你听到这个消息后,就会去看电视。电视不知道你是谁,但它会告诉所有在听的人。
2.接口实现蓝图通信
主要解决的问题是如何在游戏开发中使用蓝图接口(Blueprint Interface)来实现同一指令多种实现的交互逻辑。文章通过具体的例子和步骤,解释了蓝图接口的概念、用途、如何创建和使用,以及它在游戏开发中的优势。
2.1. 蓝图接口概念
- 函数集合体
- 只有名称,没有实现
- 允许不同对象对同一指令做出不同反应

2.2.蓝图接口用途
- 实现多个对象对同一指令的不同响应
- 玩家与门、道具、NPC的互动
- 不同对象对子弹伤害的不同反应
2.3 创建和使用蓝图接口
- 创建
- 在内容浏览器中创建
- 独立存在,不依附于任何类
- 连接
- Actor需连接到接口并编译
- 实现
- 收信方内部实现接口函数
- 通信
- 发信方获得收信方引用
- 调用接口上的函数
2.4. 一对一通信
- 多个actor连接同一接口
- 实际通信仍是一对一
- 修复对话气泡bug
- 优化玩家角色碰撞逻辑
2.5 蓝图接口优势
- 简化调用过程
- 避免复杂类型确认
- 代码更简洁、易于维护
2.6.接口与直接通信区别
- 接口方便调用
- 直接通信需确认对象类型后调用私有函数
3.事件分发器
3.1 事件分发器概念
- 由收信方反向监听发行方的机制
- 类比:社交平台(微博、B站)粉丝关注
3.2 事件分发器与蓝图接口的区别

3.3 使用场景
- 通信行为
- 一对一 vs 一呼百应
- 引用方便性
- 发信方获得收信方引用方便性
- 收信方获得发信方引用方便性
3.4 实践操作
- 注册事件分发器
- 发信者创建事件分发器
- 绑定与监听
- 收信者获得发信者引用并绑定分发器
- 发信
- 发信者调用事件分发器实现一对多通信
- 解绑
- 收信者根据需求解绑分发器
3.5 总结
- 根据通信需求选择合适机制
- 考虑通信行为、引用方便性和关卡蓝图通信
1万+

被折叠的 条评论
为什么被折叠?



