参考组件
UCFBreakableInstancesComponent
基于 Crushform 单元核心的可破坏单元,由拥有者布置:用于显示它们的 ISM 实例、它们所处的布局、服务器端重生,以及对于要求此功能的定义,由任意刚体引发的破坏。组件不关心拥有者沿什么布置它们。拥有者布置单元,并在每一端上以完全相同的数据交给 SetUnits;单元的索引即其身份,在拥有者的整个生命周期内始终不变。传给 SetInstanceSlots 的 ISMs 必须以单位变换附着于此组件:FindForPrimitive 会从被重叠的 ISM 沿附着父级向上查找。单元有两个等级,完好(0)和已破坏(1);基础组件负责复制、预测并播放它们。
任意刚体:仅在权威端,若单元的定义设置了 bBreaksFromAnyBody,则会被自身没有接触组件的物理刚体或行走中的 Pawn 破坏(CFBreakable::IsContactBody)。循环计时器(UCFBreakableSettings::AnyBodyCheckIntervalSeconds)每次在仍立着的已标记单元周围的包围盒中查找一次刚体;当其中某个刚体足够重且足够快时,组件会在物理之后开始 tick,并将每个此类刚体在该帧内的运动路径与单元的边界进行测试;若某一帧没有此类刚体,则关闭 tick。若没有已标记的定义、在客户端上,以及在非游戏世界中,组件不持有计时器,也从不 tick。
函数
拥有 Primitive 实例的实例组件,若无则为 nullptr。
每个定义槽位对应一个 ISM(FCFBreakableUnit::DefinitionIndex 同时索引这两个数组);设置每个 ISM 的网格体。
替换单元列表,并显示复制状态中未标记为已破坏的每个单元。
权威端的视图,即复制后的状态。
单元完好网格体的世界包围盒。
此组件的 ISMs 之一上的重叠结果所指向的单元;若不属于本组件,则为 INDEX_NONE。
立即在本端破坏该单元(将其隐藏、抛散碎片、播放反馈),并等待权威端确认;未确认的破坏将在 PredictionConfirmTimeoutSeconds 之后撤销。若此处已破坏,则返回 false。该单元中仍完好的 FCFBreakableUnit::LinkedUnits 会随之破坏,且各自作为独立的破坏处理。
仅限权威端:记录并复制该破坏,并安排重生。对已破坏的单元不执行任何操作。该单元中仍完好的 FCFBreakableUnit::LinkedUnits 会随之破坏,且各自作为独立的破坏处理。
权威端:无论 CanRespawnUnit 返回什么,所有已破坏的单元都会立即全部重生。返回重生的数量。
任意刚体检查是否已就绪:该组件位于游戏世界的权威端,并且有某个单元的定义可被任意刚体破坏。
组件当前是否执行 tick。只有在上一次检查发现有刚体能够破坏单元时,它才会执行 tick。
函数
- Find
Units Primitive 所属单元的单元组件,以及该单元的索引:先通过基元上的 ICFBreakableUnitPart 查找,否则取第一个认识该基元的附着父级。若都找不到,则返回 nullptr。For Primitive - Apply
Hit 权威端:将作用于某基元的外部命中应用到其所属的单元。Result On Authority - Predict
Hit 任一端:ApplyHitResultOnAuthority 的预测对应函数。Result - Apply
Hit 权威端:将单元提升到其定义为此次命中给出的等级(HitResponses),复制该结果并播放。On Authority - Predict
Hit 任一端:立即显示此次命中的等级,并等待权威端确认;在 PredictionConfirmTimeoutSeconds 之后撤销。 - Get
Unit 拥有者布置的单元数量。Count - Get
Max 单元可达到的最高等级,即传给 InitUnits 的值;单元在等级 0 时完好。Level - Get
Unit 本端显示的等级:权威端的等级,或领先于权威端的预测等级。Level - Get
Confirmed 权威端在当前世代中确认的等级。Unit Level - Is
Unit 对于有效索引且显示等级为 0 的情况返回 true;对于无效索引返回 false。Intact - Predict
Unit 立即显示 StoredImpact 的等级(领先于权威端),同时显示 GatherUnitsRaisedWith 添加的单元。Level - Raise
Unit 权威端:为该单元及 GatherUnitsRaisedWith 添加的单元确认 Level,复制该结果,在此端播放,并通知 OnUnitsRaisedOnAuthority。Level On Authority - Cancel
Prediction 将单元的预测回滚到已确认的等级,同时回滚 GatherUnitsRaisedWith 添加的单元的预测。 - Apply
Generation 任一端:本组件学到的第一个世代(无论来自本端还是复制的等级)都会被接受,无论其值为何;此后,更新的世代会立即将本端所有单元恢复为完好状态,相同或更旧的世代则被忽略。 - Find
Unit 基元(及其实例,即 ItemIndex)所代表的单元;若无则为 INDEX_NONE。For Primitive
事件
- On
Unit 每当单元的显示等级发生变化时,两者都会在每一端触发。Level Changed Native - On
Unit Level Changed