Unityでのジャンプ【Rigidbody,CharacterControllerどちらも対応】

目次

はじめに

Unityでジャンプを実装する場合にはいくつかの方法があります
その中でも、よく使われるのが、

です

CharacterControllerとRigidbodyは一つのオブジェクトに両方ともつけてしまうと、挙動がおかしくなってしまうので、
適宜使い分けましょう

CharacterControllerを使用したジャンプ

CharacterControllerをつける

プレイヤーを選択し、AddComponentをおします

検索欄に「cha」と入力し、CharacterControllerを選択します
※コライダー(当たり判定)がついていない場合はつけておきましょう

スクリプトの作成

Create → C#Scriptをおします

スクリプトの名前をJumpにします

入力するスクリプト

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

public class Jump : MonoBehaviour
{
    private CharacterController characterController;//  CharacterControllerを使うための変数
    private Vector3 moveDirection;//  CharacterControllerを動かすための変数
    public float JumpPower;//  ジャンプ力

    void Start()
    {
        characterController = GetComponent<CharacterController>();//  characterControllerにCharacterControllerの値を代入する
    }

    void Update()
    {
        if (characterController.isGrounded)//  もし地面についていたら、
        {
            if (Input.GetKeyDown(KeyCode.Space))//  もし、スペースキーがおされたら、
            {
                moveDirection.y = JumpPower;//  y座標をジャンプ力の分だけ動かす
            }
        }

        moveDirection.y += Physics.gravity.y * Time.deltaTime; //常にy座標を重力の分だけ動かす(重力処理)
        characterController.Move(moveDirection * Time.deltaTime); //CharacterControlloerをmoveDirectionの方向に動かす
    }
}

入力したらプレイヤーにドラッグ&ドロップします

プレイヤーを選択し、JumpPowerに好きな数字を入力します
※8ぐらいがオススメです

テストプレイをしてみると

スペースキーをおしたらジャンプします

Rigidbodyを使用したジャンプ

Rigidbodyをつける

プレイヤーを選択し、AddComponentをおします

検索欄に「ri」と入力し、Rigidbodyを選択します
※2Dの場合は、Rigidbody2Dを選択します

スクリプトの作成

Create → C#Scriptをおします

スクリプトの名前をJumpと入力します

入力するスクリプト

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

public class Jump : MonoBehaviour
{
    private Rigidbody rb;//  Rigidbodyを使うための変数
    private bool Grounded;//  地面に着地しているか判定する変数
    public float Jumppower;//  ジャンプ力

    // Start is called before the first frame update
    void Start()
    {
        rb = GetComponent<Rigidbody>();//  rbにRigidbodyの値を代入する
    }

    // Update is called once per frame
    void Update()
    {
        if (Grounded == true)//  もし、Groundedがtrueなら、
        {
            if (Input.GetKeyDown(KeyCode.Space))//  もし、スペースキーがおされたなら、  
            {
                Grounded = false;//  Groundedをfalseにする
                rb.AddForce(Vector3.up * Jumppower);//  上にJumpPower分力をかける
            }
        }
    }

    void OnCollisionEnter(Collision other)//  地面に触れた時の処理
    {
        if (other.gameObject.tag == "Ground")//  もしGroundというタグがついたオブジェクトに触れたら、
        {
            Grounded = true;//  Groundedをtrueにする
        }
    }
}

入力したらプレイヤーにドラッグ&ドロップします

プレイヤーを選択し、JumpPowerを入力します
※400ぐらいがオススメです

地面にタグをつける

地面を選択し、UnTaggedをおし、AddTagをおします

「+」をおし、タグの名前をGroundと入力し、Saveをおします

地面を選択し、UnTaggedをおし、Groundを選択します

テストプレイしてみると

スペースキーをおしたらジャンプします

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメント一覧 (1件)

Unityで地面の当たり判定を足元だけ取得する【3D】 | ゲタバコ倶楽部 (げたばこくらぶ) へ返信する コメントをキャンセル

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次