インパルスでジャンプ
CoddyのUnityジャーニー「物理演算とゲームプレイ」セクションの一部。レッスン 3/63。
AddForceは第2引数にForceModeを取ります。これはベクトルをどのように使うかを指定します。省略するとForceMode.Forceになり、1回の物理ステップの間続く押す力なので、ステップごとに加える必要があります。キックやジャンプ、爆発は一度に起こります。これが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はその力を保持し、次の物理ステップで適用します。4つのモードは、一度に加えるかステップをかけて加えるか、そして質量を考慮するかどうかという2つの点で異なります。
Force:ステップをかけて加え、質量で割る(エンジン、風)。Acceleration:ステップをかけて加え、質量は無視する。Impulse:一度に加え、質量で割る(キック、ジャンプ)。VelocityChange:一度に加え、質量は無視する。ベクトルが速度にそのまま加算されます。
チャレンジ
簡単カエルをジャンプさせましょう。Spaceキーを押すたびに、上向きの力jumpImpulse(Inspectorで10)が1回加わります。カエルの質量は2 kgです。ジャンプには質量を考慮する必要があります。重いカエルほどジャンプが低くなります。
Spaceキーを押し続けても、ジャンプは1回です。Playを押してジャンプし、それからCheckを押しましょう。
自分で試してみよう
using UnityEngine;
public class FrogJump : MonoBehaviour
{
public float jumpImpulse = 10f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
// Space: jumpImpulse による上向きの力を1回加える
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。