跳转到内容
CRUSHFORMV1.1.0
在 Fab 上获取

损伤车身碰撞体

车身碰撞体

开启 Deform Collision 后,凹陷车身的碰撞体会采用其凹陷的形状。被碰撞压入的汽车,对于撞上它的其他车辆、道具和 Pawn 也同样被压入。质量和惯性保持不变,因此汽车的驾驶手感与之前相同。

凹陷的轿车在编辑器的游戏视图中,车身上覆盖着品红色线框碰撞体,其松脱的后部——已从其支架上脱离——覆盖着白色线框碰撞体。
在 20 m/s 的命中使车尾受损后执行 Crushform.ShowCollision 1:品红色是车身的实时碰撞体,白色是松脱后部的碰撞体。

只有车身自身的简单碰撞体会跟随凹陷:即根组件物理形状中的盒体、凸包、球体和胶囊体。从其他组件焊接到车身上的形状保持自己的形状。关于碰撞体所跟随的配置文件和晶格,参见核心概念。

  • 盒体和凸包会在晶格使其弯曲的地方被切分为块。若晶格使其表面的弯曲超出仅由其角点所得结果的 Collision Block Tolerance,插件就会沿晶格的节点平面切割该形状。每个块是其点集的凸包,并随晶格移动。
  • 球体和胶囊体保留一个由其表面点构成的凸包,并随晶格移动。
  • 未凹陷的形状保持不变。没有凹陷的车身保留其自身的碰撞形状。

插件会在必要时重建碰撞体。当某个形状上的晶格点移动超过 Collision Rebuild Threshold(2 cm)时,即开始一次重建,该距离从上一次重建算起。重建至多每隔 Collision Rebuild Interval(0.5 s)进行一次,因此在此之前发生的凹陷会等待其余凹陷,并进入同一次重建。新的凸包会替换到实际运行的车身上,因此车身会保持其速度、睡眠状态、关节和质量。

修复会立即恢复共享的形状,而不必等待间隔。

较重的构建不必在命中的那一帧完成。Collision Defer Frames 的取值为 0 或 1(默认为 1;大于 1 的值按 1 处理)。取 1 时,插件会在工作线程上计算新的凸包,车身的重建和切割会在下一帧的物理之前落到车身上;如果到那时工作线程还没有完成,游戏线程会在那里等待它。命中的那一帧因此保持很短,这对性能较弱的机器很重要,而在较慢的机器上,下一帧可能会更长。在凸包落到车身之前,凹陷的车身仍保留原有的碰撞体。在另一次构建运行期间请求的构建,会在那一次完成时开始,并占用自己的一帧。被扯断的部件会留在原位,或继续在铰链上摆动,直到它的切割已作用到车身上,然后才掉落:晚一帧,如果当时另一次碰撞构建正在运行,则晚两帧。被扯断部件的凸包在那一帧的物理之后落到车身上。将该值设为 0,则在命中的那一帧完成全部构建。设备配置文件可以用控制台变量 Crushform.Collision.DeferFrames 设置同一个值。

松脱的铰接部件同样跟随其自身的凹陷。一旦车门或引擎盖脱落,若配置文件中的 Dented Part Collision 开启,或者其铰链覆盖了该设置,并且 Hinged Parts 也开启,则它的碰撞体就是其凹陷形状的一个凸包。参见铰接部件。

要让碰撞体跟随凹陷,需要两个条件。配置文件中的 Dents 必须开启,并且车身的根组件必须有带简单形状的物理体。没有物理体时,插件什么也不做,也不会发出任何提示。没有简单形状时,它会记录一条警告,碰撞体保持原样。

  1. 在 Content Browser 中选择 Add > Miscellaneous > Data Asset,选中 CFProfile,然后为其命名。配置文件用于调节车身的凹陷方式。其余内容参见凹陷与晶格。示例车辆使用 DA_CF_Profile_Sedan。
  2. 打开配置文件。在 Dents 分组中,保持 Dents 开启,并保持 Deform Collision 开启。两者默认都是开启的。
  3. 打开车辆的蓝图,选中其 Crushform Chaos Vehicle Adapter 组件,并将 Deform Profile 设为你的配置文件。
  4. 可选:在 Project Settings > Plugins > Crushform > Collision 中调整碰撞相关数值。默认值适用于大多数车身。
Dents
Dents
Deform Collision
Hinged Parts
Dented Part Collision
凹陷配置文件的 Dents 分组:四个开关,全部开启。
Collision
Collision Rebuild Threshold2.0
Collision Rebuild Interval0.5
Collision Block Tolerance1.5
Max Collision Blocks96
Deform Collision
Collision Defer Frames1
Project Settings 中位于 Plugins > Crushform 下的 Collision 分组。

没有改变碰撞体的蓝图节点,也没有 C++ 调用。碰撞体会自行跟随凹陷,开关位于配置文件中。若要恢复这些形状,请在形变组件上使用 Repair。在服务器上,它会清除凹陷,碰撞体也会随之立即恢复。参见凹陷与晶格。碰撞体所跟随的损伤,同样是损伤区域与事件所报告的内容。

属性作用默认值
UCFProfile::bDeformCollision车身的碰撞体是否跟随其凹陷。质量和惯性保持不变。编辑条件:Dents 开启。开
UCFSettings::bDeformCollision对整个项目的同一开关。关闭时优先于所有配置文件,被扯断的部件也不会从车身上切出:它从碰撞体内部开始,由求解器将其推出。Project Settings > Plugins > Crushform > Collision。开
UCFProfile::bDents命中和挤压是否会使车身凹陷。关闭时:碰撞体永远不会改变。开
UCFProfile::bDentedPartCollision松脱的铰接部件是否按其凹陷后的形状碰撞。需要 Deform Collision 和 Hinged Parts。开
UCFSettings::CollisionRebuildThreshold碰撞体上的晶格点必须移动的距离(cm),之后才会重新构建碰撞体。2
UCFSettings::CollisionRebuildInterval同一车身两次碰撞体重建之间的最短间隔(s)。0.5
UCFSettings::CollisionDeferFrames一次较重的碰撞体构建在工作线程上最多可运行多少帧,之后必须落到车身上,取值为 0 或 1。0 表示在命中的那一帧构建。1
UCFSettings::CollisionBlockTolerance晶格使盒体或凸包弯曲超出其角点所得结果的距离(cm),超出则将其切分为块。1.5
UCFSettings::MaxCollisionBlocks一个车身的盒体和凸包最多被切分成的碰撞块数。96

在除 Shipping 之外的任何构建中,于编辑器内运行。Crushform.DebugImpact 不会命中你驾驶的车辆,因为轨迹会跳过它。开车接近一辆停放的车,例如 Proving Ground 地图上的 BP_VehicleAdvSedan2,停在它车尾 3 到 5 m 处,然后输入 Crushform.DebugImpact 20 BP_VehicleAdvSedan2。名称会把命中瞄准从你所在位置看去、该车车身上离其中心最近的那一点;在其后方 3 到 5 m 处,命中落在车尾。然后输入 Crushform.ShowCollision 1。品红色线框显示每个可受损车身的实时碰撞体,凹陷车身的块会跟随其凹陷形状。正在摆动或已脱离支架的部件以白色显示。Crushform.ShowCollision 0 会关闭该叠加层。

输入 Crushform.RepairAll 修复车辆。碰撞体会立即恢复为平直的形状。

  • 凹陷清晰可见,碰撞体却保持平直。 配置文件中的 Dents 或 Deform Collision 已关闭;或项目设置中的 Deform Collision 已关闭;或根组件没有物理体(不会发出警告);或根组件的物理体没有简单碰撞形状。在最后一种情况下,日志会警告根组件“has no simple collision shape, its collision does not follow the dents”。请在其物理资产中为根物理体添加简单碰撞。要查看插件实际碰撞的形状,请运行 Crushform.ShowCollision 1:如果凹陷下方的品红色线框仍然平直,说明碰撞体没有跟随凹陷。
  • 碰撞体在凹陷之后稍晚才跟上。 这是设计如此。重建需要等待某个点移动了 Collision Rebuild Threshold,并且 Collision Rebuild Interval 已经过去。降低其中任一数值,可以更频繁地重建,但代价是重建次数增加。构建一旦开始,Collision Defer Frames 为 1 时会在下一帧的物理之前到达车身;设为 0 则在命中的那一帧放到车身上,代价是这一帧更长。
  • 物理步仍可能使用凹陷之前的形状。 使用异步物理(UPhysicsSettings::bTickPhysicsAsync)时,如果帧不比物理步更短,命中可能在下一个物理步已经开始之后才到达游戏线程,取 0 和取 1 都是如此。在这样的物理步中,刚体保留凹陷之前的形状。
  • 单个晶格单元内的褶皱不会在碰撞体中体现。 碰撞块的精细程度不会超过一个晶格单元。提高配置文件中的 Resolution,可为晶格提供更多节点。
  • 在运行时缩放车辆会破坏其碰撞体。 不支持在运行时改变已凹陷车身的缩放。请在车辆凹陷之前对其进行缩放。