(Unity)ボールをジャンプさせる&二段ジャンプの禁止

(1)下準備

  • Sphereを作成・・・>名前を「Ball」に変更
  • Planeを作成・・・>名前を「Floor」に変更
  • 「Ballオブジェクト」に「Rigidbody」を追加する。

(2)スクリプトの作成

  • 新規にC# スクリプトを作成
  • 名前を「BallJump」に変更
  • 下記のコードを書いてチェック

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BallJump : MonoBehaviour
{
    public float jumpPower;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        if(Input.GetKeyDown(KeyCode.Space))
        {
            rb.velocity = Vector3.up * jumpPower;
        }
    }
}

(3)設定

  • スクリプトをBallオブジェクトに追加
  • Jump Powerを設定

  • 設定が完了したらゲーム再生
  • スペースキーでジャンプすれば成功です。

(3)二段ジャンプ(空中ジャンプ)の禁止

  • BallJumpスクリプトを改良する。
  • 「★追加」部分のコードを追加する。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BallJump : MonoBehaviour
{
    public float jumpPower;
    private Rigidbody rb;
    // ★追加
    private bool isJumping = false;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        // ★追加
        if(Input.GetKeyDown(KeyCode.Space) && !isJumping)
        {
            rb.velocity = Vector3.up * jumpPower;
            // ★追加
            isJumping = true;
        }
    }
}

  • ゲームを再生して確認
  • 「1回だけ」ジャンプできれば成功です。

(4)ジャンプを復活させる

  • Floorに触れたらジャンプが復活するようにします。
  • FloorにTagを設定する。

  • BallJumpスクリプトを改良する。
  • 「★★追加」部分のコードを追加する。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BallJump : MonoBehaviour
{
    public float jumpPower;
    private Rigidbody rb;
    private bool isJumping = false;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        if(Input.GetKeyDown(KeyCode.Space) && !isJumping)
        {
            rb.velocity = Vector3.up * jumpPower;
            isJumping = true;
        }
    }

    // ★★追加
    private void OnCollisionEnter(Collision collision)
    {
        if(collision.gameObject.CompareTag("Floor"))
        {
            isJumping = false;
        }
    }
}

  • ゲームを再生して確認
  • 「空中ではジャンプできない」「床に触れたらジャンプ復活する」で成功です。