NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - AI模型在线查看 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割 - 3D道路快速建模
在这个教程中,我们将学习如何使用虚幻引擎4,实现角色与一扇门的简单交互和动画表现。教程将涵盖以下内容:
- 创建门的蓝图
- 添加交互界面
- 向门蓝图添加接口
- 实现事件
- 向门网格添加碰撞
- 创建自定义角色和游戏模式
- 添加交互按钮
- 实现角色与门的交互
- 为门添加动画
1、创建项目
我们将从一个简单的虚幻3D项目开始,别忘了在开始时包含 starter content:

接下来,我们将从场景中删除所有不必要的对象:

现在我们准备实现新功能了!🎉
2、创建门的蓝图
我们将使用Starter Content中的门,它将由SM_Door
和SM_DoorFrame
组成:

现在,我们需要使用 一个Blueprint Class
来组合这些对象, 创建一个:

从菜单中选择Actor Class
:

应该看到如下内容:

在编辑器中双击DB_Door
图标打开该蓝图:

单击添加组件,然后从下拉菜单中选择添加Scene

结果应如下所示:

现在,我们需要选择静态网格体并将它们附着(attach)到组件上。我们将从SM_Door
开始:

现在选择SM_DoorFrame
:

应该得到:


现在,将DoorRoot的Mobility
更改为Static
:

将Box Collision
组件添加到DoorRoot:
...并调整碰撞道具(大致如图所示)。
当我们的角色与之碰撞时,这个区域将触发一个动作。

保存工作并返回到主项目窗口。
3、添加交互界面
在我们添加交互逻辑之前,将在开始时以适当的方式进行(不是简单的解决方案,而是正确的解决方案)。简单来说:如果我们的对象是可交互的(实现Interactable接口)——那就做点什么。让我们开始吧...
添加Blueprint Interface
:

将其命名为BPi_Interactable
:

在编辑器中打开接口文件:

将Inputs → Interactor类型更改为Actor
:

并重命名NewFunction_0
为Interaction
,不要忘记编译:


4、向门蓝图添加接口
现在,我们需要打开BP_Door
文件并单击"Class Setting"。在Interfaces选项卡中添加我们新创建的BPi_Interactable
接口:

我们将看到接口已更新:

接下来,我们需要实现一个事件。右键单击Interfaces → Interaction图标,然后单击Implement event
:

5、实现事件
单击Implement event
后-将打开事件图:

在变量选项卡中,单击"+ Variable"并添加一个新的布尔变量isClosed
:

...并使其可编辑:

现在,只需将其拖放到"事件图表"窗口中即可:

我们需要一个对门的引用,所以只需将"门"静态网格拖放到事件图中:

创建一个从门到SetRelativeRotation
的链接,这将允许门"打开":

最终结果应如下所示:


6、向门网格添加碰撞
在使用Starter Content中的门之前,我们需要添加碰撞,否则我们的角色将穿过那扇门。
要了解有关碰撞的更多信息,你可以在此处查看。
双击SM_Door
:


这个教程不是关于碰撞的,因此我们将使用一个简单的解决方案。单击Collision → Add 26DOP Simplified Collision:

完成该操作后,您将在门上看到一个新的碰撞网格,该碰撞网格将成为某种障碍物:

7、创建自定义角色和游戏模式
现在需要修改角色和游戏模式。我们将扩展现有功能,而不是更新现有的默认实现:

在你的/Blueprints
文件夹中,从ThirdPersonCharacter
和ThirdPersonGameMode
创建新的Child Blueprint Class
(右键单击它们并选择Crete Child Blueprint Class
菜单项):


打开CustomGameMode
并更改Default Pawn Class值,从ThirdPersonCharacter
更改为CustomCharacter
(不要忘记编译):

打开项目设置...

...将Default GameMode
和Default Pawn Class
更改为我们的自定义模式和角色:

接下来,在World Outliner
更改关卡的字符。可以删除旧的并放置一个新的:

将Auto Possess Player更改为Player 0:

8、添加交互按钮
对于我们的"交互",需要指定一个"交互"按钮,现在来实现这个功能。打开Project Settings
:

并添加F
键作为交互按钮:



9、实现交互
双击CustomCharacter
蓝图并添加Interact
操作,我们将从此处开始:

最终代码应如下所示:

Capsule
从哪里来的?不用担心,只需从当前CustomCharacter
拖放CapsuleComponent
:

10、为门添加动画
为简单起见,我已将蓝图移至 /Blueprint 文件夹。这不是必需的,所以不用担心😉

在编辑器中打开BP_Door
并添加Timeline
节点:


打开然后单击Add Float Track
图标:

添加一个关键点...

...值为 0 和 0:

第二个关键点的值为 1 和 1:

选择这两个点,然后右键单击并选择Auto
键插值,这将使我们的动画更加"自然":

将长度更改为 1:

添加关键点后的结果蓝图应如下所示:

注意:我们需要将 1 乘以角度值,以便动画从零变为 1。
原文链接:Unreal Engine. Character Interaction With an Object and Animation
BimAnt翻译整理,转载请标明出处