事件分发器/委托快速入门指南 您所在的位置:网站首页 ue怎么查找 事件分发器/委托快速入门指南

事件分发器/委托快速入门指南

2023-12-25 08:03| 来源: 网络整理| 查看: 265

概述

事件分发器(Event Dispatchers)是一种Actor通信方法,采用此方法时,当一个Actor触发了一个事件后,监听该事件的所有其他Actor都会收到通知。

在这种方法中,负责发送事件的Actor需要创建一个 事件分发器(Event Dispatcher),所有监听该事件的Actor都会订阅该事件分发器。此通信方法采用一对多关系,每当当前Actor触发事件分发器后,监听该Actor的其他Actor都会收到通知。

目标

在此快速入门指南中,你将学习如何使用事件分发器来创建一个 OnBossDied 事件,以便在关卡中的两个Actor上触发事件。

任务

创建 BossDied Actor,此Actor将创建事件分发器。

创建一个门Actor,将它绑定给 OnBossDied 事件。

修改 Blueprint_Effect_Explosion 蓝图,以便绑定到 OnBossDied 事件。

1 - 准备工作

在菜单的 新项目类别(New Project Categories) 部分中,选择 游戏(Games),然后点击 下一步(Next)。

选择 第三人称(Third Person) 模板,然后点击 下一步(Next)。

选择 蓝图(Blueprint) 和 含初学者内容包(With Starter Content) 选项,然后点击 创建项目(Create Project)。

阶段成果

你已经创建了一个新的第三人称项目,现在可以开始实现事件分发器。

2 - 创建OnBossDied事件

右键点击 内容浏览器(Content Browser),然后在 创建基本资产(Create Basic Asset) 分段下点击 蓝图类(Blueprint Class)。

选择 Actor 类作为父类,并将蓝图命名为 BP_BossDied。

在蓝图编辑器中打开 BP_BossDied,然后在 视口(Viewport) 中点击 添加组件(Add Components) 按钮,搜索并选择 盒体碰撞(Box Collision)。

在选择 盒体(Box) 碰撞之后,将刻度更改为 X = 4、Y = 4 和 Z = 2。

选中 盒体(Box) 碰撞组件后,转到 细节(Details) 面板的 渲染(Rendering) 部分,取消选中 在游戏中隐藏复选框(Hidden in Game checkbox)。这样就能在游戏中显示碰撞盒体。

右键点击 盒体(Box) 碰撞,然后选择 添加OnComponentBeginOverlap(Add OnComponentBeginOverlap)。你将会看到节点已经添加到 事件图表(Event Graph)。

在左侧的 我的蓝图(My Blueprint) 面板中,导航至 事件分发器(Event Dispatcher) 部分,然后点击 新增(+ Add New) 以添加新事件。将此事件命名为 OnBossDied。

将 OnBossDied 拖动到 事件图表(Event Graph),然后选择 调用(Call) 来添加节点。

将 On Component Begin Overlap 节点连接到 Call OnBossDied 节点。编译(Compile) 并 保存(Save) 蓝图。

将 BP_BossDied 蓝图拖动到关卡中。

阶段成果

在此小节中,你创建了 BP_BossDied Actor来模拟Boss死亡时的效果。在此Actor中,你创建了 OnBossDied 事件分发器,用于在事件触发时通知其他Actor。

3 - 创建交互式门

右键点击 内容浏览器(Content Browser),然后在 创建基本资产(Create Basic Asset) 分段下点击 蓝图类(Blueprint Class)。

选择 Actor 类作为父类,并将蓝图命名为 BP_BossDoor。

在 视口(Viewport) 中打开 BP_BossDoor,点击 添加组件(Add Components) 下拉菜单,然后搜索并选择 静态网格体(Static Mesh)。将组件命名为 Frame。

添加另一个 静态网格体(Static Mesh) 组件,将其命名为 Door。

选择 Frame 组件,在 细节(Details) 面板中,点击 静态网格体(Static Mesh) 下拉菜单,然后搜索并选择 SM_DoorFrame。

针对 Door 组件重复执行以上步骤,并添加 SM_Door 静态网格体。

继续选中 Door 组件,将 Y 位置设置为 45,如下所示。你将会看到与框架对齐的门。

右键点击 事件图表(Event Graph),然后搜索并选择 添加自定义事件(Add Custom Event)。将事件命名为 OpenDoor。

从 OpenDoor 事件拖出一根引线,然后搜索并选择 添加时间轴(Add Timeline)。将时间轴命名为 TM_Door。

双击 TM_Door 将其打开。点击 添加浮点曲线(Add Float Curve) 按钮,添加浮点轨道并将其命名为 Alpha。将长度设置为 1.0。

右键点击图表,然后选择 将键添加到CurveFloat_1(Add key to CurveFloat_1) 以添加新点。将 时间(Time) 和 值(Value) 设置为 0.0。

将 时间(Time) 和 值(Value) 设置为 1.0,重复执行以上步骤以添加另一个点。

返回 事件图表(Event Graph),将 Door 静态网格体组件拖动到 事件图表(Event Graph) 中以创建节点。从 Door 节点拖出一根引线,然后搜索并选择 SetRelativeRotation。

将 更新(Update) 引脚从 TM_Door 连接到 SetRelativeRotation 节点。右键点击 新旋转(New Rotation) 引脚并选择 分割结构体引脚(Split Struct Pin)。

右键点击 事件图表(Event Graph),然后搜索并选择 Lerp浮点(Lerp Float)。将 返回值(Return Value) 连接到 SetRelativeRotation 节点上的 偏转(Yaw) 引脚。将 Alpha 引脚从 TM_Door 连接到 Lerp 节点上的 Alpha 引脚。最后,将 B 的值设置为 90.0,如下所示。

点击 变量(Variable) 部分旁边的 +按钮(+ button),添加新变量。将变量命名为 BossDiedReference。

在 细节(Details) 面板上,点击 变量类型(Variable Type) 下拉菜单,然后搜索并选择 BP_BossDied 的 对象引用(Object Reference)。勾选 实例可编辑(Instance Editable) 复选框。

将 BossDiedReference 拖动到 事件图表(Event Graph),然后选择 Get BossDiedRerence。从节点中拖出一条引线,然后搜索并选择 Bind Event to On Boss Died。

从 Bind Event to On Boss Died 的红色 事件(Event) 引脚拖出一根引线,然后搜索并选择 添加自定义事件(Add Custom Event)。将事件命名为 BossDied。

从 BossDied 事件节点拖出一根引线,然后搜索并选择 开门(Open Door)。将 Event Begin Play 连接到 Bind Event to On Boss Died 节点,如下所示。

编译(Compile) 并 保存(Save) 蓝图。

阶段成果

在此小节中,你创建了一个交互式的门Actor,并将它绑定到 BP_BossDied Actor中的 On Boss Died 事件分发器。此绑定发生在开始运行(Begin Play)中,但只会在 BP_BossDied 触发事件时用到。

4 - 创建交互式爆炸

转到 初学者内容包(Starter Content) > 蓝图(Blueprints) 并选择 Blueprint_Effect_Explosion。将其拖动到gameplay文件夹,并选择 在此处复制(Copy Here)。

在蓝图编辑器中打开 Blueprint_Effect_Explosion。在 视口(Viewport) 中,选择 P_Explosion 组件,然后在 细节(Details) 面板上转到 激活(Activation) 部分,并禁用 自动激活(Auto Activate)。

针对 Explosion Audio 组件重复执行以上步骤。

点击 变量(Variable) 部分旁边的 +按钮(+ button),添加新变量。将变量命名为 BossDiedReference。

在 细节(Details) 面板上,点击 变量类型(Variable Type) 下拉菜单,然后搜索并选择 BP_BossDied 的 对象引用(Object Reference)。勾选 实例可编辑(Instance Editable) 复选框。

在 事件图表(Event Graph) 中右键点击,然后搜索并选择 事件开始播放(Event Begin Play)。

将 BossDiedReference 拖动到 事件图表(Event Graph),然后选择 Get BossDiedReference。从节点中拖出一条引线,然后搜索并选择 Assign On Boss Died。将自定义事件命名为 BossDied。

将 Event Begin Play 连接到 Bind Event to Boss Died 节点。

[REGION:note} 在为事件分发器选择分配(Assign)选项时,会创建一个绑定以及自定义事件。 [/REGION}

将 P_Explosion 和 Explosion Audio 组件拖动到 事件图表(Event Graph)。从 P_Explosion 拖出一根引线,然后搜索并选择 Activate。将 Explosion Sound 连接到 Activate 节点的 目标(Target) 引脚。

将 BossDied 事件节点连接到 Activate 节点。

编译(Compile) 并 保存(Save) 蓝图。

阶段成果

在此小节中,你修改了 Blueprint_Effect_Explosion,让它在执行 OnBossDied 事件时激活。

5 - 测试事件分发器

将 BP_BossDoor Actor拖动到关卡中。转到 细节(Details) 面板,点击 Boss引用死亡(Boss Reference Died) 下拉菜单,然后搜索并选择 BP_BossDied。

将 Blueprint_Effect_Explosion 的多个实例拖动到关卡中。转到 细节(Details) 面板,点击 Boss引用死亡(Boss Reference Died) 下拉菜单,然后搜索并选择 BP_BossDied。

点击 运行(Play),让 BP_BossDied 触发器模拟Boss在游戏中的死亡。

阶段成果

在此小节中,你在关卡中测试了 BP_BossDoor 和 Blueprint_Effect_Explosion Actor。你还测试了当 BP_BossDied Actor触发 OnBossDied 事件时,每个Actor都会响应该事件。

在本指南中,你学习了如何使用事件分发器让当前Actor与多个目标Actor通信。你还学习了如何创建事件分发器以及如何将Actor绑定到事件,以触发特定的功能。

后续步骤

现在你已了解如何使用事件分发器,接下来可以查看 Actor通信 文档中的其他通信类型。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有