3.7.3 刚体组件

优质
小牛编辑
136浏览
2023-12-01

刚体是组成物理世界的基本对象,可以让一个节点受到物理影响并产生反应。该组件在使用 Builtin 物理引擎时无效。

刚体组件

点击 属性检查器 下方的 添加组件 -> 物理组件 -> Rigid Body 3D,即可添加刚体组件到节点上。

刚体属性

属性功能说明
Mass刚体的质量
Linear Damping线性阻尼,用于减小刚体的线性速率,值越大物体移动越慢
Angular Damping角阻尼,用于减小刚体的旋转速率,值越大刚体旋转越慢
Is Kinematic是否由开发者来控制刚体的位移和旋转,而不是受物理引擎的影响
Use Gravity如果开启,刚体会受到重力影响
Fixed Rotation如果开启,发生碰撞时会固定刚体不产生旋转
Linear Factor线性因子,可影响刚体在每个轴向的线性速度变化,值越大刚体移动越快
Angular Factor旋转因子,可影响刚体在每个轴向的旋转速度变化,值越大刚体旋转越快

刚体的 API 接口请参考 RigidBody3D

刚体运动

要使刚体运动有以下几种方式:

  • 通过重力

    设置 useGravity 属性为 true

  • 通过力

    根据牛顿第二定律 F = m * a,对刚体的某个点施加力会产生加速度,随着时间的变化就会慢慢改变物体的速度。

    rigidBody.applyForce(cc.v3(200, 0, 0));
    
  • 通过冲量

    根据动量守恒方程式 F * Δt = m * Δv,对刚体的某个点施加冲量,速度就会产生变化。

    rigidBody.applyImpulse(cc.v3(5, 0, 0));
    
  • 通过扭矩

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

    rigidBody.applyTorque(cc.v3(200, 0, 0));
    
  • 通过改变速度

    使用 setLinearVelocity 接口改变线性速度。
    使用 setAngularVelocity 接口改变旋转速度。

    // 改变线性速度
    rigidBody.setLinearVelocity(cc.v3(5, 0, 0));
    
    // 改变旋转速度
    rigidBody.setAngularVelocity(cc.v3(5, 0, 0));
    
  • 通过恒力组件

    详情请参考 恒力组件

休眠和唤醒刚体

休眠刚体

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

// 休眠
if (rigidBody.isAwake) {
    rigidBody.sleep();
}

注意:目前施加力、冲量以及改变速度会重新唤醒刚体。

唤醒刚体

// 唤醒
if (rigidBody.isSleeping) {
    rigidBody.wakeUp(); 
}

限制刚体运动

要限制刚体的运动有以下几种方式:

  • 通过阻尼

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

    阻尼参数的范围在 0 到无穷之间,0 意味着无阻尼,无穷意味着满阻尼。一般情况下阻尼的值是在 0 ~ 0.1 之间。

  • 通过固定旋转

    设置 fixedRotation 属性为 true

  • 通过因子

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

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

    注意:将因子某分量值设置为 0,可以固定某个轴向的移动或旋转,如果要完全固定旋转,请使用 fixedRotation