返回 导航

UE5

hangge.com

UE5 - 使用射线检测实现手动开关门效果教程

作者:hangge | 2025-12-03 08:31
    在之前的文章中,我都是通过“Box Collision”组件来触发门的开关,即角色靠近门的附近,门便自动打开,反之便自动关闭。本文我们将换一种思路,使用射线检测(Line Trace)来手动控制门的开关。简单来说,当玩家按下“回车”键时,先从玩家视角发出一条射线,检测是否击中了门;如果命中,则切换门的状态(开→关或关→开)。

1,准备工作

(1)首先我们需要创建一个单开门蓝图类“BP_Door”,具体步骤可用参考我之前写的文章:

(2)将“Box Collision”组件的“碰撞预设”设置为“Custom”,然后将“检测响应”栏目下的“Visibility”勾选为“阻挡”,以便射线检测。

(3)并且这次我们不再需要“组件开始重叠时”与“组件结束重叠时”两个事件。而是创建一个自定事件“OpenAndCloseDoor”由外部触发,来控制门的开关。

2,修改角色蓝图

(1)打开角色蓝图“BP_ControlledCharacter”,在“我的蓝图”面板中创建一个宏命名为“Trace Location”。
  • 在创建宏的“细节”面板中添加两个向量类型的输出参数,参数命名为 StartLocationEndLocation,不需要创建输入参数。
  • Trace Locations 宏的图表中添加如下逻辑。此宏计算用于射线检测的起始和结束位置。因为这是一款第一人称游戏,所以我们使用摄像机作为起始位置,而结束位置位于摄像机前方 300 厘米处。 

(2)切换至“事件图表”选项卡并在空白处右击,在打开的上下文菜单中添加 Enter 键的节点,然后添加如下逻辑:
  • 添加 LineTraceByChannel 节点,并将 Enter 事件的 Pressed 输出引脚连接到 LineTraceByChannel 节点的白色引脚。
  • TraceLocations 宏添加到“事件图表”中,并将宏的输出引脚与 LineTrace 节点的 StartEnd 输入引脚连接起来。
  • 添加“Cast To BP_Door”节点用于测试 Hit Actor 是否为 BP_Door 类型。如果是,则触发 BP_DoorOpenAndCloseDoor 事件。

3,运行测试

(1)运行测试,切换到第一人称视角,当我们移动到门的前面时,按下 Enter 键便会打开门。

(2)再次按下 Enter 键则会把门关上。
评论

全部评论(0)

回到顶部