在Unity中,"加力"通常指通过物理引擎给物体施加力(Force
)或扭矩(Torque
)的操作,核心是通过Rigidbody
组件实现。以下是关键分析:
一、核心方法
-
AddForce()
-
施加线性力使物体移动
-
坐标系选择:
csharp// 世界坐标系(默认) rigidbody.AddForce(Vector3.forward * 10, ForceMode.Impulse); // 局部坐标系 rigidbody.AddRelativeForce(Vector3.forward * 5);
-
力模式(
ForceMode
):Force
:持续力(默认)Impulse
:瞬时冲量Acceleration
:忽略质量VelocityChange
:忽略质量和时间
-
-
AddTorque()
-
施加旋转力
-
示例:
csharp// 绕Y轴旋转 rigidbody.AddTorque(Vector3.up * 2);
-
二、物理参数影响
参数 | 对加力的影响 | 推荐值 |
---|---|---|
质量(mass ) |
质量越大加速越慢 | 0.1~10 |
阻力(drag ) |
削弱移动速度 | 0.01~5 |
角阻力(angularDrag ) |
削弱旋转速度 | 0.05~1 |
三、使用场景
-
推进器效果
csharpvoid FixedUpdate() { if (Input.GetKey(KeyCode.Space)) rigidbody.AddForce(transform.forward * thrustForce); }
-
爆炸冲击波
csharpvoid 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
处理局部方向:csharpVector3 worldForce = transform.TransformDirection(localForce); rigidbody.AddForce(worldForce);
五、调试技巧
启用物理调试视图:
csharp
void OnDrawGizmos() {
Gizmos.color = Color.red;
Gizmos.DrawRay(transform.position, rigidbody.velocity);
}
可实时观察物体速度和受力方向。