开门

一个关于时间轴(Timeline)的案例。介绍了如何用时间轴以及蓝图和C++来实现玩家靠近门后,门会自动打开的效果。

Choose your operating system:

Windows

macOS

Linux

选择实现方法:

Blueprints

C++

课程:蓝图基本概念|蓝图 - 基本概念|https://cdn2.unrealengine.com/Unreal+Engine%2Fonlinelearning-courses%2Fblueprints---essential-concepts%2FBPEssentialsThumbnail_1920x1080-1920x1080-2fcdde875f1d79ade1c295fe4fef53c4b8c5ecde.PNG?resize=1&w=1400|https://cdn2.unrealengine.com/Unreal+Engine%2Fonlinelearning-courses%2Fblueprints---essential-concepts%2FBlueprint--Essential-Concepts-1000x1000-9f372ce55de42ce9596dffd6c931839e44fcc873.png?resize=1&w=300 课程:使用蓝图进行交互式材质交换|使用蓝图进行交互式材质交换|https://cdn2.unrealengine.com/Unreal+Engine%2Fonlinelearning-courses%2Finteractive-material-swaps-using-blueprints%2F406---Hero2-1920x1080-ce26b6199cf620364149d2d934c73ae30e983110.png?resize=1&w=1400|https://cdn2.unrealengine.com/Unreal+Engine%2Fonlinelearning-courses%2Finteractive-material-swaps-using-blueprints%2FInteractive-Material-Swaps-Using-Blueprints-1000x1000-21158a5fe67365e3bf5db49712b52482382f15ac.png?resize=1&w=300 课程:制作蓝图产品配置器|企业级蓝图|https://cdn2.unrealengine.com/Unreal+Engine%2Fonlinelearning-courses%2Fblueprint-for-enterprise%2F301-Blueprints-%281200X675%29-1200x675-d140b8a0b13b05c0619e35e1076b4c82e4a4b855.png?resize=1&w=1400|https://cdn2.unrealengine.com/Unreal+Engine%2Fonlinelearning-courses%2Fblueprint-for-enterprise%2FBlueprint-for-Enterprise-1000x1000-13caa11b8e5c5e91506a8dd63b39d247318c3208.png?resize=1&w=300

本教程演示如何凭借

[引擎初学者内容包](understanding-the-basics/projects-templates/creating-new-project/Packs)
中的可用资源,使用 时间轴 蓝图创建基于距离的开门。

image alt text

创建门Actor

  1. 首先,点击 新建(New) > 游戏(Games) > 空白(Blank) > 蓝图(Blueprint) 创建名为 TimelineDoorActor 的项目,并启用 初学者内容包(Starter Content)

  2. 点击 添加/导入(Add/Import) 按钮新建蓝图 Actor 类,将其命名为 BP_DoorActor

  3. 从内容浏览器中双击该BP_Door Actor在蓝图编辑器中打开,然后打开 类默认值(Class Defaults)

    图像替换文本

  4. 下一步,在 组件(Components) 选项卡中点击 添加组件(Add Component) 按钮,选择 静态网格体(Static Mesh) 添加新的 静态网格体组件(Static Mesh Component)

    图像替换文本

  5. 右键点击你的静态网格体组件,选择 重命名(Rename),将其重命名为 DoorFrame

    图像替换文本

  6. 下一步,在 组件(Components) 选项卡中点击 添加组件(Add Component) 按钮,选择 静态网格体(Static Mesh) 添加新的 静态网格体组件(Static Mesh Component)。(重复步骤3)

  7. 右键点击你的静态网格体组件,选择重命名(Rename),将其重命名为 Door

    图像替换文本

  8. 点击添加组件(Add Component),从下拉菜单中选择 盒体碰撞(Box Collision),将其重命名为 Box

    图像替换文本

  9. 下一步,打开事件图表,右键点击 图表,从 蓝图上下文菜单(Blueprint Context Menu) 中选择 添加时间轴(Add Timeline)。将你的时间轴命名为 DoorTimelineComponent

    图像替换文本

此时,BP_DoorActor的类默认值应如下例中所示:

图像替换文本

设置门静态网格体

接下来,你需要设置 组件(Components) 选项卡的附件层级。

你还需要设置静态网格体资产,直观地表示你的 DoorFrameDoor 静态网格体组件。

  1. BP_DoorActor 的组件(Components)选项卡中,选择 DoorFrame 静态网格体并将其拖动到 DefaultSceneRoot组件 上,使其成为新的 根组件

    图像替换文本

  2. 接下来,在组件(Components)选项卡中选择 DoorFrame 静态网格体,从 细节面板(Details panel) 中将静态网格体更改为 SM_DoorFrame

    图像替换文本

  3. 接下来,从组件(Components)面板中选择DoorMesh组件。导航至细节面板,将静态网格体更改为 SM_Door

    图像替换文本

  4. 然后导航至 变换(Transform) 类别,将 Y位置(Y Location) 值更改为 45.0

    图像替换文本

  5. 点击 保存(Save)编译(Compile),将这些更改保存到Bp_DoorActor。

创建时间轴浮点轨道

时间轴组件需要时间轴曲线来描述其移动动画。每个轨道都可以包含多个键,用于定义时间和值。曲线内插这些键,以计算时间轴中任何点的值。

  1. 首先,在事件图表中双击DoorTimelineComponent,打开时间轴编辑器。

  2. 点击 添加浮点曲线(Add Float Curve) 向该轨道添加新曲线,将该曲线命名为 DoorRotationZ

    图像替换文本

  3. 右键点击,向浮点曲线轨道添加两个键。两个键的值分别为(0,0)和(5,90)。

    图像替换文本

  4. 按住Shift键并选中这两个键,点击右键,从 键插值(Key Interpolation) 下拉菜单中选择 自动(Auto) 插值。

  5. 保存你的浮点轨道。

更新事件轨道逻辑

现在你需要创建更新逻辑,以旋转你的门静态网格体。

  1. 导航至BP_DoorActor的组件(Components)选项卡,将门静态网格体拖动到事件图表上

    图像替换文本

  2. 拖移门引脚,从操作上下文菜单中选择 SetRelativeRotation

    图像替换文本

  3. 右键点击事件图表,从上下文菜单中选择 制作旋转体(Make Rotator)

    图像替换文本

  4. DoorTimelineComponent 节点上,拖动 Door Rotation Z 浮点引脚,将其连接至 Make Rotator 节点的 Z(Yaw) 引脚。

    图像替换文本

  5. DoorTimelineComponent 节点上,拖移 更新(Update) 引脚,将其连接至 SetRelativeRotation 节点的输入执行引脚。

  6. Make Rotator 节点上,将 返回值(Return Value) 引脚连接至SetRelativeRotation节点的 新旋转(New Rotation) 引脚。

    图像替换文本

  7. 编译保存

创建绑定盒体碰撞重叠事件

盒体组件需要拥有在Actor进入或离开碰撞边界时做出反应的能力。

  1. 导航至BP_DoorActor的组件(Components)选项卡,选择盒体组件。

  2. 从细节面板中,向下滚动到事件类别,点击 在组件开始重叠时(On Component Begin Overlap) 事件旁的 + 图标。

    图像替换文本

  3. On Component Begin Overlap(Box) 节点上,拖移执行引脚,将其连接至DoorTimelineComponent节点的播放(Play)引脚。

    图像替换文本

  4. 导航至BP_DoorActor的组件(Components)选项卡,选择盒体组件。然后,在细节面板向下滚动到事件类别,点击 在组件结束重叠时(On Component End Overlap) 事件旁的 + 图标。

    图像替换文本

  5. On Component End Overlap(Box) 节点上,拖移执行引脚,将其连接至TimelineComponent节点的 反向(Reverse) 引脚。

    图像替换文本

  6. 编译保存

将Actor放到关卡中

  1. 从内容浏览器中,选择你的BP_DoorActor并将其拖动到视口中。

    图像替换文本

  2. 按PIE

    图像替换文本

    可以使用WASD键控制我们的旁观者Pawn。导航至DoorActor的碰撞边界时,可以在门打开时观察时间轴播放。退出边界时,可以观察到时间轴反向播放。

完成后的蓝图

BP_DoorActor

图像替换文本

[INCLUDE:programming-and-scripting/blueprints-visual-scripting/UserGuide/Timelines/Examples/opening-doors-in-unreal-engine/opening-doors-c]
本文基于此前的虚幻引擎版本编写,未针对当前的虚幻引擎5.0版本更新过。