使用接口

在此指南中,我们将设置一个 蓝图接口 ,将其调用后可在多个蓝图中执行不同脚本。

此指南使用启用 新手内容Blueprint First Person 模板。

  1. Content/StarterContent/Props 文件夹中,右键单击 SM_GlassWindow 并选择 Create Destructible Mesh

    Interface1.png

    我们需要将静态网格体转换为可摧毁网格体(Destructible Mesh),在被击中后破碎。

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

    Interface2.png

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

    Interface3.png

    将弹出提示输入蓝图的命名和保存路径(此处使用 SM_GlassWindow_DM)。

  4. 内容浏览器右键单击,然后在 Blueprints 下选择 Blueprint Interface

    Interface4.png

    将再次弹出提示输入蓝图接口的命名和保存路径(此处使用 DM_Interface)。

  5. 蓝图接口中,将现有函数命名为 IsDestructible?,然后点击 New 添加下图中显示的 输入(Inputs)

    Interface5.png

    上图中我们创建了三个 Inputs,用于在应用此蓝图接口的蓝图之间传递变量。我们创建了两个 浮点 变量:一个名为 Damage,用于传递命中时对物体形成的破坏量;另一个名为 Strength,用于传递应用的冲击力量。最后添加一个名为 HitLoc矢量,用于保存物体被命中的位置,以便传递信息。

  6. 编译保存,然后关闭蓝图接口。

  7. 内容浏览器 中打开 SM_GlassWindow_DM 蓝图,然后点击工具栏中的 Class Settings 选项。

    Interface6.png

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

    Interface7.png

    此操作将在此蓝图中应用蓝图接口,以便访问其中的函数。

  9. 在图表中 单击右键,搜索 ? 并选择 Event Is Destructible? 事件。

    Interface8.png

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

    Interface9.png

    Destructible 组件引出的连线后,我们使用 Apply Damage 并连接所需的损坏、力量、位置和方向要求,对玻璃窗应用破坏。实际的损坏、力量和命中位置信息将通过蓝图接口从另一个蓝图(稍后进行设置)传递到此蓝图。

  11. 编译保存,然后关闭蓝图

  12. 打开 内容浏览器Content/StarterContent/Blueprints 下的 Blueprint_CeilingLight 蓝图。

    Interface10.png

    对此灯进行射击时,我们将使用蓝图接口执行不同的操作。

  13. 通过 Class Settings 添加 DM_Interface,然后拖入 PointLight1 组件并创建以下脚本。

    Interface11.png

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

  14. 编译保存,然后关闭蓝图

  15. 打开 内容浏览器Content/FirstPersonBP/Blueprints 下的 FirstPersonProjectile 蓝图。

    Interface12.png

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

  16. 通过 Class Settings 添加 DM_Interface,然后在图表中 右键单击 并添加 IsDestructible?(Message) 节点。

    Interface13.png

    此操作将执行函数 IsDestructible?,应用接口和函数的所有蓝图也将执行。

    如未找到此节点,取消勾选快捷菜单右上角的 Context Sensitive 选项。

  17. Branch False 引脚的引出连线后连接 IsDestructible? 节点,并连接 OtherHitLocation 引脚。

    点击查看全图。

    在上图中,我们添加了现有的脚本,检查命中的物体是否进行物理模拟。如未进行物理模拟,则在蓝图接口中调用 IsDestructible? 函数,并为目标应用 1000 损坏和 100 力量(从 Event Hit 节点的 Other 引脚收集,在此引脚处还可获得 命中位置 并指定到 HitLoc 变量进行传递)。

  18. 编译保存,然后关闭蓝图。

  19. SM_GlassWindow_DMBlueprint_CeilingLight 蓝图拖入关卡,然后点击 Play 按钮在编辑器中开始游戏。

    射击玻璃将使其破碎并碎裂。

    Example1.png

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

    Example2.png

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

    Example3.png

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