使用接口
使用蓝图接口与多个蓝图同时通信的范例。
在此指南中,我们将设置一个 蓝图接口,将其调用后可在多个蓝图中执行不同脚本。
1.在 Content/StarterContent/Props 文件夹中,右键单击 SM_GlassWindow 并选择 Create Destructible Mesh。此指南使用启用 新手内容 的 Blueprint First Person 模板。

2.打开可摧毁网格体,点击 Fracture Mesh 和 Save,然后关闭可摧毁网格体编辑器窗口。

3.右键单击 SM_GlassWindow_DM 资源,然后在 Asset Actions 下选择 Create Blueprint Using This...。

将弹出提示输入蓝图的命名和保存路径(此处使用 SM_GlassWindow_DM)。
4.在 内容浏览器 中 右键单击,然后在 Blueprints 下选择 Blueprint Interface。

将再次弹出提示输入蓝图接口的命名和保存路径(此处使用 DM_Interface)。
5.在蓝图接口中,将现有函数命名为 IsDestructible?,然后点击 New 添加下图中显示的 输入(Inputs)。

上图中我们创建了三个 Inputs,用于在应用此蓝图接口的蓝图之间传递变量。我们创建了两个 浮点 变量:一个名为 Damage,用于传递命中时对物体形成的破坏量;另一个名为 Strength,用于传递应用的冲击力量。最后添加一个名为 HitLoc 的 矢量,用于保存物体被命中的位置,以便传递信息。
6.编译 并 保存,然后关闭蓝图接口。
7.在 内容浏览器 中打开 SM_GlassWindow_DM 蓝图,然后点击工具栏中的 Class Settings 选项。

8.在 Details 面板中,点击 Interfaces 下的 Add 按钮并添加 DM_Interface。

此操作将在此蓝图中应用蓝图接口,以便访问其中的函数。
9.在图表中 单击右键,搜索 ? 并选择 Event Is Destructible? 事件。

10.长按 Control 从 MyBlueprint 窗口拖入 Destructible 组件并创建以下脚本。

在 Destructible 组件引出的连线后,我们使用 Apply Damage 并连接所需的损坏、力量、位置和方向要求,对玻璃窗应用破坏。实际的损坏、力量和命中位置信息将通过蓝图接口从另一个蓝图(稍后进行设置)传递到此蓝图。
11.编译 并 保存,然后关闭蓝图。
12.打开 内容浏览器 中 Content/StarterContent/Blueprints 下的 Blueprint_CeilingLight 蓝图。

对此灯进行射击时,我们将使用蓝图接口执行不同的操作。
13.通过 Class Settings 添加 DM_Interface,然后拖入 PointLight1 组件并创建以下脚本。

Event Is Destructible? 被调用时,我们首先将灯光设为绿色。第二次调用时,我们将把强度设为 0(关闭灯光)。注意:我们并未使用接口中包含的损坏、力量或命中位置信息,因其与此蓝图无关。使用蓝图接口可形成一个整体函数,在应用接口和函数的所有蓝图中进行调用,然后确定每个蓝图上执行的脚本。
14.编译 并 保存,然后关闭蓝图。
15.打开 内容浏览器 中 Content/FirstPersonBP/Blueprints 下的 FirstPersonProjectile 蓝图。

此蓝图包含玩家武器开火时游戏中生成的投射物的脚本。

此操作将执行函数 IsDestructible?,应用接口和函数的所有蓝图也将执行。
如未找到此节点,取消勾选快捷菜单右上角的 Context Sensitive 选项。
17.在 Branch False 引脚的引出连线后连接 IsDestructible? 节点,并连接 Other 和 HitLocation 引脚。

在上图中,我们添加了现有的脚本,检查命中的物体是否进行物理模拟。如未进行物理模拟,则在蓝图接口中调用 IsDestructible? 函数,并为目标应用 1000 损坏和 100 力量(从 Event Hit 节点的 Other 引脚收集,在此引脚处还可获得 命中位置 并指定到 HitLoc 变量进行传递)。
18.编译 并 保存,然后关闭蓝图。
19.将 SM_GlassWindow_DM 和 Blueprint_CeilingLight 蓝图拖入关卡,然后点击 Play 按钮在编辑器中开始游戏。
射击玻璃将使其破碎并碎裂。

对灯射击一次,将使灯光变为步骤 13 中指定的颜色。

再次对灯进行射击,将使灯光关闭(已在步骤 13 中设置)。

此例使用 蓝图接口 在蓝图之间传递变量,并调用在应用接口的蓝图中执行不同脚本的函数。如需了解蓝图接口使用和其他形式蓝图通信的更多内容,请查阅下方的 相关页面 部分。
网友评论