使用冲量跳跃
本课属于 Coddy Unity 学习旅程的“物理与游戏玩法”单元。第 3 课,共 71 课。
AddForce 的第二个参数是 ForceMode,它用于说明如何使用这个向量。不指定它时,默认使用 ForceMode.Force,这种推力会持续一个物理步,因此必须一步接一步地施加。踢球、跳跃或爆炸都是一次性发生的,这时应使用 ForceMode.Impulse:一次施加全部推力,速度变化量等于冲量除以质量。
这个足球(0.5 kg)会在点击时被踢出。到下一个物理步时,它的速度会增加 (0, 2, 6) / 0.5 = (0, 4, 12) m/s,之后由重力和草地决定它的运动:
void Update()
{
if (Input.GetMouseButtonDown(0))
{
rb.AddForce(new Vector3(0, 2, 6), ForceMode.Impulse);
}
}一次性推力可以在点击的那一帧从 Update() 中调用。Unity 会保留它,并在下一个物理步应用。四种模式在两个方面有所不同:是一次性施加还是持续一个物理步,以及是否考虑质量:
Force:持续一个物理步,推力除以质量(发动机、风)。Acceleration:持续一个物理步,不考虑质量。Impulse:一次性施加,推力除以质量(踢球、跳跃)。VelocityChange:一次性施加,不考虑质量:该向量会直接加到速度上。
挑战
简单每按一次空格键,让青蛙跳一次。
- 在注释下方,写入
if (Input.GetKeyDown(KeyCode.Space))。 - 在其中调用
rb.AddForce(Vector3.up * jumpImpulse, ForceMode.Impulse);,这样青蛙的 2 kg 质量就会计入计算。
按“开始”,再按空格键:青蛙会向上跳起,然后落回地面。接着点击“检查”。
亲手试试
using UnityEngine;
public class FrogJump : MonoBehaviour
{
public float jumpImpulse = 10f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
// Space:施加一次大小为 jumpImpulse 的向上推力
}
}
物理与游戏玩法中的所有课
自己练习: Unity 在线编辑器