在 Unreal Engine 5 (UE5) 中,Break Hit Result
节点用于将 Hit Result
结构体分解成其各个组成部分。Hit Result
结构体包含了射线追踪(如 Sphere Trace by Channel
、Line Trace by Channel
等)的结果信息,包括碰撞的位置、法线、碰撞物体等详细数据。
Break Hit Result
节点的输出
Break Hit Result
节点会将 Hit Result
结构体分解成以下部分:
- Actor:与射线发生碰撞的 Actor。
- Component:与射线发生碰撞的组件。
- Bone Name:如果碰撞发生在骨骼网格体上,这里会包含碰撞的骨骼名称。
- Location:碰撞发生的确切位置。
- Impact Point:射线与物体表面的交点位置。
- Normal:碰撞点处的法线向量。
- Impact Normal:射线与物体表面交点处的法线向量。
- Face Index:碰撞面的索引(如果适用)。
- Trace Start:射线的起点。
- Trace End:射线的终点。
- Distance:从射线起点到碰撞点的距离。
- Time:从射线起点到碰撞点的时间(通常是归一化的距离)。
- Item:如果使用了物理材质,这里会包含相关的物理材质信息。
- Material:碰撞点处的材质。
- Physics Material:碰撞点处的物理材质。
- Body Index:碰撞体的索引(如果适用)。
示例用法
假设你正在开发一个 VR 游戏,并且希望在玩家挥动武器时检测到附近的敌人,并获取详细的碰撞信息。你可以使用 Sphere Trace by Channel
和 Break Hit Result
节点来实现这一点。
- 创建蓝图:
-
- 打开你的角色蓝图或武器蓝图。
- 添加
Sphere Trace by Channel
节点:
-
- 在事件图表中,右键点击空白区域,搜索并添加
Sphere Trace by Channel
节点。
- 在事件图表中,右键点击空白区域,搜索并添加
- 设置输入引脚:
-
- Start:设置为武器的末端位置(例如,武器的尖端)。
- End:设置为武器末端位置加上一个偏移量(例如,武器的攻击范围)。
- Radius:设置为一个合适的半径,例如 10.0 或其他适合的值。
- Trace Channel:选择一个合适的碰撞通道,例如
Pawn
或自定义的Enemy
通道。 - bTrace Complex:设置为
True
以检测复杂的碰撞几何体。 - bFind Initial Overlap:设置为
True
以检测起点处的重叠。 - bIgnore Self:设置为
True
以忽略自身的碰撞。 - Actor to Ignore:如果有需要忽略的特定 Actor,可以在这里指定。
- bShow Trace 和 bPersistent Show Trace:在调试时设置为
True
以显示射线追踪的效果。
- 添加
Break Hit Result
节点:
-
- 右键点击事件图表,搜索并添加
Break Hit Result
节点。 - 将
Sphere Trace by Channel
节点的Out Hit
引脚连接到Break Hit Result
节点的In Hit
引脚。
- 右键点击事件图表,搜索并添加
- 处理输出:
-
- 使用
Break Hit Result
节点的输出来获取详细的碰撞信息,并根据需要执行相应的逻辑。
- 使用
伪代码示例
// 伪代码示例
Event Tick
-> Get Weapon Tip Position (Vector)
-> Add Vector (Weapon Tip Position, Attack Range Vector)
-> Sphere Trace by Channel (Start: Weapon Tip Position, End: New Vector, Radius: 10.0, Trace Channel: Enemy, bTrace Complex: True, bFind Initial Overlap: True, bIgnore Self: True)
-> Branch (Condition: Return Value from Sphere Trace by Channel)
-> If True
-> Break Hit Result (In Hit: Out Hit from Sphere Trace by Channel)
-> Get Hit Actor (From Break Hit Result)
-> Apply Damage to Hit Actor (Using Hit Actor and Other Info from Break Hit Result)
-> If False
-> No Collision Detected
具体步骤
- 打开蓝图:
-
- 打开你的角色蓝图或武器蓝图。
- 添加
Sphere Trace by Channel
节点:
-
- 右键点击事件图表,搜索并添加
Sphere Trace by Channel
节点。
- 右键点击事件图表,搜索并添加
- 设置输入引脚:
-
- 将武器的末端位置连接到
Start
引脚。 - 使用
Add Vector
节点将一个偏移量加到武器末端位置上,并将结果连接到End
引脚。 - 设置
Radius
为 10.0 或其他合适的值。 - 选择
Trace Channel
为Enemy
或其他合适的通道。 - 设置
bTrace Complex
为True
。 - 设置
bFind Initial Overlap
为True
。 - 设置
bIgnore Self
为True
。 - 根据需要设置
Actor to Ignore
。 - 在调试时设置
bShow Trace
和bPersistent Show Trace
为True
。
- 将武器的末端位置连接到
- 添加
Break Hit Result
节点:
-
- 右键点击事件图表,搜索并添加
Break Hit Result
节点。 - 将
Sphere Trace by Channel
节点的Out Hit
引脚连接到Break Hit Result
节点的In Hit
引脚。
- 右键点击事件图表,搜索并添加
- 处理输出:
-
- 将
Break Hit Result
节点的输出连接到适当的节点,例如:
- 将
-
-
- 获取
Hit Actor
并应用伤害。 - 获取
Impact Point
以显示命中效果。 - 获取
Normal
以计算反弹方向或其他物理效果。
- 获取
-
通过这种方式,你可以使用 Break Hit Result
节点来获取详细的碰撞信息,并根据需要执行相应的逻辑。这对于实现近战攻击、环境交互等功能非常有用。