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

参考组件

UCFPropContactComponent

模块Crushform头文件CFPropContactComponent.h父类UActorComponent

让拥有者的刚体在其模拟所在的那一端破坏其穿过的可破坏单元。每帧它都会对单元的对象类型(CFBreakable::GetUnitObjectType)执行一次盒体重叠检测,在本地破坏该单元,不发生物理接触(单元忽略该刚体),施加已配置的速度变化,然后将破坏上报给服务器,由服务器校验并复制。该刚体即拥有者的根基元。拥有者,或在 UCFHostRegistry 中为其注册的宿主(车辆适配器会自行注册),可以实现 ICFBreakerHost,以指定另一个刚体、说明该刚体在哪一端模拟、让上报经由另一个 Actor 的组件发出,并让该刚体产生凹陷。若无宿主,则由权威端模拟该刚体,上报经由本组件发出,且该刚体永远不会产生凹陷。此外,它每个 tick 都会在每一端激活刚体周围的可破坏树木,因此对于由其他端模拟的车辆,树木永远不会成为运动学墙体。

函数

AUTHORITY · 服务器,每个端LOCAL · 本机PURE · 只读
bool IsReportPlausible(const FVector& ServerBodyLocation, float BodyRadiusCm, const FVector& UnitCenter, float UnitRadiusCm, float BodySpeedCmS)
C++ ONLY

从服务器所见的车身位置来看,客户端的破坏报告是否可信。长度单位为厘米,BodySpeedCmS 单位为厘米每秒。

FCFBreakImpact SanitizeReportedImpact(const FCFBreakImpact& Reported, const FBox& UnitBounds)
C++ ONLY

客户端所报告的撞击,经处理后可安全地发布给所有客户端:位置被限制在该单元自身的包围盒上,速度则上限为车身可声明的最大值。

void SetCrushformHost(UObject* NewHost)
C++ ONLY

由谁代为响应拥有者的 ICFBreakerHost;为 null 时取注册表中该拥有者的宿主,否则取拥有者本身。须在 BeginPlay 之前调用,之后的调用会被拒绝。宿主在组件首次被询问时绑定,而该询问可能早于 BeginPlay。

UObject* GetCrushformHost() const
PUREC++ ONLY

显式指定的宿主;否则为 UCFHostRegistry::FindHost(Owner, UCFBreakerHost);再否则为 null。

bool IsSimulatedHere() const
PUREC++ ONLY

本机是否负责移动拥有者的车身:由 ICFBreakerHost::IsBreakerSimulatedHere 决定,否则取决于权威端。

bool IsReportingActorOurs(const AActor* ReportingActor) const
PUREC++ ONLY

以 ReportingActor 名义提交的报告是否应由本组件接收:即拥有者本身,或宿主将其报告经由本组件转发的 Actor。

void ReportBreakToServer(AActor* ReportingActor, UCFBreakableInstancesComponent* Instances, int32 UnitIndex, const FCFBreakImpact& Impact)
C++ ONLY

通过本组件中由连接拥有的 Actor,将本机模拟的破坏发送至服务器。

属性

float MinContactSpeedCmS = 50.f
默认值
50.f
分类
Contact
float TreeArmMinSpeedCmS = 5.f
默认值
5.f
分类
Contact|Trees