使用自定义事件和结构体
事件轨迹 可用于调用 自定义事件 ,它能在 关卡蓝图 中发射 蓝图脚本 。调用自定义事件后,为其附加的任意脚本也将被执行,可基于需求用于各种情况。使用事件轨迹并调用自定义事件时,也可传递您自己的自定义 结构体 ,用于更新其中包含的变量。需要在关卡序列播放中更新其他变量时,它将十分实用。
在此例中,我们将使用事件轨迹调用一个自定义结构体的自定义事件,用于在播放序列时移动关卡中的物体。
在以下指南中,按下键后关卡序列将播放,而每次皆会执行向上移动立方体的事件。
步骤
在此指南中,我们使用的是启用了 Starter Content 的 Blueprint Third Person Template 项目。
在 Content Browser 的 Content/StarterContent/Shapes 中,将任意网格体拖入关卡。
将网格体放置在关卡中任意位置。
在网格体的 Details 面板中将其设为 Movable。
进行此设置后便可在游戏进程中移动网格体。
点击 Add New 按钮。然后在 Blueprints 下选中 Structure 选项。
输入名称 MyStruct,然后打开资源并添加一个名为 MoveCube 的 Vector 变量。
此处的变量命名非常重要,因为它们将在以后起到参考指示的作用。
通过 Cinematics 按钮新增一个名为 Master 的 关卡序列 到关卡,然后在 Sequencer 中添加一个 事件轨迹。
将时间轴移至第 5 帧并添加一个键,然后右键点击键将事件命名为 LiftCube。然后指定 MyStruct 并将 Z 轴 值设为 100。
到达序列中的这个关键帧时,我们将把网格体沿 Z 轴上移 100 个单位。
移动时间轴到第 10 帧,然后按下 ] 键让序列在第 10 帧处结束。
选中添加的网格体(以及关卡中的关卡序列),然后点击工具栏中的 Blueprints 按钮,最后选中 Open Level Blueprint。
在 关卡蓝图 中点击右键并搜索 Reference,然后选择 Create References to 2 selected Actors。
在图表中点击右键并添加一个 1 键盘事件,然后从 Master 关卡序列连出引线,搜索并添加 Set Playback Position 节点。
它将用于开始播放时、发出播放函数调用前重设序列。
从添加的 Sequence Player 节点连出引线,然后使用 Play 节点,按下图所示进行连接。
在图表中点击右键并创建一个名为 LiftCube 的 自定义事件。
自定义事件的命名必须和在 Event Name 下为 Sequencer 中的键指定的命名相同(否则它将无法被调用)。
在自定义事件的 Details 面板中,点击 + 按钮添加一个输入,将其命名设为 MoveCube、变量类型设为 Vector。
如未满足以下条件,则事件不会被调用:
输入命名必须和结构体中使用的命名相同。
输入的数字必须和自定义结构体中定义的变量数相同。
例如,如结构体中有 2 个变量,那么自定义事件必须拥有 2 个带正确变量名和类型的输入。
从网格体参考连出引线,搜索并使用 AddActorLocalOffset 节点。
按下图所示,将 MoveCube 矢量引脚连至 Delta Location 引脚、LiftCube 可执行引脚连至 AddActorLocalOffset 节点。
在主工具栏中点击 Play 按钮进入 Play in Editor(PIE)模式。
最终结果
在编辑器中进行游戏时,每次按下 1 键立方体都会沿 Z 轴移动。
在此例中我们并未指定摄像机查看影片,而是使用 Sequencer 和蓝图执行已编辑脚本的序列。在项目中,带自定义事件和自定义结构体的事件轨迹可用于更新过场动画中的玩家信息(如玩家体力增加、获得新武器,或用户选择的其他游戏性相关的效果)。