版本: Unity 6 (6000.0)
语言英语
  • C#

Rigidbody

UnityEngine 中的类

/

继承自:Component

/

实现于:UnityEngine.PhysicsModule

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实会阅读用户提出的每个建议,并在适用的情况下进行更新。

关闭

提交失败

由于某些原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

切换到手册

描述

通过物理模拟控制物体的方位。

将 Rigidbody 组件添加到物体上将使物体的运动受 Unity 物理引擎的控制。即使没有添加任何代码,Rigidbody 物体也会受到重力作用而向下坠落,并且如果存在正确的Collider 组件,它也会对传入的物体产生碰撞反应。

Rigidbody 还具有一个脚本 API,可让您对物体施加力并以物理上逼真的方式控制它。例如,可以根据车轮施加的力来指定汽车的行为。根据此信息,物理引擎可以处理汽车运动的大多数其他方面,因此它将逼真地加速并对碰撞做出正确的反应。

在脚本中,建议使用FixedUpdate 函数作为施加力和更改 Rigidbody 设置的位置(与Update 相比,Update 用于大多数其他帧更新任务)。这样做的原因是,物理更新以测量的时步进行,这些时步与帧更新不一致。FixedUpdate 在每次物理更新之前立即调用,因此在那里进行的任何更改都将直接处理。

刚开始使用 Rigidbody 时的一个常见问题是,游戏物理看起来像在“慢动作”中运行。这实际上是由于模型使用的比例造成的。默认的重力设置假设一个世界单位对应一个米的距离。对于非物理游戏,模型是否为 100 个单位长并不重要,但在使用物理时,它们将被视为非常大的物体。如果对应该很小的物体使用大规模,它们看起来会非常缓慢地落下 - 物理引擎认为它们是非常大的物体,在非常大的距离上落下。考虑到这一点,请务必使您的物体大小大致与其真实比例一致(例如,汽车应约为 4 个单位 = 4 米)。

属性

angularDamping物体的角阻尼。
angularVelocity刚体的角速度向量,以弧度/秒为单位测量。
automaticCenterOfMass是否自动计算质心。
automaticInertiaTensor是否自动计算惯性张量。
centerOfMass相对于变换原点的质心。
collisionDetectionModeRigidbody 的碰撞检测模式。
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刚体的位置。
rotationRigidbody 的旋转。
sleepThreshold质量归一化能量阈值,低于此阈值的物体将开始进入休眠状态。
solverIterationssolverIterations 决定如何准确地解决 Rigidbody 关节和碰撞接触。覆盖 Physics.defaultSolverIterations。必须为正值。
solverVelocityIterationssolverVelocityIterations 影响如何准确地解决 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 ==比较两个对象引用,以查看它们是否引用同一个对象。