这是我参与8月更文挑战的第19天,活动详情查看:8月更文挑战
概念
向对象添加 Rigidbody 组件后,其运动将受到 Unity 物理引擎的控制。即使不添加任何代码,Rigidbody 对象也受到向下的重力,并在与其他对象碰撞时作出反应(如果也存在适当的 Collider 组件)。
Rigidbody 还有一个脚本 API,让您能够向对象施加力,并以逼真的物理效果对其进行控制。例如,可以根据车轮施加的力来指定汽车的行为。根据这些信息,物理引擎可以处理汽车运动的大多数其他方面,因此汽车可进行逼真的加速并适当地响应碰撞。
公共方法
| 公共函数 | 解释说明 |
|---|---|
| AddExplosionForce | 向模拟爆炸效果的刚体施加力。 |
| AddForce | 向 Rigidbody 添加力。 |
| AddForceAtPosition | 在 position 处施加 force。这将向对象施加扭矩和力。 |
| AddRelativeForce | 向刚体添加力(相对于其坐标系)。 |
| AddRelativeTorque | 向刚体添加扭矩(相对于其坐标系)。 |
| AddTorque | 向刚体添加扭矩。 |
| ClosestPointOnBounds | 与附加碰撞体的包围盒最接近的点。 |
| GetPointVelocity | 点 worldPoint(全局空间)处刚体的速度。 |
| GetRelativePointVelocity | 相对于点 relativePoint 处的刚体的速度。 |
| IsSleeping | 刚体是否处于睡眠状态 |
| MovePosition | 将刚体移动到 position。 |
| MoveRotation | 将刚体旋转到 rotation。 |
| ResetCenterOfMass | 重置刚体的质心。 |
| ResetInertiaTensor | 重置惯性张量的值和旋转。 |
| SetDensity | 根据附加的碰撞体设置质量(假设密度恒定)。 |
| Sleep | 强制刚体进入睡眠状态至少一帧。 |
| SweepTest | 测试如果刚体在场景中移动时,是否会与任何对象发生碰撞。 |
| SweepTestAll | 与 Rigidbody.SweepTest 类似,但返回所有命中对象。 |
| WakeUp | 强制唤醒刚体。 |
代码解释
四种模式:
- ForceMode.Force:给物体一个持续的力
- ForceMode.Acceleration:给物体一个持续的加速度,但是忽略其质量,质量被默认为1
- ForceMode.Impulse:给物体添加一个瞬间的力
- ForceMode.VelocityChange:给物体添加一个瞬间的加速度,忽略其质量
函数:
- 添加一个力到刚体,参考世界坐标
AddForce (force : Vector3, mode : ForceMode = ForceMode.Force)
- 添加一个力到刚体,参考本地坐标
AddRelativeForce (force : Vector3, mode : ForceMode = ForceMode.Force)
- 添加一个力矩到刚体,参考世界坐标
AddTorque (torque : Vector3, mode : ForceMode = ForceMode.Force)
- 添加一个力矩到刚体,参考本地坐标
AddRelativeTorque (torque : Vector3, mode : ForceMode = ForceMode.Force)
- 说明在有阻力的作用下,物体会慢慢停下,在position位置应用force力。作为结果这个将在这个物体上应用一个力矩和力(瞬时)。
AddForceAtPosition (force : Vector3, position : Vector3, mode : ForceMode = ForceMode.Force)
代码示例
using UnityEngine;
public class RigidbodyTest : MonoBehaviour
{
public Rigidbody rb;
void Start()
{
// 获取刚体组件
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
// 持续添加力
rb.AddForce(transform.forward * 10);
}
}