1.创建一个可以旋转的门(单向)
Step 1:准备门资产与碰撞设置
-
在素材库 Fab 中导入门的相关资产(纹理、材质、网格体、门框等)。
-
设置碰撞(关键):双击打开门的静态网格体资产。在编辑器左上角将“查看模式”改为 玩家碰撞 (Player Collision),检查是否有绿色线框(碰撞体)。如果没有,在右侧面板的 凸包分解 (Convex Decomposition) 中点击应用 (Apply) 自动创建碰撞。(如果漏掉这一步,角色在游戏中就能直接穿模穿过门)。
Step 2:构建蓝图组件
-
在
Code/Door文件夹下,新建一个Actor蓝图类,命名为BP_Door。 -
进入蓝图编辑器,在左侧组件面板中点击 添加 (Add),添加两个静态网格体 (Static Mesh) 组件,分别命名为
DoorFrame(门框)和Door(门扇)。
3. 在右侧细节面板中,为它们指定刚才导入的 Fab 网格体资产,并调整好门扇在门框中的相对位置。

4.添加触发区域:继续点击添加 盒体碰撞 (Box Collision) 组件。在细节面板中调整其盒体半高/半径 (Box Extent),使其覆盖门前后的交互区域。(注意:调整范围时要修改 Box Extent 属性,不要直接缩放 Transform 的 Scale,否则会导致碰撞体变形)。

Step 3:编写开关门逻辑
- 选中 Box 组件,在右侧细节面板最下方找到并点击 On Component Begin Overlap(组件开始重叠时)和 On Component End Overlap(组件结束重叠时)的绿色加号,将它们添加至事件图表。

上方的是开始时的主线,下方是结束时的主线。

- 在事件图表中右键搜索并添加 Add Timeline(添加时间轴) 组件,双击进入时间轴面板:
-
点击左上角 f 图标添加一条浮点型轨道,命名为
Opendoor。 -
将时间轴的 长度 (Length) 设置为
2.0秒。 -
右键曲线添加两个关键帧:
(0, 0)和(1, 90)。代表开始时旋转为0,1秒时旋转到90度,剩下1秒保持开启,实现延时关门效果。

-
回到事件图表,将 Begin Overlap 连接到时间轴的 Play(播放),将 End Overlap 连接到时间轴的 Reverse(倒回)。
-
拉出时间轴的 Update(更新) 执行引脚,连接到 Set Relative Rotation(设置相对旋转) 节点,目标指定为
Door组件。 -
将
OpenValue引脚连接到旋转体的 Z 轴 (Yaw)。(可以右键旋转引脚选择“分割结构体引脚”单独连接 Z 轴)。


2.创建一个双向旋转的门
核心原理
单向门无论玩家从哪一侧进入都会朝固定方向开。为了实现“人推门永远向前开”的效果,我们需要计算玩家相对于门的位置关系。
在视口中跳到顶视图,发现进入门是Y轴,所以我们需要获取门的Y轴坐标以及角色的Y轴坐标来控制门的旋转,调整旋转角度发现门旋转90°时,朝向是Y轴正半轴,所以由人指向门的向量应该是正的,另一边则是反的,现在我们可以去调整蓝图了。
详细步骤
-
获取位置坐标:在事件图表中添加 Get Actor Location 获取门的世界坐标;添加 Get Player Pawn 并拉出 Get Actor Location 获取玩家的世界坐标。
-
计算相对方向向量:添加减法节点(Subtract,类型设为 Vector),用门的坐标减去玩家的坐标(向量终点为门,起点为玩家),得到从玩家指向门的向量。
-
减法运算上方是被减数下方是减数

-
分解标量:使用 Break Vector(分解向量) 将结果拆分为 X、Y、Z。根据我们在顶视图中的观察,这里我们需要判断 Y 轴的数值。
-
条件分支判断:使用 Greater(大于) 节点判断
Y > 0是否成立,并将返回的布尔值连接到 Branch(分支) 节点。 -
动态改变旋转方向:
-
新建一个浮点型变量
Direction。 -
当 Branch 为 True 时,使用 Set Direction 设置为
1.0; -
当 Branch 为 False 时,设置
Direction为-1.0。
-
-
注入时间轴:在时间轴输出的
OpenValue后面连接一个 Multiply(乘法) 节点,将轨道值乘以Direction变量,然后再传给Set Relative Rotation的 Z 轴。至此这个门的逻辑就造好了。下面是总的接线:

上述方法在门处于默认朝向时工作完美。但如果将门在关卡中旋转90度摆放,基于世界坐标的 Y > 0 判断就会失效。更完美的做法是使用 Transform Location(将世界坐标转换为局部坐标) 节点,将玩家的绝对位置转换为相对于 BP_Door 的局部位置,此时只需要判断局部坐标的 X 或 Y 正负即可,该逻辑将不受门自身摆放角度的影响!

3074

被折叠的 条评论
为什么被折叠?



