参考组件
UCFHingeComponent
车身某部件的铰链:车门、引擎盖、尾门、保险杠。其位置为铰链销轴,Z 轴为销轴方向;但若设有 Mounts,则部件悬挂在其中一个安装点上,即碰撞后仍完好的那一个(例如末端仍被螺栓固定的保险杠)。该部件就是直接附着在其下的那个静态网格体;与该部件相连的其他物件(玻璃、把手)则挂在该部件之下。
UCFDeformComponent 根据部件周围及其销轴处的凹陷,决定它何时开始摆动以及何时脱落;铰链在其所运行的那一端执行该决定。仅限本机:铰链的任何内容都不会复制。
函数
查找部件(FindPart)并记录其所在位置。没有部件或部件多于一个时返回 false,并给出警告。
直接挂在铰链下方的唯一静态网格体;没有或多于一个时为 null。InitPart 会取用它。
Mounts.Num();没有安装点时为 1,即铰链本身。
以世界空间表示的销 PinIndex:安装点相对于铰链的变换,或铰链自身的变换。销的轴线为其 Z 轴。索引超出范围时读取销 0。
销 PinIndex 的行程,单位为度:安装点的 Open Angle,或铰链的 Open Angle。索引超出范围时读取销 0。
部件摆动所绕的销:即 StartSwinging 所传入的那个;附着时为 0。
自 StartSwinging 以来摆动转向的总和,单位为度,只计入快于 CFHinge::ShakeMinSpeed 的转向。
通过关节将部件挂到拥有者的车身上,绕销 PinIndex 旋转(GetNumPins;超出范围的索引即销 0)。bBreakable:一旦经 SetBreakable 激活,关节便会在 Break Force 或 Break Torque 作用下撕裂(OnTorn);只有决定脱落的那一端才会请求此项。若部件未附着、拥有者没有参与模拟的物理刚体,或部件原位置被其他物体占据(IsPartBlocked),则返回 false。
此后,摆动部件的关节将在 Break Force 或 Break Torque 作用下撕裂,或者不再撕裂。关节承受的任一载荷都不超过 UCFSettings::ArmLoadShare 的比例,并持续 CFHinge::ArmQuietTime 时长后,关节即被激活(在此之前处于 IsJointArmPending 状态)。除非部件通过关节摆动,否则此设置无效。
告知铰链本机是否为其拥有者的撞击源(即模拟车身的那一端);形变组件每个 tick 都会传递此信息(UCFDeformComponent::SyncHingeBreakable)。只有在撞击源上,摆动部件才会获得 Bump Response 的推动:在回放车身的端上,其网络修正会被感知为颠簸。在被告知之前为 false。
让部件掉落,并开始计算它的存活时间。仅作用于本机。bHideAtOnce 则改为将其隐藏:它在本机看到车身之前就已脱落。仍在原位的部件会保持在那里,处于脱落状态,只要有另一辆车靠近该位置,或有东西位于其中(IsPartCrowded),或直到它的切割落地(SetAwaitingCut),待这些都消除后再掉落。
将部件放回蓝图放置它的位置:无关节、无物理、无碰撞,且可见。
部件相对于蓝图放置位置、绕当前激活销的角度,单位为度;打开过程中其符号与该销的 Open Angle 相同。
部件闭合位置处是否有拥有者之外的物体:例如仍压在其造成的凹陷上的车辆,或墙壁。若在该处为部件生成刚体,该刚体会被推挤着穿出拥有者自身的刚体(关节使两者不会接触),并在部件脱落后被甩出;因此部件改为保持静止。
拥有者之外的车辆是否位于部件闭合位置的 UCFSettings::TornPartHoldMargin 范围内,或正以足够快的速度接近,并会在 TornPartHoldLookahead 内到达该位置,或该位置有物体(IsPartBlocked):即仍在驶入、刚把部件扯掉的那辆车。若此时松开部件,它会在两个对其而言质量无穷大的刚体之间脱开(单向,LoosenPart),被弹飞或卡进自身车身中。
已脱落的部件是否仍在其闭合位置等待掉落(Detach):等待车身碰撞体从该位置切出(SetAwaitingCut),或在有车辆靠近它时(IsPartCrowded)。
让已脱落的部件留在其闭合位置,直到它的切割落地:车身碰撞体先把该位置从车身中切出,因此部件绝不会掉进它原本所属的车身里。False 让它掉落,除非有车辆靠近该位置(IsPartCrowded),否则立即掉落。
部件是否等待它的切割落地(SetAwaitingCut)。
让摆动中的部件在它的切割落地后脱落:在此之前它继续在关节上摆动,期间被扯断的关节不会被放回。只有正在摆动的部件才会接受;该部件随后在切割落地时从关节上掉落。
摆动中的部件是否在它的切割落地之前保留其关节(BeginDetachAfterCut)。
部件所处的生命周期阶段:附着、通过关节摆动,或已脱落。
- 分类
- Crushform|Hinge
该铰链所移动的静态网格体;在 InitPart 找到它之前为 null。
- 分类
- Crushform|Hinge
摆动部件所挂靠的物理约束;除非部件正在摆动,否则为 null。
部件在当前拥有者车身上读取到的姿态,并被映射到车身上(CFDeform::GetBodyRootTransform):骨骼根节点只在其自身的 EndPhysics tick 中跟随其刚体,在物理命中中则会落后一帧的位移,凹陷正是在此时使部件摆动并脱落。已附着时,取自根节点所持有的组件。刚放置时,取自 PlacedOnBody:在命中中,物理引擎刚把组件移动到车身上次设定的姿态,并领先一步,而 RideUnread 只在物理计算之后才将其拉回。若部件已跟随其自身的刚体,则取其组件自身的姿态。
GetPartReadPose 所跟随运动的刚体:拥有者的刚体;若部件已跟随其自身的刚体,则为部件自身的刚体;两者都没有的部件,为 null。
关节当前是否已激活,可以撕裂。没有关节时为 false;在 SetBreakable 请求的激活等待载荷下降期间,同样为 false。
关节是否已被请求激活并处于等待中:它尚未在足够长的时间内承受足够小的载荷(SetBreakable)。
本机是否为拥有者的撞击源,取最近一次被告知的结果(SetImpactSourceHere)。
属性
从蓝图放置部件的位置(闭合)到完全打开的行程,单位为度,绕铰链的 Z 轴。其符号决定部件向哪一侧打开。使用 Mounts 时,采用每个安装点自身的 Open Angle;此项仅作为 Add Mount 的初始值。
- 默认值
- 70.0f
- 分类
- Hinge
部件在摆动或处于松脱状态时的质量,单位 kg。
- 默认值
- 20.0f
- 分类
- Hinge
覆盖该部件的配置文件中的 Dented Part Collision 设置。
- 默认值
- false
- 分类
- Hinge
部件松脱后,是否以其凹陷碰撞体中的一个凸包进行碰撞,以代替配置文件中的 Dented Part Collision。关闭时,部件保留静态网格体资产中原有的简单碰撞,不做凹陷处理,这正是保险杠等凹形部件所需要的。在开始游玩时读取:对正在运行的车辆所做的更改,要等其再次生成后才会生效。
- 默认值
- false
- 分类
- Hinge
部件周围最深的凹陷深度(cm),达到此深度时部件开始摆动。应保持低于 Detach Pin Threshold,且不超过 Detach Mean Threshold。
- 默认值
- 8.0f
- 分类
- Hinge
使部件脱落的部件平均凹陷深度(cm):即部件作为整体被压坏,而非某个角落的单个深凹陷。达到 Detach Pin Threshold 同样会使其脱落。
- 默认值
- 20.0f
- 分类
- Hinge
在销的 Pin Radius 范围内最深的凹陷深度(cm),会使部件脱落:即固定部件的结构被压坏。达到 Detach Mean Threshold 同样会使其脱落。两者中较小的值应保持低于配置文件中的 Max Displacement,并低于部件周围刚度区域的 Max Depth,否则凹陷永远无法使部件脱落(组件会输出警告)。
- 默认值
- 30.0f
- 分类
- Hinge
凹陷距离销多远(cm)时,才算作销处的凹陷。
- 默认值
- 40.0f
- 分类
- Hinge
作用在销上、会撕脱摆动部件的力,单位 N:例如车辆撞上敞开的车门。为 0 时永不撕脱。默认值为实测值的两倍:在 4600 N 的力下,质量 1500 kg、以 1 m/s 速度撞击的车身仍会让测试车门保持附着,而以 20 km/h 的速度撞击则会将其撕下;部件的调校使其能承受比这更大的力。仅在决定脱落的端上生效(驾驶者的端,或无人驾驶车身的服务器);在其他端上,关节保持不变,部件则通过每位玩家都会收到的脱落过程而脱落。
- 默认值
- 9200.0f
- 分类
- Hinge
作用在销上、会撕脱摆动部件的力矩,单位 N*m;为 0 时永不撕脱。同 Break Force:为实测 2600 N*m 的两倍。
- 默认值
- 5200.0f
- 分类
- Hinge
部件松脱后可挂靠的点,位于铰链空间中:例如保险杠的两端。部件开始摆动时,会挂靠在周围凹陷最少的安装点上(相同时取第一个),并绕该安装点的 Z 轴摆动;在其未挂靠的安装点上产生的凹陷,永远不会使其脱落。为空时,部件绕铰链自身的 Z 轴,按 Open Angle 摆动。
- 分类
- Hinge
覆盖项目中该部件的 Swing Damping 设置。
- 默认值
- false
- 分类
- Hinge
该部件摆动的阻尼,代替项目的 Swing Damping 设置(Project Settings > Plugins > Crushform)。
- 默认值
- 1.0f
- 分类
- Hinge
覆盖项目中该部件的 Swing Spring 设置。
- 默认值
- false
- 分类
- Hinge
将该部件拉回闭合位置的弹簧,代替项目的 Swing Spring 设置(Project Settings > Plugins > Crushform)。挂靠在单个安装点上的保险杠不需要此弹簧。
- 默认值
- 0.0f
- 分类
- Hinge
覆盖项目中该部件的 Stop Bounce 设置。
- 默认值
- false
- 分类
- Hinge
该部件在行程两端的回弹,代替项目的 Stop Bounce 设置(Project Settings > Plugins > Crushform)。
- 默认值
- 0.0f
- 分类
- Hinge
覆盖项目中该部件的 Bump Response 设置。
- 默认值
- false
- 分类
- Hinge
该部件从其车身颠簸中获得的额外推力,代替项目的 Bump Response 设置(Project Settings > Plugins > Crushform)。
- 默认值
- 0.0f
- 分类
- Hinge
部件总共需要摆动的角度(度),才会被甩落:例如挂靠在单个安装点上的保险杠,在颠簸路面上会掉落。从开始摆动时计算,因此部件自身的打开以及随后的摆动也计入其中:应远高于其销的 Open Angle(两到三倍),否则部件在平滑路面上只要摆动满稳定时间,就会脱落。仅在稳定时间之后才会生效;转向过慢、不构成抖动的情况(即静止时部件的颤动)不计入。0:永不因抖动而甩落。
- 默认值
- 0.0f
- 分类
- Hinge
事件
在摆动部件的关节撕裂之后的下一个 tick 触发。UCFDeformComponent 会为所有人使该部件脱落。
在摆动部件被观察到撞上行程末端的那个 tick 触发:即关节的止动件,位于部件与其自身车身相接的闭合端(关节使二者不会接触,因此不会有接触事件报告它)。仅作用于本机:在运行该铰链物理的每一端上都会根据其各自的摆动而触发,且其中任何内容都不会被复制。
面向蓝图的 OnStopHit,同一次撞击,在世界的下一个计时器 tick 时发出(见 On Started Swinging)。
- 分类
- Crushform|Hinge
部件松脱,开始在铰链上摆动。在每台运行铰链物理的端上触发(即每台会绘制画面的端,专用服务器除外),依据该端自身看到的情况,任何内容都不复制。被直接压碎并从原位脱落的部件,不经摆动就直接脱落。与 On Damage Changed 相同,在世界的下一个计时器 tick 时发出,而不在改变部件的调用内发出:处理函数可能会修复或摧毁车辆。Get State 读取的是当前状态,之后的改动可能已经变化。
- 分类
- Crushform|Hinge
部件从车身上脱落,每个部件在修复前只触发一次。位置、来源和时机同 On Started Swinging。bHiddenAtOnce:该端第一次看到这辆车时,部件已经脱落(中途加入的玩家,或正在复制到本端的车辆),因此直接隐藏,而不是看到它下落:更新游戏中的显示即可,不播放特效。这一事件会在车辆 BeginPlay 之后的第一个计时器 tick 时发出,因此 Event BeginPlay 可以绑定它。
- 分类
- Crushform|Hinge
正在摆动或已脱落的部件回到蓝图放置的位置:修复,或摆动的关节在不再决定脱落的端上断开(部件对所有玩家都保持在位)。位置、来源和时机同 On Started Swinging。
- 分类
- Crushform|Hinge