通过物理模拟控制物体的方位。
将 Rigidbody 组件添加到物体上将使物体的运动受 Unity 物理引擎的控制。即使没有添加任何代码,Rigidbody 物体也会受到重力作用而向下坠落,并且如果存在正确的Collider 组件,它也会对传入的物体产生碰撞反应。
Rigidbody 还具有一个脚本 API,可让您对物体施加力并以物理上逼真的方式控制它。例如,可以根据车轮施加的力来指定汽车的行为。根据此信息,物理引擎可以处理汽车运动的大多数其他方面,因此它将逼真地加速并对碰撞做出正确的反应。
在脚本中,建议使用FixedUpdate 函数作为施加力和更改 Rigidbody 设置的位置(与Update 相比,Update 用于大多数其他帧更新任务)。这样做的原因是,物理更新以测量的时步进行,这些时步与帧更新不一致。FixedUpdate 在每次物理更新之前立即调用,因此在那里进行的任何更改都将直接处理。
刚开始使用 Rigidbody 时的一个常见问题是,游戏物理看起来像在“慢动作”中运行。这实际上是由于模型使用的比例造成的。默认的重力设置假设一个世界单位对应一个米的距离。对于非物理游戏,模型是否为 100 个单位长并不重要,但在使用物理时,它们将被视为非常大的物体。如果对应该很小的物体使用大规模,它们看起来会非常缓慢地落下 - 物理引擎认为它们是非常大的物体,在非常大的距离上落下。考虑到这一点,请务必使您的物体大小大致与其真实比例一致(例如,汽车应约为 4 个单位 = 4 米)。
angularDamping | 物体的角阻尼。 |
angularVelocity | 刚体的角速度向量,以弧度/秒为单位测量。 |
automaticCenterOfMass | 是否自动计算质心。 |
automaticInertiaTensor | 是否自动计算惯性张量。 |
centerOfMass | 相对于变换原点的质心。 |
collisionDetectionMode | Rigidbody 的碰撞检测模式。 |
constraints | 控制此 Rigidbody 模拟允许哪些自由度。 |
detectCollisions | 是否应启用碰撞检测?(默认情况下始终启用)。 |
excludeLayers | 附加到此 Rigidbody 的所有 Collider 在决定 Collider 是否可以与其他 Collider 接触时应排除的附加层。 |
freezeRotation | 控制物理是否会改变物体的旋转。 |
includeLayers | 附加到此 Rigidbody 的所有 Collider 在决定 Collider 是否可以与其他 Collider 接触时应包含的附加层。 |
inertiaTensor | 此物体的惯性张量,定义为位于此物体质心且旋转由 Rigidbody.inertiaTensorRotation 定义的参考系中的对角矩阵。 |
inertiaTensorRotation | 惯性张量的旋转。 |
interpolation | 插值提供了一种方法,可以在运行时管理 Rigidbody 游戏对象运动中抖动的外观。 |
isKinematic | 控制物理是否影响刚体。 |
linearDamping | 物体的线性阻尼。 |
linearVelocity | 刚体的线性速度向量。它表示刚体位置的变化率。 |
mass | 刚体的质量。 |
maxAngularVelocity | 刚体的最大角速度,以弧度/秒为单位测量。(默认值 7)范围 { 0,无穷大}。 |
maxDepenetrationVelocity | 刚体从穿透状态移出时的最大速度。 |
maxLinearVelocity | 刚体的最大线性速度,以米/秒为单位测量。 |
position | 刚体的位置。 |
rotation | Rigidbody 的旋转。 |
sleepThreshold | 质量归一化能量阈值,低于此阈值的物体将开始进入休眠状态。 |
solverIterations | solverIterations 决定如何准确地解决 Rigidbody 关节和碰撞接触。覆盖 Physics.defaultSolverIterations。必须为正值。 |
solverVelocityIterations | solverVelocityIterations 影响如何准确地解决 Rigidbody 关节和碰撞接触。覆盖 Physics.defaultSolverVelocityIterations。必须为正值。 |
useGravity | 控制重力是否影响此刚体。 |
worldCenterOfMass | 刚体在世界空间中的质心(只读)。 |
AddExplosionForce | 对刚体施加一个力,模拟爆炸效果。 |
AddForce | 对 Rigidbody 添加一个力。 |
AddForceAtPosition | 在位置处施加力。因此,这将对物体施加一个扭矩和力。 |
AddRelativeForce | 相对于其坐标系对刚体添加一个力。 |
AddRelativeTorque | 相对于其坐标系对刚体添加一个扭矩。 |
AddTorque | 对刚体添加一个扭矩。 |
ClosestPointOnBounds | 与附加的碰撞器边界框最近的点。 |
GetAccumulatedForce | 返回刚体在模拟步骤之前累积的力。 |
GetAccumulatedTorque | 返回刚体在模拟步骤之前累积的扭矩。 |
GetPointVelocity | 刚体在世界空间中世界点 worldPoint 处的速度。 |
GetRelativePointVelocity | 刚体相对于点 relativePoint 的速度。 |
IsSleeping | 刚体是否处于休眠状态? |
Move | 将 Rigidbody 移动到位置,并将 Rigidbody 旋转到旋转。 |
MovePosition | 将运动学 Rigidbody 移动到位置。 |
MoveRotation | 将刚体旋转到旋转。 |
PublishTransform | 将 Rigidbody 的位置和旋转应用到相应的 Transform 组件。 |
ResetCenterOfMass | 重置刚体的质心。 |
ResetInertiaTensor | 重置惯性张量值和旋转。 |
SetDensity | 假设恒定密度,根据附加的碰撞器设置质量。 |
Sleep | 强制刚体休眠,直到被唤醒。 |
SweepTest | 测试如果刚体在场景中移动,它是否会与任何东西发生碰撞。 |
SweepTestAll | 与 Rigidbody.SweepTest 相似,但返回所有命中。 |
WakeUp | 强制刚体唤醒。 |
OnCollisionEnter | 当此碰撞器/刚体开始接触另一个刚体/碰撞器时,将调用 OnCollisionEnter。 |
OnCollisionExit | 当此碰撞器/刚体停止接触另一个刚体/碰撞器时,将调用 OnCollisionExit。 |
OnCollisionStay | 对于每个接触另一个碰撞器或刚体的碰撞器或刚体,每帧调用一次 OnCollisionStay。 |
gameObject | 此组件所附加的游戏对象。组件始终附加到游戏对象。 |
tag | 此游戏对象的标签。 |
transform | 附加到此 GameObject 的 Transform。 |
hideFlags | 对象是否应隐藏、与场景一起保存或用户可修改? |
name | 对象的名称。 |
BroadcastMessage | 调用此游戏对象或其任何子级中的每个 MonoBehaviour 上名为 methodName 的方法。 |
CompareTag | 将 GameObject 的标签与定义的标签进行比较。 |
GetComponent | 获取与指定组件相同的 GameObject 上类型为 T 的组件的引用。 |
GetComponentInChildren | 获取与指定组件相同的 GameObject 或 GameObject 的任何子级上类型为 T 的组件的引用。 |
GetComponentIndex | 获取组件在其父级 GameObject 上的索引。 |
GetComponentInParent | 获取与指定组件相同的 GameObject 或 GameObject 的任何父级上类型为 T 的组件的引用。 |
GetComponents | 获取与指定组件相同的 GameObject 上类型为 T 的所有组件的引用。 |
GetComponentsInChildren | 获取与指定组件相同的 GameObject 或 GameObject 的任何子级上类型为 T 的所有组件的引用。 |
GetComponentsInParent | 获取与指定组件相同的 GameObject 或 GameObject 的任何父级上类型为 T 的所有组件的引用。 |
SendMessage | 调用此游戏对象中的每个 MonoBehaviour 上名为 methodName 的方法。 |
SendMessageUpwards | 调用此游戏对象和行为的每个祖先中的每个 MonoBehaviour 上名为 methodName 的方法。 |
TryGetComponent | 获取指定类型的组件(如果存在)。 |
GetInstanceID | 获取对象的实例 ID。 |
ToString | 返回对象的名称。 |
Destroy | 删除一个 GameObject、组件或资源。 |
DestroyImmediate | 立即销毁对象 obj。强烈建议您改用 Destroy。 |
DontDestroyOnLoad | 在加载新场景时不要销毁目标对象。 |
FindAnyObjectByType | 检索类型为 type 的任何活动的已加载对象。 |
FindFirstObjectByType | 检索类型为 type 的第一个活动的已加载对象。 |
FindObjectsByType | 检索类型为 type 的所有已加载对象的列表。 |
Instantiate | 克隆对象 original 并返回克隆。 |
InstantiateAsync | 捕获原始对象(必须与某些 GameObject 相关)的快照,并返回 AsyncInstantiateOperation。 |
bool | 对象是否存在? |
operator != | 比较两个对象是否引用不同的对象。 |
operator == | 比较两个对象引用,以查看它们是否引用同一个对象。 |