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

损伤凹陷与晶格

凹陷与晶格

足够猛烈的命中会把车身金属压进去,凹陷会一直保留,直到车身被修复。一个数据资产(配置文件)决定所有凹陷的形状。本页介绍影响凹陷形状的设置,以及修复车身的方法。承载凹陷的晶格、绘制凹陷的图集,以及从物理接触到命中的路径,都在核心概念中说明。如果对这些术语还不熟悉,请先阅读该页。

受到命中的面板会在命中处向内凹陷。金属会像薄板金属那样变形:凹陷从接触点向后延伸,像手风琴一样折叠,横跨命中处扩散,并随命中力度增大而加深,直到达到上限。轻微的碰触不会影响车身。

调试命中使车侧向内凹陷。凹陷会保留,直到车身被修复。

漆面会在同样的位置磨损。参见漆面与划痕。

  • 命中。 命中是车身沿接触法线损失的速度,单位为 m/s。只有命中速度超过 Min Delta V(UCFProfile::MinDeltaV,0.5 m/s)时,车身才会凹陷。较慢的接触不会造成凹陷。
  • 深度。 每超过 Min Delta V 1 m/s,一次命中就会下压 Stiffness(UCFProfile::Stiffness,每 m/s 3 cm),但最多下压 Max Dent Per Hit(UCFProfile::MaxDentPerHit,20 cm)。使用默认值时,15 m/s 的命中要求下压 43.5 cm,实际只下压 20 cm。这个上限让单次命中远低于 Max Displacement,因此重复命中仍能使凹陷加深。
  • 宽度。 凹陷半径等于 Base Radius(UCFProfile::BaseRadius,30 cm),加上 Radius Per Delta V(每 m/s 1.5 cm)乘以命中的速度。半径不会小于 1.25 个晶格单元。Lateral Scale(1.5)使凹陷横向加宽。宽而浅的凹陷看起来像被压皱的金属;窄而圆的凹陷看起来像橡胶。
  • 褶皱。 对单点的命中(例如撞上柱子)会使接触点后方的金属压溃。Crumple Ratio(3)设定压溃的范围,以凹陷深度的倍数表示。在平面(例如墙面)上扩散的命中会把面板压平。
  • 粗糙的边缘。 Noise Amount(0.3)会随机地从每个节点上减去一小部分深度,因此剧烈碰撞留下的是参差的金属,而不是平板。命中沿表面滑动时,Drag Fraction(0.3)会把凹陷沿表面拖拽。
  • 上限。 没有任何节点会超过 Max Displacement(UCFProfile::MaxDisplacement,60 cm)。车身材质必须使用相同的数值作为其位移边界。核心概念说明了这部分的连接方式。
  • 修复。 UCFDeformComponent::Repair 会在每一端清除所有凹陷和划痕,并使铰接部件和玻璃恢复原状。它只在服务器(权威端)上生效,其他端随之同步。污垢会保留,Wash 会清除污垢。
  • 自动修复。 Auto Repair Delay(UCFSettings::AutoRepairDelay)会在车身最近一次受损后的指定秒数自动修复车身。默认为 0,表示从不自动修复。

这些步骤用于创建凹陷配置文件。车辆的设置与快速入门相同。

  1. 在 Content Browser 中选择 Add > Miscellaneous > Data Asset,选中 CFProfile,然后为你项目中的资产命名。
  2. 打开配置文件。保持 Dents 开启,并从下表的默认值开始。Lattice 下的 Resolution 是每个轴上的晶格节点数。每个轴都必须是 4 的倍数,并且当晶格无法放入一个图集槽位时,资产验证会发出警告。
Lattice
Resolution1688
Lattice Margin10.0
Use Explicit Bounds
Explicit Bounds
Min Radius in Cells1.25
Components
Include Tags0 Array element
Exclude Tags0 Array element
Dents
Dents
Deform Collision
Hinged Parts
Dented Part Collision
Min Delta V0.5
Stiffness3.0
Max Dent Per Hit20.0
Base Radius30.0
Radius Per Delta V1.5
Lateral Scale1.5
Crumple Ratio3.0
Drag Fraction0.3
Noise Amount0.3
Bulge0.5
Bulge Down Share0.3
Max Displacement60.0
Stiffness Zones0 Array element
凹陷配置文件的 Lattice、Components 和 Dents 分组,以及它们的默认值。
  1. 为车身指定配置文件。车辆适配器会为你创建形变组件:选中适配器并设置 Deform Profile。如果是你自己的 Actor,请从 Add 的 Crushform 分组中添加 CFDeform,并将 Profile 设为该资产。没有配置文件,组件不会产生任何作用。
  2. 按快速入门第 1 步连接车身的材质。未连接的网格体不会移动。

蓝图只需一次调用即可修复车身:Repair。下图在自定义事件 RepairCar 触发时运行。它通过 Get Deform 获取轿车适配器持有的形变组件,并对其调用 Repair。

自定义事件 RepairCar 触发时运行此图,并对形变组件调用 Repair。

在 C++ 中,如果车身撞碎了一个道具却没有直接接触,而物理系统没有报告这次命中,可以用 ApplyWorldHit 补充这次命中:

// A 12 m/s hit where the prop stood. Only the machine that simulates the body applies it.
const FVector PropLocation = Prop->GetActorLocation();
const bool bApplied = Deform->ApplyWorldHit(PropLocation, FVector::UpVector, 12.0f);

当命中点位于晶格之外、命中过轻而无法造成凹陷,或者本端不允许对该车身施加命中时,ApplyWorldHit 返回 false。

属性作用默认值
UCFProfile::bDents关闭时:命中和挤压都不会使车身凹陷或被划伤。污垢仍然有效。开
UCFProfile::MinDeltaV速度变化量(m/s),低于该值的命中不会造成凹陷。0.5
UCFProfile::Stiffness超过 Min Delta V 每 1 m/s 的凹陷深度(cm)。3
UCFProfile::MaxDentPerHit一次命中最深能造成的凹陷(cm),以该区域的刚度为 1 计。20
UCFProfile::BaseRadius零速度时的凹陷半径(cm)。30
UCFProfile::RadiusPerDeltaV命中每 1 m/s 增加的凹陷半径(cm)。1.5
UCFProfile::LateralScale使凹陷横向加宽。1.5
UCFProfile::CrumpleRatio点状命中使金属压溃的范围,以其深度的倍数计。3
UCFProfile::NoiseAmount点状命中的深度中,每个节点被随机减去的比例,最高 0.9。0.3
UCFProfile::MaxDisplacement任一节点能移动的最远距离(cm)。车身材质以此作为位移边界。60
UCFSettings::AutoRepairDelay车身最近一次受损后,经过多少秒自动修复。0 表示从不。0

在 Play In Editor 中打开 Proving Ground 演示。该指令会跳过你驾驶的车辆,因此目标是第二辆车:把一辆按上述配置文件设置好的车放在视野内,并记下它在 World Outliner 中显示的名称。

  1. 输入 Crushform.DebugImpact 15 <car name>,将 <car name> 替换为该车的名称。它会从你所在的位置以 15 m/s 命中指定的车辆,日志会显示 it is now damaged。
  2. 输入 Crushform.Debug 2。晶格会以节点和梁的形式显示。每次近期的命中都会留下一个蓝色球体和法线箭头,持续几秒。
  3. 输入 Crushform.RepairAll。日志会报告修复了多少个车身,凹陷随之消失。

Crushform.Debug、Crushform.DebugImpact 和 Crushform.RepairAll 是作弊指令:它们在除 Shipping 之外的所有构建以及编辑器中都可以使用。

原因。 速度变化量等于或低于 Min Delta V。只有超过它的命中才会造成凹陷。

修复。 降低 Min Delta V,或使命中更猛烈。要检查车身本身,可对它运行 Crushform.DebugImpact 15 <car name>(见上文“检查是否正常工作”)。如果这次命中使车身凹陷,说明游戏中的命中太轻了。

原因。 Max Dent Per Hit 默认把一次命中限制在 20 cm。更猛烈的命中也不会挖得比这个上限更深。

修复。 提高 Max Dent Per Hit,但应保持远低于 Max Displacement,以便重复命中仍能使凹陷加深。

原因。 Auto Repair Delay 大于 0。车身会在最近一次受损后经过该秒数自动修复。

修复。 在 Project Settings > Plugins > Crushform 的 Repair 下,将 Auto Repair Delay 设为 0,或设为你需要的延迟。

部分面板会凹陷,另一些从不凹陷

Section titled “部分面板会凹陷,另一些从不凹陷”

原因。 配置文件中的 Include Tags 和 Exclude Tags 会筛选可以弯曲的网格体。带有被排除标签的网格体永远不会凹陷;相对车身会移动的部件必须被排除。

修复。 检查面板的组件标签,以及配置文件中的这两个列表。