Menu
CoddyTech

インパルスでジャンプ

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:一度に加え、質量は無視する。ベクトルが速度にそのまま加算されます。
challenge icon

チャレンジ

簡単

カエルをジャンプさせましょう。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回加える
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

物理演算とゲームプレイのすべてのレッスン