キャラクターコントローラーを使う人型3Dモデルをジャンプさせる(その2:ジャンプさせる)

ジョン剣太郎が
ジャンプしてるううぅぅぅ!!
ジャンプ気持ちいいわ~


ジャンプを扱うのは実はかなり難しい。実装もちょっと(だいぶ?)面倒なんだけど、モーションが不自然になったりバグを起こしやすい。しかしまあ、3DのUnity空間でジャンプするのは気持ちいいぞ!ということで人型3Dモデルをジャンプさせるスクリプトとアニメーションの設定を説明する。今回はスクリプトやアニメーションのややこしい話が多いので退屈かも……。

スクリプト側の処理

スクリプト側でやらなければいけないのは以下の3点だ。

  • 1)ジャンプのアニメーションをさせる
  • 2)Y軸方向(上)に速度を与える
  • 3)ジャンプは地面に接地している時のみできる(空中ではできない)


1)は前にやった
アニメーションコントローラーに
SetBoolで信号を送れば
いいっすね
このページで解説したやつだな

問題は2)の速度だけど……


今回、スクリプト初心者のそめ先生は下のようなシンプルなif文を使ってみた。

if (Input.GetKeyDown("space") || Input.GetButtonDown("Jump"))

「もし、spaceキー or ジャンプボタンが押されたら……」
 →「Y軸方向への速度に「ジャンプパワー」の変数を代入する(上に向かって飛ぶ)」

「もし、spaceキー or ジャンプボタンが押されてなければ……」
 →下向きの力(重力)が発生する



moveDirectionはスクリプトの一番最初の方で、このオブジェクトの移動する方向とベクトル(動く力、速度)として定義している。moveDirection.yに数値が入るとY軸方向へ飛び上がる……という仕組み。

……なんかスクリプトの説明は
書いててよくわからないわ
ちょっw
もうコード貼っておくので
自分でいじくってみてくれぃ
そめ先生 教える事を
放棄しないでくださいっす~


これが3Dオブジェクトがグリグリ動いて重力が発生し、さらにジャンプできちまうスクリプトである。使用するためには人型3Dモデルにキャラクターコントローラー、アニメーターコントローラーのコンポーネントを付ける必要があり、さらにアニメーターコントローラーの設定が必要。よくわからない人はこちらのページを参照

3)ジャンプは地面に接地している時のみできる(空中ではできない) を実現するため、この処理は前回実装した「オブジェクトが接地している場合の処理」の中に入れている。

アニメーション側の処理

ボタン押下に反応してジャンプアニメーションを出すのはさほど難しくない。しかし実際には後述する問題のため、細かい調整が必要になる。3Dモデルやモーションの内容、させたい操作によって違うので正解はないが、要点だけ伝えよう。

まずはアニメーションウィンドウで必要なステート(四角)とトランジション(矢印)を作ろう。今回は以下の3つのパターンを作った。

  • 待機→ジャンプ
  • 走る→ジャンプ
  • ジャンプ→待機


ジャンプステートには以前も使った無料アセットの「RPG Character Animation Pack FREE」から「Unarmed-Jump」というジャンプアニメーションを割り当てることにする。


ピョイーン


フルバージョンの有料版でなくとも基本的なモーションが入っている

スクリプトと合わせれば、これでジャンプアニメーションが行われる。しかしジャンプボタンを連打したり、移動しながらジャンプボタンを押した場合に挙動が不自然になることが多い。



・Has Exit Timeはオフにしよう ジャンプボタンを押したら即座にジャンプ、ジャンプが終わったら即座に待機(走る)アニメーションに遷移させるため、Has Exit Timeはオフにしよう。



・元のジャンプアニメーションの再生時間を調整してみよう こちらのページで説明した手法で調整しよう。出だしはスピーディに、着地はしゃがみの出だしまで含めたほうがジャンプらしくなると思う。

・Transition Duration(トランジション・デュレーション、遷移にかかる時間)を短くしてみよう ボタンを連打するとジャンプアニメーションが出ないのに飛び上がってしまうことがある。これはアニメーションの遷移中にジャンプ判定がされると遷移前(待機や走る)アニメーションの再生が優先されてしまうためだ。


待機や走るアニメーションのままジャンプしてしまう


トランジション・デュレーションをゼロにすると……


遷移中の時間がゼロになるため、ジャンプアニメーションが正しく再生される


待機→走る の遷移時間をゼロにしたのでキビキビした動きになった

なんか難しいっすね 今回
実際にいじったほうが
楽しいと思うんだよなー



ゲームパッドで3Dモデルをジャンプさせまくる図(エンコ殺しなので動画にて)。もちろんボタンを押すと攻撃やキックもしてくれるぞ。