Rigidbody

class in UnityEngine

/

继承自:Component

切换到手册

描述

通过物理模拟控制对象的位置。

向对象添加 Rigidbody 组件后,其运动将受到 Unity 物理引擎的控制。即使不添加任何代码,Rigidbody 对象也受到向下的重力,并在与其他对象碰撞时作出反应(如果也存在适当的 Collider 组件)。

Rigidbody 还有一个脚本 API,让您能够向对象施加力,并以逼真的物理效果对其进行控制。例如,可以根据车轮施加的力来指定汽车的行为。根据这些信息,物理引擎可以处理汽车运动的大多数其他方面,因此汽车可进行逼真的加速并适当地响应碰撞。

在脚本中,建议使用 FixedUpdate 函数来施加力和更改 Rigidbody 设置(而不是使用 Update,Update 用于大多数其他帧更新任务)。这样做的原因是物理更新在测量的时间步骤中执行,而时间步骤与帧更新不一致。FixedUpdate 在每次进行物理更新前调用,因此在该函数中做出的任何更改都将直接处理。

刚开始使用 Rigidbody 时,新手常常会遇到游戏物理效果似乎以“慢动作”运行的问题。这实际上是您的模型使用了不适当的缩放导致的。默认的重力设置假定一个世界单位对应于一米的距离。对于非物理游戏,如果您的模型长度都为 100 个单位,则不会有太大的差别;但在使用物理引擎时,它们将被视为非常大的对象。如果为本应较小的对象使用较大的缩放,它们下落时的视觉速度就会相当缓慢 - 物理引擎认为它们是非常大的物体,正在很远的距离处下落。因此,请确保您的对象缩放后与现实世界的对象差不多(例如,汽车的长度应为 4 个单位 = 4 米左右)。

变量

angularDrag对象的角阻力。
angularVelocity刚体的角速度矢量(以弧度/秒为单位)。
centerOfMass相对于变换原点的质心。
collisionDetectionMode刚体的碰撞检测模式。
constraints控制该刚体的模拟自由度。
detectCollisions是否应启用碰撞检测?(默认情况下始终启用)。
drag对象的阻力。
freezeRotation控制物理是否会更改对象的旋转。
inertiaTensor质量相对于质心的对角惯性张量。
inertiaTensorRotation惯性张量的旋转。
interpolation插值可以平滑消除固定帧率运行物理导致的现象。
isKinematic控制物理是否影响刚体。
mass刚体的质量。
maxAngularVelocity刚体的最大角速度。默认为 7,范围为 { 0, infinity }。
maxDepenetrationVelocity离开穿透状态时刚体的最大速度。
position刚体的位置。
rotation刚体的旋转。
sleepThreshold经过质量标准化的能量阈值 - 当低于该阈值时,对象开始进入睡眠状态。
solverIterationssolverIterations 确定刚体关节与碰撞接触点的解析精确度。它将重写 Physics.defaultSolverIterations。必须为正值。
solverVelocityIterationssolverVelocityIterations 影响刚体关节与碰撞接触点的解析精确度。它将重写 Physics.defaultSolverVelocityIterations。必须为正值。
useGravity控制重力是否影响该刚体。
velocity刚体的速度矢量。
worldCenterOfMass刚体在世界空间中的质心(只读)。

公共函数

AddExplosionForce向模拟爆炸效果的刚体施加力。
AddForce向 Rigidbody 添加力。
AddForceAtPosition在 position 处施加 /force/。这将向对象施加扭矩和力。
AddRelativeForce向刚体添加力(相对于其坐标系)。
AddRelativeTorque向刚体添加扭矩(相对于其坐标系)。
AddTorque向刚体添加扭矩。
ClosestPointOnBounds与附加碰撞体的包围盒最接近的点。
GetPointVelocity点 /worldPoint/(全局空间)处刚体的速度。
GetRelativePointVelocity相对于点 relativePoint 处的刚体的速度。
IsSleeping刚体是否处于睡眠状态?