一个 组件 是通过刚性 WeldConstraint 焊接在一起的一个或多个 部件,或者通过可动关节连接,如 Motor6Ds。你可以将一个部件的组件组合在一个 模型 容器中,以快速将部件和相关对象组织为一个整体资产。



从物理角度来看,组件被视为一个单一的 刚体,这意味着没有力可以将连接的部件相互推拉,它们将作为一个单元移动。施加到特定 BasePart 的所有力都会施加到其组件上——例如,BasePart:ApplyImpulse() 在 BasePart.AssemblyCenterOfMass 处对组件施加冲击。
组件属性
以下 BasePart 属性显示有关其组件的数据。它们的值对于同一组件中的任何部件都是相同的,因此使用哪个部件并不重要。
| 属性 | 描述 |
|---|---|
| BasePart.AssemblyLinearVelocity | 部件组件的线性速度向量。直接设置速度可能导致不现实的运动,因此优先使用 VectorForce 或 LinearVelocity 约束,或者使用 BasePart:ApplyImpulse() 来瞬时改变线性速度。 |
| BasePart.AssemblyAngularVelocity | 部件组件的角速度向量。直接设置速度可能导致不现实的运动,因此优先使用 Torque 或 AngularVelocity 约束,或者使用 BasePart:ApplyAngularImpulse() 来瞬时改变角速度。 |
| BasePart.AssemblyCenterOfMass | 通过组件中所有部件的质量和位置计算的只读位置。施加到质心的力不会导致角加速度,仅导致线加速度。 |
| BasePart.AssemblyMass | 组件中所有部件的 BasePart.Mass 之和。如果组件中有一个锚定的部件,则组件的质量被视为无限。 |
| BasePart.AssemblyRootPart | 自动选择用于表示组件的 根部件 的部件。 |
组件根部件
每个组件都有一个由其 AssemblyRootPart 属性指示的 根部件。这是在 Motor6D 转换更新时不会移动的部件,也是用于保持一致的物理复制和网络所有权的部件。
你不能显式设置根部件,但以下因素按优先级从高到低影响概率:

Anchored 的部件将始终被指定为根部件。

将 Massless 设置为 false(默认)的部件具有优先权。

更高的 RootPriority 值具有优先权。

基于部件的大小(最大面积极大),特定部件类型有乘数。Seats 和 VehicleSeats 具有最高的乘数,其次是名为 HumanoidRootPart 的部件,然后是名为 Torso 的部件。
锚定行为
当组件的某个部件被锚定时,该部件将成为根部件,所有其他部件将与其隐式锚定。以下序列说明了这种行为。
下面四个部件通过 WeldConstraints(绿色条)焊接在一起,形成一个单一组件,如匹配的彩色轮廓所示。

四个部件焊接在一起形成一个单一组件 如果组件中仅有 一个 部件被锚定,组件将不会改变,根部件可能更换(锚定部件始终具有成为根部件的最高 优先权)。

锚定部件(如锚定图标所示)成为新的根部件 如果多个部件被锚定,组件将 分裂。下面,左侧和顶部的部件都被锚定,因此原始组件分裂成两个组件,如彩色轮廓所示。此外,两个组件之间的 WeldConstraint 被禁用,因为不能在两个锚定的组件之间有活动的焊接。

两个组件,锚定部件作为相应的根部件