【Unity】Rigidbodyでジャンプを実装する方法

URLをコピーする
URLをコピーしました!

CGBoxの一部の記事にはアフィリエイト広告が含まれております。

こんにちは!Unityでアクションゲームを作るためには、ジャンプは必須ですよね。

Unityにはジャンプさせる方法がいくつかありますが、Rigidbodyを使う方法が一般的です。

本記事では、Rigidbodyでジャンプを実装する方法を中心に解説していきます!

目次

2D・3Dでジャンプを実装する方法

以下のような順番で、ジャンプを実装する方法を解説していきます。

  • AddForceでジャンプするスクリプトを作る(2D・3D別)
  • ジャンプがおかしいとき
  • ジャンプ中の移動を制限する
  • Rigidbodyを使わずにジャンプさせる方法

AddForceを使えば下のような挙動のジャンプが実装できます。

AddForceでジャンプするスクリプトを作る

AddForceとは?

AddForceとはRigidbodyクラスに用意された関数の一つです。

物体に瞬間的に力を加えて速度を与えるイメージです。

物理演算を利用したジャンプのさせ方であり、リアルな挙動を実現することができます。

AddForceを使ってジャンプを実装する手順は以下の通りです。

  1. プレーヤーと床を配置
  2. プレーヤーと床にColliderとRigidbodyを設定
  3. プレーヤーにキーを押すとAddForceするスクリプトをアタッチ

2D

ここでは2Dのワールドでジャンプを実装する方法を解説します。

まずは下のようにプレーヤーと床を、それぞれ2DオブジェクトのCapsule、Squareを用いて作成します。

次にプレーヤーにRigidbody2DとCapsule Collider2Dを設定します。

下のように、プレーヤーのインスペクター内Add ComponentからRigidbody2D、Capsule Collider2Dを選択しましょう。

同様にして床にはRigidbody2DとBoxCollider2Dを設定します。

床の位置は固定したいため、Rigidbody2D内のFreezePositionのX,Yにチェックを入れておきましょう。

次にジャンプするスクリプトを作成します。

下のようなJumpTestスクリプトを作成しましょう。

作成したスクリプトをプレーヤーオブジェクトにドラッグアンドドロップします。

これでジャンプを実装する手順は完了です。

プログラムを実行し、スペースキーを押して動作を確認してみましょう。

このようにジャンプを実装することができました。

3D

続いて、3Dのワールドでジャンプを実装する方法を解説します。

まずは下のようにプレーヤーと床を、それぞれ3DオブジェクトのCapsuleとPlaneを使って作成します。

続いて下のように、プレーヤーのインスペクター内AddComponentからRigidbodyを設定しましょう。

3Dの場合オブジェクトを作成した時点でColliderも追加されているため、追加するのはRigidbodyだけです。

次に下のようなJumpTestスクリプトを作成しましょう。

作成したスクリプトをプレーヤーオブジェクトにドラッグ&ドロップします。

これでジャンプを実装できました。

プログラムを実行して動作を確認してみると、下のようにスペースキーを押す度にジャンプするようになりました。

ジャンプがおかしいとき

ジャンプが実装できましたが、ジャンプするスペースボタンを連打すると下のようにおかしい挙動をすると思います。

これは2D、3Dともに今の状態だと常にジャンプできる状態(いわゆる2段ジャンプ)が可能になっています。

地面に足がついている状態でのみジャンプできるようにするためには、「接地判定」を実装する必要があります。

接地判定の実装については下の記事が参考になります。

Qiita
【UnityでC#】スクリプトで接地判定を作ろう! - Qiita はじめに 今回はUnityのC#を用いて接地判定を実装したいと思います。プレイヤー操作の移動は実装していますが、接地判定ができていないので実装していきます。プレイヤー...

ジャンプ中の移動を制限する

ジャンプ中には横方向の移動を制限したい場合があるかと思います。

そんな時は接地判定を利用し、地面に足が着いている状態でのみ移動入力を受け付けるようにすれば実装できます。

キャラクターを移動させるスクリプトについては、下の記事で解説しています。

あわせて読みたい
【Unity】キャラクターを動かす移動方法解説【初心者向け】 こんにちは!Unityでのキャラクターの移動方法で困った経験はありませんか? 移動方法にはいくつか種類があるのでどれを使えばいいか迷ってしまうんですよね。 本記事で...

Rigidbodyを使わずにジャンプさせる方法

ここまでRigidbodyクラス内の関数である、AddForceを使ってジャンプさせる方法を解説してきました。

他にもジャンプを実装する方法を2つ紹介します。

CharacterControllerを利用する

Unityではキャラクターを動かす方法として、CharacterController関数が用意されています。

このCharacterControllerを使えばRigidbodyを使わずにジャンプを実装することができます。

具体的な実装方法やスクリプトについては下の記事が参考になります。

note(ノート)
ゲーム作成初心者が【unity】でゲームを作りたい #6【CharacterControllerを使ったジャンプ】|磁鉄鉱 初め 今回は【CharacterController】を使ったジャンプですね。 参考URLは↓ Unityでのジャンプ【Rigidbody,CharacterControllerどちらも対応】 | ゲタバコ倶楽部 (...

transform.positionの値を直接指定する

物理的な計算をせずにキャラクターの座標を直接指定して動かすことで、ジャンプさせる方法もあります。

Update関数内で、毎フレームごとに少しずつtransform.positionの値を書き換えることで実装できます。

ただし重力による影響などは自分で計算する必要があるため、リアルな挙動のジャンプを実装するのには向きません。

ジャンプ台を作る方法

ジャンプ台は、以下の手順で実装できます。

  1. プレーヤーキャラクターに「Player」タグを追加
  2. Playerタグとの衝突を検知するとプレーヤーに上向きに力を加えるスクリプトを作る
  3. ジャンプ台オブジェクトにスクリプトをアタッチ
  4. ジャンプ台のColliderのIs Triggerにチェック

具体的なスクリプトと実装方法については下の記事が参考になります。

とんプログラミング
【Unity】ジャンプ台を作る | とんプログラミング プレイヤーが台に乗ると、ジャンプするジャンプ台を作ります。 プレイヤーとしては以下を使います。 ジャンプする台を用意する 1.Cubeで台を設置します。名前はCubeJumpに...

おすすめアセット

2Dアクションゲーム作りに便利なアセット

あわせて読みたい
Corgi Engine - 2D + 2.5D Platformer | Systems | Unity Asset Store Use Corgi Engine - 2D + 2.5D Platformer from More Mountains to elevate your next project. Find this & more Systems and templates on the Unity Asset Store.

こちらのCorgi Engineは、2D、2.5Dのキャラクターのあらゆる動作をすぐに実装できるアセットです。

ジャンプについても充実しており、接地判定はもちろん、2段ジャンプや壁ジャンプなどを簡単な設定で実装できます。

気軽にアクションゲームを作成したい方にオススメのアセットです。

ジャンプするアニメーションのアセット

あわせて読みたい
Runner Action Animation Pack | 3D Animations | Unity Asset Store Elevate your workflow with the Runner Action Animation Pack asset from Clazy. Find this & other Animations options on the Unity Asset Store.

こちらのRunner Action Animation Packは、異なるアクションのアニメーションが300種類以上入ったアセットです。

走りながらアクションを行うアニメーションが充実しており、ジャンプのアニメーションも多く含まれています。

スピード感のあるアクションゲームに使いたいアセットです。

まとめ

以上、Rigidbodyでジャンプを実装する方法について解説してきました!

ジャンプの出来が良いと、操作感が良くなりゲームのクオリティがあがります。

ジャンプの実装方法については極めておきたいところですね!




この記事が気に入ったら
フォローしてね!

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

この記事を書いた人

Unityメインの個人開発者。UnityでAIを学習させてみたり、野球ゲームを作ってみたりと色々してました。現在はライターとして、Unityで開発する人の力になる記事が書けるよう奮闘中。

目次
閉じる