碰撞总览

本页面的内容:

碰撞响应(Collision Responses)轨迹响应(Trace Responses) 为虚幻引擎 4 提供运行时碰撞和光线投射的处理方式。每个可以发生碰撞的物体都拥有 物体类型(Object Type) 和一系列响应。正是这些响应定义了该物体与其他物体类型之间的物理交互。碰撞或重叠事件发生时,两个(或所有)相关物体可被设为产生影响或受到影响,两者(或所有)物体之间存在阻挡、重叠、或无视的情况。

轨迹响应 的工作方式基本相同,轨迹本身(光线投射)可被定义为轨迹响应类型之一,使 Actors 基于 它们的 轨迹响应阻挡或无视光线投射。

交互

以下是碰撞的处理规则:

测试关卡并在世界场景中进行环视:

常见碰撞互动范例

这些互动假定所有物体的 Collision Enabled 设为 Collision Enabled,它们将和其他物体产生完整的碰撞。如碰撞被禁用,就相当于所有 碰撞响应 被设为 无视

对以下部分而言,这是用于解释即将发生情况的设置。

images/COL_setup.png

图中球体是一个 PhysicsBody,方块为 WorldDynamic。变更其碰撞设置可获得各种行为。

碰撞

对两者的碰撞进行设置使其相互阻挡,从而获得碰撞效果。在相互互动的物体上十分实用。

images/COL_collideNoEvent.png

球体碰撞设置 墙壁碰撞设置
images/COL_collideNoEvent_Sphere.png images/COL_collideNoEvent_Box.png
在此例中,球体为一个 PhysicsBody,被设为 阻挡 WorldDynamic(墙壁)。 墙壁是一个 WorldDynamic,被设为 阻挡 PhysicsBody Actors(球体)。

在此例中,球体和墙壁将产生简单碰撞,没有进一步的碰撞通知。

碰撞和模拟产生命中事件

基础碰撞很实用,但整体而言只是最基础的物理互动;如果需要 报告 碰撞发生进而触发蓝图或节点的部分,则需要进行如下设置:

images/COL_collideEvent.png

球体碰撞设置 墙壁碰撞设置
images/COL_collideEvent_Sphere.png images/COL_collideNoEvent_Box.png
在上图中,球体为一个 PhysicsBody,被设为 阻挡 WorldDynamic(墙壁)。然而球体还启用了 Simulation Generates Hit Events,因此它和其他物体发生碰撞时将为自身触发事件。 墙壁是一个 WorldDynamic,被设为 阻挡 PhysicsBody Actors(球体)。墙壁未设为 Simulation Generates Hit Events,因此它将不会为自身产生事件。

设为 Simulation Generates Hit Events 后,球体发生碰撞时将进行自我告知。球体将在其蓝图中将产生诸如 ReceiveHitOnComponentHit 的事件。如果墙壁拥有碰撞事件,它将不会生成事件,因为它并未自我告知已发生的碰撞。

深入而言,报告刚体碰撞的物体与其他物体发生接触时便会报告所有的碰撞并发送报告。因此需要在蓝图或代码中对其碰撞的物体进行仔细过滤。

重叠和无视

就全部的意图和目的而言,重叠无视 与禁用 assuming Generate Overlap Events 功能后的效果相同。在此例中,球体被设为重叠或无视方块。

images/COL_ignore.png

球体碰撞设置 墙壁碰撞设置
images/COL_OverlapNoEvent_Sphere.png images/COL_collideNoEvent_Box.png
球体在此被设为 重叠 WorldDynamic Actors(如墙壁),但并未启用 Generate Overlap Events。就球体本身而言,它并未与任何物体发生碰撞或产生重叠,实际上无视了墙壁。 墙壁是一个 WorldDynamic,被设为 阻挡 PhysicsBody Actors(球体)。如上所述,两个 Actors 需要被设为阻挡对方的物体类型。如为进行此设置,它们将不会产生碰撞。

或者:

球体碰撞设置 墙壁碰撞设置
images/COL_ignore_sphere.png images/COL_collideNoEvent_Box.png
球体在此被设为 无视 WorldDynamic Actors(例如墙壁),它将穿过墙壁。 墙壁是一个 WorldDynamic,被设为 阻挡 PhysicsBody Actors(球体)。如上所述,两个 Actors 需要被设为阻挡对方的物体类型。如为进行此设置,它们将不会产生碰撞。

重叠与重叠事件生成

和每帧均生成的碰撞不同,重叠事件为 ReceiveBeginOverlapReceiveEndOverlap,只在特定条件下生成。

images/COL_overlapEvent.png

球体碰撞设置 墙壁碰撞设置
images/COL_OverlapEvent_Sphere.png images/COL_collideNoEvent_Box.png
球体在此被设为 重叠 WorldDynamic Actors(如墙壁),它将在和其他物体发生重叠时为自身生成一个事件。 墙壁是一个 WorldDynamic,被设为 阻挡 PhysicsBody Actors(球体)。如上所述,两个 Actors 需要被设为阻挡对方的物体类型。如为进行此设置,它们将不会产生碰撞。但此处确有 重叠 发生,并为球体触发一个事件。