集成配置文件与预设
配置文件与预设
配置文件是一种数据资产,为某一类车身调节某个系统:车辆如何凹陷、轮胎如何形变、发动机如何发声。插件从拥有该系统的组件中读取它,因此一个项目可以同时运行多个配置文件。本页列出配置文件类、每个类应放置的位置、插件在 Presets 文件夹 /Crushform/Presets 中提供的预设,以及“预设”一词在插件中的其他含义。
本页没有蓝图图表。配置文件在游戏开始前通过类默认值或 C++ 设置,没有任何蓝图函数可以在组件上设置它:UCFDeformComponent::Profile 为 BlueprintReadOnly,UCFTireComponent::SetProfile 仅限 C++。
各配置文件的放置位置
Section titled “各配置文件的放置位置”| 资产类 | 调节内容 | 设置于 | 项目默认值 | 内置默认值 |
|---|---|---|---|---|
UCFProfile | 车身如何凹陷、刮擦漆面并沾上污垢 | UCFDeformComponent::Profile,或车辆适配器上的 DeformProfile | UCFSettings::DefaultProfile | /Crushform/Presets/DA_CF_DefaultProfile |
UCFTireProfile | 轮胎如何追踪地面并形变 | UCFTireComponent::Profile,或车辆适配器上的 TireProfile | UCFTireSettings::DefaultProfile | /Crushform/Presets/DA_CF_DefaultTireProfile |
UCFEngineSoundProfile | 发动机的循环音、音高和淡入淡出 | UCFEngineAudioComponent::Profile,或车辆适配器上的 EngineSoundProfile | UCFEngineSettings::DefaultProfile | /Crushform/Engine/DA_CF_DefaultEngineSound |
插件的其他数据资产是定义,而不是配置文件。玻璃板使用 UCFGlassDefinition,可破坏道具使用 UCFBreakablePropDefinition,树木使用 UCFTreeConfig,撞击反馈则使用 UCFImpactFeedbackSet。每种都在本指南中有自己的页面。路面(为每种地面提供污垢与滚动声)使用 UCFSurfaces 资产,该资产由 UCFSettings::Surfaces 指定。
在 Content Browser 中通过 Add > Miscellaneous > Data Asset 创建这些资产中的每一个,并选择对应的类。插件不注册任何工厂,也不设置自己的资产分类。
为车身设置配置文件
Section titled “为车身设置配置文件”没有配置文件的组件什么也不做。对 UCFDeformComponent 来说,这是静默的:晶格不会被构建。组件在游戏开始时读取其配置文件,因此请在以下两个位置之一进行设置:
- 在蓝图的类默认值中,设置组件 Details 面板里的 Profile 字段。
- 在 C++ 中,于
SpawnActorDeferred与FinishSpawning之间、组件开始游戏之前进行设置。
对于带有适配器的车辆,让适配器的配置文件字段留空即可使用项目默认值。字段为空时,适配器会把项目默认值分配给其形变组件和轮胎组件。发动机组件若没有自己的配置文件,则回退到项目默认值。适配器字段中的显式值始终优先。
若已设置配置文件,但拥有者的任何网格都无法形变,组件会输出警告并保持关闭:
%s has a profile but no deformable mesh components; Crushform stays off常见原因是 Include Tags 列表与任何网格都不匹配,或拥有者的网格全部被 Exclude Tags 排除。
UCFProfile
Section titled “UCFProfile”UCFProfile 保存一个车身的设置。其属性按它们在 Details 面板中显示的分类分组。下表列出决定损伤外观与手感的属性。完整列表见 API 参考。
| 属性 | 作用 | 默认值 |
|---|---|---|
UCFProfile::Resolution | 每个轴上的晶格节点数。每个轴都是 4 的倍数,且晶格必须能放入一个图集槽位 | 16、8、8 |
UCFProfile::LatticeMargin | 晶格在各侧超出车身碰撞的距离,单位厘米 | 10 |
UCFProfile::bUseExplicitBounds | 使用 ExplicitBounds 作为晶格包围盒,而非碰撞的包围盒 | 关 |
UCFProfile::IncludeTags | 只有带有其中某个标签的网格组件会形变。为空则表示所有静态网格和骨骼网格 | 空 |
UCFProfile::ExcludeTags | 带有其中某个标签的网格组件永不形变。用于会移动的部件,例如车门 | 空 |
UCFProfile::bDents | 关:撞击、挤压和报告都不会使车身凹陷或刮擦 | 开 |
UCFProfile::bDeformCollision | 车身的碰撞跟随其凹陷 | 开 |
UCFProfile::bHingedParts | 关:铰接部件永不摆动、脱落或被扯下 | 开 |
UCFProfile::MinDeltaV | 车身开始凹陷前的撞击速度,单位 m/s | 0.5 |
UCFProfile::Stiffness | 超过 MinDeltaV 后,每 m/s 对应的凹陷深度,单位厘米 | 3 |
UCFProfile::MaxDentPerHit | 在区域刚度为 1 时,一次撞击能造成的最大凹陷,单位厘米 | 20 |
UCFProfile::CrumpleRatio | 点状撞击使金属压溃进车身内部的距离,以其凹陷深度的比例表示 | 3 |
UCFProfile::MaxDisplacement | 任一节点的最大位移,单位厘米。车身材质将其用作 Max World Position Offset Displacement | 60 |
UCFProfile::StiffnessZones | 车身比其余部分更硬或更软的包围盒 | 空 |
UCFProfile::DentAbrasion | 每厘米凹陷增加的漆面磨损 | 0.002 |
UCFProfile::MinScrapeSpeed | 低于此滑动速度(单位 m/s)时,接触不会破坏漆面 | 1.5 |
UCFProfile::MaxPlausibleDeltaV | 客户端可报告的最快撞击或滑动速度,单位 m/s。服务器会拒绝超过该值的任何报告 | 40 |
UCFProfile::DirtScale | 乘以车身上每一次污垢沉积量。为零时车身保持干净 | 1 |
| Lattice | ||
|---|---|---|
| Resolution | 1688 | |
| Lattice Margin | 10.0 | |
| Use Explicit Bounds | ||
| Explicit Bounds | ||
| Min Radius in Cells | 1.25 | |
| Components | ||
| Include Tags | 0 Array element | |
| Exclude Tags | 0 Array element | |
| Dents | ||
| Dents | ||
| Deform Collision | ||
| Hinged Parts | ||
| Dented Part Collision | ||
| Min Delta V | 0.5 | |
| Stiffness | 3.0 | |
| Max Dent Per Hit | 20.0 | |
| Base Radius | 30.0 | |
| Radius Per Delta V | 1.5 | |
| Lateral Scale | 1.5 | |
| Crumple Ratio | 3.0 | |
| Drag Fraction | ||
| Noise Amount | ||
| Bulge | ||
| Bulge Down Share | ||
| Max Displacement | 60.0 | |
| Stiffness Zones | 0 Array element | |
凹陷设置描述金属如何弯曲,应首先调整的是 Stiffness、MaxDentPerHit 和 MaxDisplacement。请让 MaxDentPerHit 明显小于 MaxDisplacement,以便重复撞击仍能使凹陷加深。然后检查材质:它们的 Max World Position Offset Displacement 必须至少为 MaxDisplacement 加上褶皱幅度。材质与着色器解释了这一上限。
UCFProfile::StiffnessZones 是一组包围盒,位于根组件的空间中。每个区域都有自己的 Stiffness:值为 1 时与车身其余部分凹陷程度相同,值为 3 时凹陷深度只有其三分之一,值为 0.5 时则是两倍深。每个区域还有 EdgeWidth、MaxDepth(为零时取配置文件的 MaxDisplacement)以及 bMirrored 开关,开启后该区域也会沿车身中心线镜像生效。Name 仅供编辑器使用。区域通过 Zone Editor 设置,Crushform.ShowZones 1 会将其绘制出来。
UCFTireProfile
Section titled “UCFTireProfile”UCFTireProfile 设置某一类轮胎如何追踪地面并形变。主要设置如下:
| 属性 | 作用 | 默认值 |
|---|---|---|
UCFTireProfile::TraceChannel | 轮胎进行射线追踪所用的通道:地形、岩石和道路 | ECC_WorldStatic |
UCFTireProfile::NumArcSamples | 接触圆弧上的射线数量。奇数会保留一条垂直向下的射线 | 13 |
UCFTireProfile::NumLateralRows | 胎面上的横向行数。三行可覆盖两侧肩部和中央 | 3 |
UCFTireProfile::MaxDeflection | 最大视觉凹陷深度,单位厘米 | 14 |
UCFTireProfile::RestingDeflection | 静止轮胎被压扁的程度,以其半径的比例表示 | 0.05 |
UCFTireProfile::LoadSensitivity | 静止下沉量随车轮实时载荷增长的程度 | 1 |
UCFTireProfile::MaxLoadFactor | 下沉所能达到的载荷系数上限 | 2.5 |
UCFTireProfile::MergeAngleDeg | 距离相近的接触点只有在法线相差不超过此角度(度)时才合并为一个。取值过低时,大轮胎下的小圆形障碍物会占满四个接触点,导致地面失去自己的接触点 | 45 |
UCFTireProfile::MinObstacleRadius | 圆形障碍物曲率所按的最小半径(厘米)。更细的障碍物(如管道)会按此半径的粗细来塑造凹陷 | 3 |
UCFTireProfile::RimRadiusOverride | 轮辋半径(厘米)。0 时读取轮胎材质的 RimRadius 参数 | 0 |
UCFTireProfile::RubberMargin | 车轮被推离障碍物后,障碍物与轮辋之间保留的橡胶厚度(厘米) | 2 |
UCFTireProfile::MaxPush | 整个车轮被推离障碍物的最大距离(厘米)。超过此值,轮辋可能会嵌入障碍物 | 10 |
这三项轮辋设置,RimRadiusOverride、RubberMargin 和 MaxPush,只对其宿主接受推挤的车轮起作用;见 宿主接口。
没有配置文件的轮胎组件会让轮胎保持圆形。它只输出一行详细级别(Verbose)的日志,别无其他动作。对于带有适配器的车辆,当适配器的 TireProfile 为空时,使用项目默认值 DA_CF_DefaultTireProfile。决定哪些轮胎形变的预算在 Crushform Tire 中设置,而不在配置文件中。
UCFEngineSoundProfile
Section titled “UCFEngineSoundProfile”UCFEngineSoundProfile 保存发动机的循环音以及它们的播放方式:
- Layers:循环音,顺序不限。组件会按转速对它们排序,没有声音的层会被略去。
- Attenuation:必填。没有它,发动机声音将保持关闭。
- Coast Volume:无载荷时所听到的满音量比例。默认值为 0.6。
- Min Pitch 和 Max Pitch:循环音播放时的最低和最高音高,相对于其录制时的速度。默认值分别为 0.5 和 2。
- Starter Sound 和 Shutdown Sound:发动机启动转动时播放的启动循环音,以及运行中的发动机熄火时的声音。
若组件上没有配置文件,且也没有项目默认值,发动机将保持静音,日志中也会注明。
这些预设是插件内容。在 Content Browser 中打开 Settings 并勾选 Plugin Content,然后打开 Plugins › Crushform Content › Presets 文件夹,即 /Crushform/Presets。该文件夹包含四个资产:
| 资产 | 类 | 作用 |
|---|---|---|
/Crushform/Presets/DA_CF_DefaultProfile | UCFProfile | 未指定配置文件的车身所用的项目默认值 |
/Crushform/Presets/DA_CF_DefaultTireProfile | UCFTireProfile | 适配器上轮胎所用的项目默认值 |
/Crushform/Presets/DA_CF_GlassLaminated | UCFGlassDefinition | 夹层玻璃板 |
/Crushform/Presets/DA_CF_GlassTempered | UCFGlassDefinition | 钢化玻璃板 |
插件的轿车有自己的配置文件:/Crushform/Blueprints/Sedan/DA_CF_Profile_Sedan 和 /Crushform/Blueprints/Sedan/DA_CF_TireProfile_CitySample。在调节之前,请先将预设复制到你的项目中,这样插件更新就不会覆盖你的数值。
在插件中,“预设”还指另外三种东西,它们都不是配置文件。
- 区域预设是一组命名的区域数值,供 Zone Editor 使用。它们保存在 Project Settings > Crushform Zone Editor 下的
UCFEditorSettings::ZonePresets中。每个预设都有Name、Stiffness、MaxDepth和EdgeWidth。它们仅存在于编辑器中。 - 调试损伤预设在调试模式下为车身填充损伤:
Light给出三次轻微撞击,Medium六次,Heavy十次,Wreck十八次,接近合理上限。 - 调试污垢预设在调试模式下为车身填充混合污垢:
Dusty仅有灰尘,Muddy是泥浆,并附带其三分之一用量的灰尘,Snowy仅有积雪,Wet仅有湿润。
调试预设位于 CrushformDebug 模块中,不会改动你的项目。它们用于在调试面板中试用各个系统。
检查是否正常工作
Section titled “检查是否正常工作”- 在 Content Browser 中打开该配置文件,并检查其 Details 是否显示上述分组。
- 对该配置文件运行 Validate Assets。图集无法容纳的分辨率或无效的刚度区域会被报告为错误。
- 在非 Shipping 构建中,对已设置配置文件的车身运行
Crushform.Debug 1。其受损节点会显示车身凹陷的位置。
没有任何凹陷,且日志中没有警告
Section titled “没有任何凹陷,且日志中没有警告”原因。 组件没有配置文件。晶格不会被构建,对此情况也不会输出任何日志。
解决。 在游戏开始前,于类默认值或 C++ 中设置配置文件。对于带有适配器的车辆,设置 Deform Profile,或将其留空以使用 DA_CF_DefaultProfile。
日志提示分辨率被钳制
Section titled “日志提示分辨率被钳制”%s: profile %s resolution %s does not fit an atlas slot, clamped to %s原因。 该分辨率无法放入一个图集槽位,因此晶格被缩小。槽位最多容纳 ResX * ResZ 个节点,以及最多 ResY 行。
解决。 降低 Resolution,直到晶格能够放下,或在 Project Settings > Plugins > Crushform > Atlas 中增大槽位尺寸。Data Validation 会将同一问题报告为错误。
轮胎保持圆形
Section titled “轮胎保持圆形”原因。 轮胎组件没有轮胎配置文件。日志仅在详细级别输出此信息:
%s: no tyre profile is set, the vehicle's tyres stay round解决。 在轮胎组件上设置 UCFTireProfile,或在车辆适配器上设置 Tire Profile;为空时它会使用项目默认值。
原因。 组件上没有发动机声音配置文件,项目中也没有默认值。日志会说明:
%s: no engine sound profile here or in Project Settings > Plugins > Crushform Engine; the engine stays silent解决。 在组件上设置 UCFEngineSoundProfile,或在 Project Settings > Plugins > Crushform Engine 中设置默认值。该配置文件还需要一个 Attenuation 资产。