Unityのゲームで2段階ジャンプの機能を作成する | Unityを使った3Dゲームの作り方(かめくめ)

Unityのゲームで2段階ジャンプの機能を作成する

今回はジャンプしている最中に再度ジャンプキーを押した時に2段階ジャンプが出来るようにします。

ジャンプ機能については

Unityのゲームでキャラクターがジャンプ出来るようにする機能を作成します。

を参考にしてください。

またジャンプ中にコライダのサイズを変更する場合は

Unityで使う当たり判定(コライダ)のサイズをアニメーションに応じて変更し、ジャンプ中のキャラクターのコライダのサイズを変更し狭い空間を通過出来るようにしてみます。

を参考にしてください。

キャラクターはアニメーションの動きで移動やジャンプを反映させるのではなく、スクリプトで操作するキャラクターになります。

スポンサーリンク

2段階ジャンプの機能をどうやって作るか?

今回作成する2段階ジャンプの機能を考えていきましょう。

まずは通常のジャンプを考えます。

ジャンプキーを押したらジャンプアニメーションをさせ、キャラクターの上向きにジャンプ力を足します。

キャラクターには重力を働かせているので数秒後には落下して地面に接地します。

地面に接地したら重力値を0にしています。

2段階ジャンプについて考えましょう。

2段階ジャンプなので、まずはジャンプしている必要があります。

ジャンプ中にジャンプキーを押したらキャラクターの上向きに2段階目のジャンプ力を足します。

ジャンプ中いつでも2段階目のジャンプが出来ると地面スレスレで再度ジャンプするという事が出来てしまいます。

そういう風に作りたい場合はいいんですが、今回の場合はジャンプのアニメーションの再生位置に応じて2段階目のジャンプが出来るようにしておきます。

またジャンプ中に2段階目ジャンプを何度も試みることが出来てしまうので一度二段階ジャンプを試みたらそのジャンプ中には二段階目のジャンプは出来ないようにします。

アニメーターコントローラーではJump状態からDoubleJump状態へと遷移させるようにします。

ジャンプの1段階目、2段階目に関係なく重力でキャラクターは落下し、地面に接地します。

もし2段階目のジャンプをスレスレで出来るようにするとなると重力の事もあるので難しくなります。

2段階目のジャンプ力が重力加速度分の落下力より高くないと一瞬止まるだけのようにしか見えないからです。

アニメーターコントローラーに2段階目のジャンプの状態と遷移を作成する

それではまずアニメーターコントローラーでDoubleJumpの状態の作成と遷移を作成していきましょう。

DoubleJump状態と遷移を作成する

↑のようにDoubleJump状態を作成します。

DoubleJumpのアニメーションクリップにはJumpと同じアニメーションを設定しました。

Jump→DoubleJump、DoubleJump→Idleへと遷移を繋げます。

EndJumpビヘイビアではJumpをfalseにしない

EndJumpビヘイビアを使用するのをやめて別の制御を行う

先ほど紹介した記事でジャンプ機能を作成した方はJump状態にEndJumpビヘイビアを設定しアニメーションパラメータのJumpをfalseにしていました。

今回の2段階ジャンプ機能搭載の際にここでJumpをfalseにするとスクリプトの制御が難しくなるので、この機能はオフにしておきます。

↑のようにコメント化するかEndJump自体を外してください。

DoubleJumpへの遷移条件を設定する

では次にアニメーションパラメータにDoubleJumpを作成します。

Jump→DoubleJumpへの遷移条件にDoubleJumpがtrueの時を設定します。

Jump→DoubleJumpへの遷移条件

↑が遷移条件になります。

Has Exit Timeのチェックを外し、DoubleJumpを左に32%動かして最初の方のアニメーションを再生させないようにします。

これはStandardAssetのJumpを使用していてこのアニメーションには助走があるのでカットしています。

他のアニメーションクリップを使用している場合はそれぞれアニメーションの助走部分をカットするか、もしくは必要ありません。

DoubleJump→Idleへの遷移条件

DoubleJump→Idleへの遷移条件は↑のようにします。

アニメーションパラメータのDoubleJumpがfalseになったらIdle状態へ遷移させます。

2段階ジャンプ機能を取りつけたDoubleJumpCharaスクリプトの作成

これでアニメーターコントローラーの設定が終了したので、キャラクターに移動とジャンプ機能、2段階ジャンプ機能を取りつけたDoubleJumpCharaを作成します。

少しづつ見ていきます。

を宣言します。

doubleJumpPowerは2段階目のジャンプ力でインスペクタで設定出来るようにします。

isDoubleJumpは2段階ジャンプ中かどうかのフラグです。

tryDoubleJumpは1回のジャンプ中で二段階目のジャンプを試みたかどうかのフラグです。

一度試みたらそのジャンプ中では二度と二段階目のジャンプをさせないようにします。

CharacterControllerのisGroundedプロパティで接地が確認された時にアニメーションパラメータのJumpとDoubleJump、isDoubleJump、tryDoubleJumpをfalseにします。

つまり、地面に着地した時はジャンプ系のパラメータをオフにしています。

ジャンプ中で二段階目のジャンプでなく、二段階目のジャンプを試みていない時に二段階目のジャンプをするかどうかの判定をします。

ジャンプ中でも移動キーを押したら移動出来るようにしています。

ジャンプボタンを押した時にアニメーションの再生位置を調べています。

でアニメーターコントローラーで再生中のアニメーションの再生位置を取得し0~1内で納めます。

アニメーターコントローラーの状態がJumpで、そのアニメーションの再生位置が0.35以上0.5以下の時に二段階ジャンプが出来るようにしています。

ジャンプキーを押した時で再生位置等によって二段階ジャンプの条件に漏れた場合はtryDoubleJumpをtrueにして次にキーを押しても二段階目のジャンプは出来ないようにします。

2段階ジャンプ中に移動キーで位置を変更出来るようにする場合はキーの入力値を取得してvelocityに値を足します。

Y軸の値は重力加速度をそのまま設定します。

1段階目のジャンプ中も2段階目のジャンプ中もジャンプ中に前後左右に動けるようにしてます。

2段階ジャンプが出来るかどうか確認する

これで2段階ジャンプの機能が完成です。

キャラクターにDoubleJumpCharaスクリプトを取りつけインスペクタにパラメータを設定してください。

DoubleJumpCharaスクリプトのインスペクタ

↑のようなパラメータを設定しました。

それではUnityの実行ボタンを押して確認してみましょう。

2段階ジャンプ機能の確認

↑のようになりました。
2段階ジャンプが出来るようになりました!

ジャンプ力を上げるとアニメーション再生位置とジャンプしている高さが合わなくなってくるので調整が必要です。

ジャンプして着地後すぐにジャンプさせたい場合

2段階ジャンプとは関係ないですが、一度ジャンプをして着地したと同時にジャンプキーで再度ジャンプさせたい場合もあるかと思います(連続でジャンプ)。

そういった時は

↑のように状態がJump中でないという条件とアニメーションが遷移途中でないという条件をコメント化するか削除してください。

すると、連続ジャンプが出来ます(試しに連打してみてください)。

ただ、着地と同時にジャンプ出来るので、アニメーションの遷移よりもスクリプトのY座標の値の更新が早い為、歩いている時にキャラクターが浮きあがるという感じになります。

これが気になる人はジャンプ時のアニメーションを使わないようにすると違和感がなくなると思います。

連続ジャンプと方向転換のサンプル

↑が連続ジャンプと方向転換の実行結果です。

連続でジャンプ出来ていますね!

スポンサーリンク

記事をシェアして頂ける方はこちら

フォローして頂くとやる気が出ます