刚体组件

刚体是组成物理世界的基本对象,可以让一个节点受到物理影响并产生反应。

刚体组件用于控制模拟相关的部分属性:

刚体

点击 属性检查器 下方的 添加组件 -> Physics -> RigidBody,即可添加刚体组件到节点上。

刚体属性

属性功能说明
Type刚体类型,目前包括 DYNAMICSTATICKINEMATIC,详情可查看下方介绍。
Mass刚体的质量
AllowSleep是否允许刚体进入休眠状态
Linear Damping线性阻尼,用于减小刚体的线性速率,值越大物体移动越慢
Angular Damping角阻尼,用于减小刚体的旋转速率,值越大刚体旋转越慢
Use Gravity如果开启,刚体会受到重力影响
Linear Factor线性因子,可影响刚体在每个轴向的线性速度变化,值越大刚体移动越快
Angular Factor旋转因子,可影响刚体在每个轴向的旋转速度变化,值越大刚体旋转越快

刚体的 API 接口请参考 Class RigidBody

获取刚体组件

  1. // TypeScript
  2. const rigidBody = this.getComponent(RigidBody);

刚体类型

目前刚体类型包括 STATICDYNAMICKINEMATIC 三种。

  • STATIC,表示静态刚体,可用于描述静止的建筑物,若物体需要持续运动,应设置为 KINEMATIC 类型;
  • DYNAMIC,表示动力学刚体,能够受到力的作用,请通过物理规律来运动物体,并且请保证质量大于 0;
  • KINEMATIC,表示运动学刚体,通常用于表达电梯这类平台运动的物体,请通过 Transfrom 控制物体运动;

刚体质心

目前质心固定在刚体组件绑定的节点上,质心和碰撞体是相对关系。通过调整形状的偏移 center,可以使质心在形状上进行偏移。

质心

:为了使碰撞体更贴合模型,未来会增加改变质心的方法,以及动态计算质心的机制。

休眠和唤醒

休眠刚体

休眠刚体时,会将刚体所有的力和速度清空,使刚体停下来。

  1. // 休眠
  2. if (rigidBody.isAwake) {
  3. rigidBody.sleep();
  4. }

唤醒刚体

  1. // 唤醒
  2. if (rigidBody.isSleeping) {
  3. rigidBody.wakeUp();
  4. }

让刚体运动起来

针对不同的类型,让刚体运动的方式不同:

对于静态刚体,应当尽可能保持物体静止,但仍然可以通过 Transform 来改变物体的位置。 对于运动学刚体,应当通过改变 Transform 使其运动。 对于动力学刚体,需要改变其速度,有以下几种方式:

通过重力

刚体组件提供了 useGravity 属性,将 useGravity 属性设置为 true

通过施加力

刚体组件提供了 applyForce 接口,签名为:

applyForce (force: Vec3, relativePoint?: Vec3)

根据牛顿第二定律,可对刚体某点上施加力来改变物体的原有状态。

  1. rigidBody.applyForce(new Vec3(200, 0, 0));

通过扭矩

力与冲量也可以只对旋转轴产生影响,使刚体发生转动,这样的力叫做扭矩。

刚体组件提供了 applyTorque 接口,签名为:

applyTorque (torque: Vec3)

通过此接口可以施加扭矩到刚体上,因为只影响旋转轴,所以不需要指定作用点。

通过施加冲量

刚体组件提供了 applyImpulse 接口,签名为:

applyImpulse (impulse: Vec3, relativePoint?: Vec3)

根据动量守恒,对刚体某点施加冲量,由于物体质量恒定,从而使刚体改变原有状态。

  1. rigidBody.applyImpulse(new Vec3(5, 0, 0));

通过改变速度

  • 线性速度

    刚体组件提供了 setLinearVelocity 接口,可用于改变线性速度,签名为:

    setLinearVelocity (value: Vec3)

    示例:

    1. rigidBody.setLinearVelocity(new Vec3(5, 0, 0));

    刚体组件提供了 setAngularVelocity 接口,可用于改变旋转速度,签名为:

    setAngularVelocity (value: Vec3)

    示例:

    1. rigidBody.setAngularVelocity(new Vec3(5, 0, 0));

限制刚体的运动

通过休眠

休眠刚体时,会将刚体所有的力和速度清空,使刚体停下来。

通过阻尼

刚体组件提供了 linearDampingangularDamping 属性:

  • linearDamping 属性用于设置线性阻尼。

  • angularDamping 属性用于设置旋转阻尼。

阻尼参数的范围建议在 01 之间,0 意味着没有阻尼,1 意味着满阻尼。

:执行部分接口,例如施加力或冲量、改变速度、分组和掩码会尝试唤醒刚体。

通过因子

刚体组件提供了 linearFactorangularFactor 属性:

  • linearFactor 属性用于设置线性因子。
  • angularFactor 属性用于设置旋转因子。

因子是 Vec3 的类型,相应分量的数值用于缩放相应轴向的速度变化,默认值都为 1,表示缩放为 1 倍,即无缩放。

注意

  1. 将因子某分量值设置为0,可以固定某个轴向的移动或旋转。
  2. cannonammo 后端中,因子作用的物理量不同,cannon 中作用于速度,ammo 中作用于力。