Unity

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を選択します

テストプレイしてみると

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

このサイトについて

ここには、自己紹介やサイトの紹介、あるいはクレジットの類を書くと良いでしょう。

検索

このサイトについて

ここには、自己紹介やサイトの紹介、あるいはクレジットの類を書くと良いでしょう。

検索

-Unity

執筆者:


comment

メールアドレスが公開されることはありません。

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

関連記事

UnityでURLを開く

ボタンの作成 Create → UI → Buttonをおします ボタンの位置を調整します スクリプトの作成 Create → C#Scriptをおします 名前をURLにします 記入するスクリプト u …

Unityでマインクラフト風のマップをランダム生成する

今回やること 画像のようにマイクラ風のマップを自動で生成するツールを作成します こちらを参考にしましたが、マイクラのようにブロックの高さがきっちり分けられるようにしたかったので直してみました マップを …

no image

コンボ攻撃

アニメーションの読み込み、アニメーションの名前の変更、アニメーションの遷移の設定 アニメーションの遷移の条件の設定 スクリプトの入力 using UnityEngine; using System.C …

Unityでシーンを切り替える

現在のシーンの登録 現在のシーンをセーブして、File → Build Settingsをおします Add Open Scenesをおして、×で閉じます 切り替えるシーンの作成 File → New …

Unityで爆発エフェクトを呼び出す

スクリプトを作成する こちらを参考にスクリプトを作成して爆発させたいオブジェクトに貼り付けます スクリプト using System.Collections; using System.Collect …

ゲタバコ倶楽部へようこそ

  • 318832総閲覧数:
  • 101今日の閲覧数:
  • 246590総訪問者数:
  • 87今日の訪問者数:

住所
Akita,Japan

営業時間
月~日: 10:00 AM – 10:00 PM

このページはゲタバコ先生の日々思うことや活動、プログラミングの習得方法を発信するページです。
仕事のご依頼、メッセージ等、サービス概要をご覧の上で、お気軽にご連絡ください。

getabakosensei@gmail.com