ジャンプを実装

ジャンプは前後左右の移動とは関係ないため、別のスクリプトとして実装ができる。同じPlayerMoveでも実装できるが、「一つのスクリプト=1つの責任」の考えを従い、今回はジャンプ専用の「PlayerJump」スクリプトを作成しましょう。

このスクリプトは「Jump」という入力(プロジェクト設定→入力マネージャーを確認)が発動したら、一旦Y軸の速度を変えて、上がるようにしましょう。また、ジャンプ力をUnityで変えられるようにしましょう。

スクリプト

using UnityEngine;

// ジャンプ機能を追加するスクリプト
public class PlayerJump : MonoBehaviour
{
    // ジャンプ力を設定する
    [SerializeField] 
    private float jumpPower = 5.0f;

    // 速度を変えるためのリジッドボディ
    private Rigidbody rbody;

    // ジャンプしろ!
    private bool doJump;
    
    void Start()
    {
        // コンポネント取得
        rbody = GetComponent<Rigidbody>();
    }

    void Update()
    {
        // ジャンプしたか?
        if (Input.GetButtonDown("Jump"))
            doJump = true;
    }
    
    private void FixedUpdate()
    {
        // ジャンプしていなければ、なにもしない
        if (!doJump)
            return; // メソッド終了
        
        // 現在の速度を取得
        Vector3 v = rbody.linearVelocity;
        
        // Yだけを上書き
        v.y = jumpPower;
        
        // 速度を設定
        rbody.linearVelocity = v;
        
        // ジャンプしたので、doJump を false に戻す
        doJump = false;
    }
}

これでジャンプを確認しましょう。

問題:多重ジャンプ

 ジャンプできるようになったが、空中であってもジャンプができるので、ジャンプし続けば空に飛んでしまう!これを防ぐには、現状にジャンプできるかどうかの確認が必要。

 

 今回は「足元の下に何もなければ(つまり空中であること)、ジャンプができない」ことがジャンプの条件にしましょう。

 

 では、どうやって足元に地面の存在確認できるのか?これを学んだ「Raycast」で解決ができる。足元からビーム(レイ)を発射し、何も当たらなければ、空中であることを確認ができる。

image.png

では、PlayerJump を更新し、地面の時だけジャンプできるようにしましょう。まず、地面の確認メソッド:

// 現在、地面を触れている?
private bool IsOnFloor()
{
    // 確認する距離。ここは適切に調整
    const float CheckDistance = 0.2f;
    
    // レイが始まる位置。現在位置からもう少し上から始まる
    Vector3 origin = transform.position + Vector3.up * 0.01f;
    
    // origin から下に向かい、決まった距離のビームを発射
    // 何か当たったら「true」を返す
    return Physics.Raycast(origin, Vector3.down, CheckDistance);
}

そして、Update で:

void Update()
{
    // ジャンプしたか?
    if (IsOnFloor() && Input.GetButtonDown("Jump"))
        doJump = true;
}

問題:壁にくっつける

次の試してみてください。台に向かって、ジャンプし、壁を当たってください。引き続きに壁に力を与えると、主人公が落下せず、壁にくっつけてしまう。魔雑のため、滑らずにそこでとまってしまう。

この問題を「Physics Material」で解決ができる。主人公のコライダーが魔雑ないようにし、滑りやすくしましょう。プロジェクトフォルダーの中に新しい「Physics Material」を作成し、名前は「PlayerSlide」にする

image.png

魔雑「0」弾み「0」で、どちらにも「最低数値」を使用。 Player のコライダーに「PlayerSlide」をアサインすれば完成

image.png


Revision #2
Created 2026-05-04 08:10:43 UTC by Menendez Francisco
Updated 2026-05-26 04:46:10 UTC by Menendez Francisco