Skip to content

约束

在物理引擎中,约束 用于模拟物体间的连接情况,如连杆、绳子、弹簧或者布娃娃等。

约束依赖 刚体组件,若节点无刚体组件,则添加约束时,引擎会自动添加刚体组件。

注意:目前的约束仅在物理引擎选择为 Bullet、PhysX 或 Cannon.js 的情况下生效。

铰链约束 HingeConstraint

通过铰链约束,将连接物体的运动约束在某一个轴上,这种约束在模拟门的合页或电机转动等情形下非常有用。

铰链约束

属性说明
AttachedBody关节所附着的刚体,即当前关节所在节点下的刚体组件
ConnectedBody获取或设置关节连接的另一个刚体,为空值时表示链接到静态刚体
EnableCollision获取或设置关节连接的两刚体之间是否开启碰撞
PivotA在自身刚体的本地空间中,约束关节的相对位置
PivotB在连接刚体的本地空间中,约束关节的相对位置
Axis在本地空间中约束关节的旋转轴

physics-hinge

铰链约束接口请参考 HingeConstraint API

点对点约束 PointToPointConstraint

点对点约束是一种简单的复合约束,可以将两个对象,或者一个对象与坐标系中一点连接。连接的对象可以在共用一个连接点的情况下,相对对方自由旋转。

点对点约束

属性说明
AttachedBody关节所附着的刚体,即当前关节所在节点下的刚体组件
ConnectedBody获取或设置关节连接的另一个刚体,为空值时表示链接到静态刚体
EnableCollision获取或设置关节连接的两刚体之间是否开启碰撞
PivotA在自身刚体的本地空间中,约束关节的相对位置
PivotB在连接刚体的本地空间中,约束关节的相对位置

physics-p2p

点对点约束接口请参考 PointToPointConstraint API

固定约束 FixedConstraint

固定约束是一种最简单的约束,它锁定了两个刚体之间的相对位置和旋转。连接的对象不允许相对于彼此移动。

固定约束

属性说明
AttachedBody关节所附着的刚体,即当前关节所在节点下的刚体组件
ConnectedBody获取或设置关节连接的另一个刚体,为空值时表示链接到静态刚体
EnableCollision获取或设置关节连接的两刚体之间是否开启碰撞
BreakForce获取或设置约束在断开之前可以施加的最大力
BreakTorque获取或设置约束在断开之前可以施加的最大扭矩

physics-fixed

固定约束接口请参考 FixedConstraint API

可配置约束 Configurable constraint

可配置约束是物理引擎中最全面的约束之一,包括各种游戏引擎中常用的约束类型。通过配置,可以对6个自由度分别进行控制,并通过设置不同方向上的约束参数实现几乎所有物理引擎中常用的特殊约束。不同自由度可以有不同的约束模式,如free、limited 和 locked。其中,free 表示不做任何约束,limit 表示限制刚体的运动范围和过程,而 locked 表示限制连接的刚体必须相对静止。例如,将所有6个自由度的约束模式设置为 locked 时,相当于使用 fixed 约束限制刚体。在 limit 模式下,可以对刚体的运动进行一定程度的限制,如限制该自由度在某个区间内运动。对于 limit 模式下的刚体,在运动到被限制范围的边界时,会发生回弹。此时,可以通过设置不同的回弹系数来调节回弹的力度,并通过调节软约束的参数实现约束的弹性,给运动施加一定量的阻力等。

由可配置约束连接的刚体可以通过马达驱动产生期望的相对运动。启用马达后,刚体将向指定的相对位置运动或逐渐加速到指定的相对速度并保持运动。马达有两种不同的模式,伺服模式和普通模式。在伺服模式下,驱动器将使刚体向指定的位置或角度运动,并在到达目标位置或角度后停止。在普通模式下,驱动器将使刚体逐渐加速,达到指定的线速度或角速度,然后保持该速度运动。另一个可以调节的参数是驱动器的最大驱动力,该参数决定刚体能够以怎样的速度加速趋向指定的目标位置和速度。当最大驱动力很大时,外界的干扰将很难改变刚体之间的相对运动状态。

physics-configurable-main

属性描述
Attached Body关节所附着的刚体,即当前关节所在节点下的刚体组件
Connected Body获取或设置关节连接的另一个刚体,为空值时表示链接到静态刚体
Enable Collision获取或设置关节连接的两刚体之间是否开启碰撞
Axis获取或设置约束的主轴向
Secondary Axis获取或设置约束的次要轴向(与主轴正交)
Pivot A在自身刚体的本地空间中,约束关节的相对位置
Pivot B在连接刚体的本地空间中,约束关节的相对位置
Auto Pivot B从 PivotA 和两个刚体的相对位置自动推导 PivotB
Break Force获取或设置约束断裂前可以施加的最大力
Break Torque获取或设置约束断裂前可以施加的最大扭矩
Linear Limit Settings获取或设置线性限制设置
Angular Limit Settings获取或设置角度限制设置
Linear Driver Settings获取或设置线性马达设置
Angular Driver Settings获取或设置角度马达设置

示例:当设置约束体主轴朝向为依附刚体的 y 轴,次轴为依附刚体的 x 轴时,约束体各个轴的朝向如下图所示。

附着刚体轴向约束体线性轴向约束体旋转轴轴向
configurable-constraint-axis-configconstraint-coordinateconstraint-angular-coordinate

线性限制 LinearLimitSettings

physics-configurable-linear-limit

属性描述
XMotion获取或设置 x 轴的约束模式
YMotion获取或设置 y 轴的约束模式
ZMotion获取或设置 z 轴的约束模式
Upper获取或设置线性限制的上限
Lower获取或设置线性限制的下限
Restitution获取或设置约束的恢复系数
Enable Soft Constraint获取或设置是否启用软约束
Damping获取或设置约束的阻尼系数
Stiffness获取或设置约束的硬度系数

角度限制 AngularLimitSettings

physics-configurable-angular-limit

属性描述
Twist Motion获取或设置扭转轴的约束模式
Swing Motion1获取或设置摆动 y 轴的约束模式
Swing Motion2获取或设置摆动 z 轴的约束模式
Twist Extent获取或设置扭转轴的角度限制
Swing Extent1获取或设置摆动 y 轴的角度限制
Swing Extent2获取或设置摆动 z 轴的角度限制
Twist Restitution获取或设置扭转约束的恢复系数
Swing Restitution获取或设置摆动约束的恢复系数
Enable Soft Constraint Twist获取或设置是否启用扭转约束的软约束
Twist Damping获取或设置扭转约束的阻尼系数
Twist Stiffness获取或设置扭转约束的刚度系数
Enable Soft Constraint Swing获取或设置是否启用摆动约束的软约束
Swing Damping获取或设置摆动约束的阻尼系数
Swing Stiffness获取或设置摆动约束的硬度系数

线性马达 LinearDriverSettings

physics-configurable-linear-driver

属性描述
XDrive获取或设置沿 x 轴的驱动模式
YDrive获取或设置沿 y 轴的驱动模式
ZDrive获取或设置沿 z 轴的驱动模式
Target Orientation获取或设置目标位置
Target Velocity获取或设置目标速度
Strength获取或设置最大驱动力

驱动模式请参考下文。

角度马达 AngularDriverSettings

physics-configurable-angular-driver

属性描述
Twist Drive获取或设置沿扭转轴的驱动模式
Swing Drive1获取或设置沿摆动 y 轴的驱动模式
Swing Drive2获取或设置沿摆动 z 轴的驱动模式
Target Orientation获取或设置目标角度
Target Velocity获取或设置目标角速度
Strength获取或设置最大驱动力

驱动模式请参考下文。

驱动模式

线性马达和角度马达都可以分轴调整他的驱动模式,驱动模式有 3 种:

  • DISABLED:禁用模式,该模式下,对应的分轴不会受到马达驱动力或者扭矩的影响
  • SERVO:尝试移动/旋转到指定的位置/角度。
    • 线性马达: X,Y,Z 的 Drive 属性分别和 Target Position 的三个参数对应

      servo.png

      以上图举例, XDriveSERVOTarget Position 的 X 分量为 10,则表示约束将尝试移动到 10。

    • 角度马达:Twist Drive,Swig Drive1,Swig Drive2 分别和 Target Orientation 的三个参数对应

  • INDUCTION:驱动约束到指定的速度/角速度
    • 线性马达: X,Y,Z 的 Drive 属性分别和 Target Velocity 的三个参数对应

      induction.png

      以上图为例,XDriveINDUCTIONTarget Velocity 的 X 分量为 10,则表示约束将尝试将其速度移动到 10.

    • 角度马达:Twist Drive,Swig Drive1,Swig Drive2 分别和 Target Velocity 的三个参数对应

有关可配置约束接口,请参阅 ConfigurableConstraint API