Menu
CoddyTech

インパルスでジャンプ

CoddyのUnityジャーニー「物理演算とゲームプレイ」セクションの一部。レッスン 3/71。

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

チャレンジ

簡単

スペースキーを押すたびに、カエルが1回ジャンプするようにします。

  1. コメントの下に、if (Input.GetKeyDown(KeyCode.Space))と書きます。
  2. その中で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による上向きの加速を1回与える
    }
}

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

自分で練習してみよう: Unityプレイグラウンド