Unity里的加力
在Unity中,"加力"通常指通过物理引擎给物体施加力(Force
)或扭矩(Torque
)的操作,核心是通过Rigidbody
组件实现。以下是关键分析:
一、核心方法
AddForce()
- 施加线性力使物体移动
- 坐标系选择:
// 世界坐标系(默认) rigidbody.AddForce(Vector3.forward * 10, ForceMode.Impulse); // 局部坐标系 rigidbody.AddRelativeForce(Vector3.forward * 5);
- 力模式(
ForceMode
):Force
:持续力(默认)Impulse
:瞬时冲量Acceleration
:忽略质量VelocityChange
:忽略质量和时间
AddTorque()
- 施加旋转力
- 示例:
// 绕Y轴旋转 rigidbody.AddTorque(Vector3.up * 2);
二、物理参数影响
参数 | 对加力的影响 | 推荐值 |
---|---|---|
质量(mass ) | 质量越大加速越慢 | 0.1~10 |
阻力(drag ) | 削弱移动速度 | 0.01~5 |
角阻力(angularDrag ) | 削弱旋转速度 | 0.05~1 |
三、使用场景
- 推进器效果
void FixedUpdate() {if (Input.GetKey(KeyCode.Space)) rigidbody.AddForce(transform.forward * thrustForce); }
- 爆炸冲击波
void ApplyExplosion(Vector3 explosionPos, float radius) {Collider[] colliders = Physics.OverlapSphere(explosionPos, radius);foreach (Collider hit in colliders) {Rigidbody rb = hit.GetComponent<Rigidbody>();if (rb) rb.AddExplosionForce(1000, explosionPos, radius);} }
四、注意事项
- 在
FixedUpdate
中调用
物理计算需在固定时间步长执行,避免在Update
中使用 - 力的大小单位
推荐使用牛顿单位制(1单位质量≈1kg,1单位力≈1N) - 坐标系转换
使用TransformDirection
处理局部方向:Vector3 worldForce = transform.TransformDirection(localForce); rigidbody.AddForce(worldForce);
五、调试技巧
启用物理调试视图:
void OnDrawGizmos() {Gizmos.color = Color.red;Gizmos.DrawRay(transform.position, rigidbody.velocity);
}
可实时观察物体速度和受力方向。