本质上来说,宏(Macro)和折叠的节点图表原理相同。 它们都有通道节点设计的进入点和离开点。 每个通道可拥有任意数量的执行或数据引脚。在其他蓝图和图表上使用时,这些引脚在宏节点上均为可见。
创建宏
在本教程中,你将创建一个宏来检查角色是否拥有足够的能量执行跳跃。 如果角色确实有足够能量,该宏将消耗玩家的能量,将当前值显示在屏幕上,然后调用跳跃函数。 如果角色没有足够的能量,该宏将在屏幕上显示"能量不足",并禁止角色跳跃。
在此例中,我们将使用启用了初学者内容包的蓝图第三人称项目。
创建并启动你的项目后,找到
Content/ThirdPerson/Blueprints文件夹,打开BP_ThirdPersonCharacter蓝图。找到我的蓝图(My Blueprint)窗口,点击添加宏(Add Macro)按钮。
将创建新的宏,选中后按F2键将其重命名为EnergyCheck。
选择宏之后,找到细节(Details) > 输入(Inputs),点击添加(+),创建名为BeginCheck的新输入,然后将其类型更改为Exec(即执行引脚)。
找到细节(Details) > 输出(Outputs),点击添加(+),创建两个新的输出。 将其中一个命名为HasEnergy,另一个命名为NoEnergy,然后设置Exec引脚类型。
这将在宏节点本身上创建输入/输出节点,用于与宏之间传递数据。
对于输入,使用名为BeginCheck的执行引脚来启动宏。 接着创建一个脚本,检查玩家是否拥有足够的能量执行跳跃,如有,则执行HasEnergy引脚。 如果玩家能量不足,则执行NoEnergy引脚。
在我的蓝图(My Blueprint)窗口中,点击添加变量(Add Variable)按钮,创建名为Energy的新浮点变量。
在工具栏上,点击编译(Compile),选择能量(Energy),然后找到细节(Details)面板,将其值设置为100。
在能量(Energy)图表中,按住B键并左键点击以创建Branch节点。
Blueprintcontext_graph按住Ctrl键并将Energy浮点变量从我的蓝图(My Blueprint)选项卡拖移至宏图表中,点击并拖出输出引脚并搜索Greater运算符节点,然后将输出引脚连接到Branch。
按住Alt键并拖入Energy变量以添加Set节点。
再次按住Ctrl键并拖入Energy,将其连接到Subtact(-)节点,设置为10,将其连接到Set节点。 此脚本意味着能量大于0时,将从当前能量值中减去10。
在图表中点击右键并添加Print String节点,然后将Set Energy节点连接到字符串格式(In String)引脚。
添加了Conversion节点,它会将能量值转换为数值字符串并显示在屏幕上。
拖出Branch节点的False引脚,添加另一个Print String节点,并在框中输入文本"能量不足!(Out of Energy!)"。 然后将第一个和第二个Print String节点分别连接到HasEnergy和NoEnergy引脚。
Blueprintcontext_graph该宏现在已被设为检查Energy变量(如适用,则从中减去数值),显示玩家是否拥有足够的能量,进而确定玩家是否可以跳跃。 现在,你需要在按"跳跃(Jump)"键之后,且在执行跳跃动作之前实现宏。
在事件图表(EventGraph)上,拖出InputAction Jump节点的Pressed引脚,并搜索EnergyCheck。
可以看到你创建的宏位于工具(Utilities)下,宏图标旁是它的名称。
添加宏之后,跳跃脚本应如下所示。
点击编译(Compile)和保存(Save)按钮,然后关闭蓝图。
点击编辑器主工具栏上的播放按钮。
按空格执行跳跃时,屏幕左上角将显示能量(Energy)的值。 能量为0时无法跳跃。
最终结果
这是使用宏将脚本执行并合并为一个单独节点、改善事件图表和主要角色脚本易读性的基本范例。 除此之外还可在其他情况下调用这个宏。 例如,如果存在其他消耗玩家能量的动作,且需要确定玩家是否有能量执行此操作(如攻击等),你就可以运行此宏来检查玩家在按下攻击键后是否还有足够的能量来攻击,然后利用HasEnergy执行引脚执行一次攻击。