【Unityアセット】GameCreatorで4足歩行の動物を動かしたい

こちらはUnityアセット冬のアドベントカレンダー2019の6日目の記事です。

目的

Unityのアセット『GameCreator』で4足歩行の動物を動かす。 なぜなら、ブラックフライデーで動物アセットを衝動買いしてしまったので…!

Game Creator

Poly Art Animal Set

GameCreatorってなんじゃい

GameCreatorでできることは

  • FPS、TPSなどのカメラ視点
  • キャラクターのIK、移動、ジャンプ操作
  • トリガー駆動のイベント発火

です。

(追加アセットなども制作されているようで、私はシューターモジュールを買ったりしています。)

GameCreatorで動かせるキャラクターは基本的には人型、Humanoidのモデルです。 Humanoidモデルであれば、インスペクターにモデルデータをドラッグアンドドロップするだけで、すぐにキャラクター操作ができるようになります。

f:id:bbbbehabeer:20191129203556g:plain
標準のキャラクター

f:id:bbbbehabeer:20191129203603g:plain
別のモデルを設定

さて、ここに4足歩行の動物モデルを置いたらどうなるでしょう。

f:id:bbbbehabeer:20191129211513g:plain
狼を置いてみた

アニメーションがだめみたいですね!

アニメーションに対応してやるよ!

GameCreatorにはステートという機能があります。 Animatorを個別のアセットに対応させるための機能です。 今回の場合は、humanoidのAnimatorを狼のモデルに対応させます。

やることは

  • プロジェクトウィンドウで右クリックして、ステートを作成する
  • ヒエラルキーで下記の項目に狼のアニメーションを設定する
    • Idle、RunForward、JumpRun、JumpIdle、WalkForward
  • モーションをイイ感じに修正する

ステートをつくって設定する

まずはステートをつくりましょう。 プロジェクトウィンドウからGameCreatorを選んで、Locomotion Stateを作成しましょう。 Locomotionは移動用のアニメーションだそうです。(ジャンプも含まれます)

f:id:bbbbehabeer:20191129224051p:plain

f:id:bbbbehabeer:20191129223400p:plain
ステートをつくる!

次に作成したステートにAnimation Clipを設定しましょう。 初期状態ではなにも設定がされていないので、狼用のAnimation Clipを追加します。

f:id:bbbbehabeer:20191130191337p:plain
Animation Clipを追加

最後にPlayerオブジェクトにステートを設定しましょう。(正確にはCharacter Animatorというコンポーネントに) Playerオブジェクトを選択し、Default Stateに先ほど作成したステート(WolfLocomotion)を割り当てましょう。

f:id:bbbbehabeer:20191129223843p:plain
ステートを設定

これで動くか確認します。再生ボタンをクリック!

再生します。

f:id:bbbbehabeer:20191130161920g:plain
動いた!けど…

動くようになりました!けどなんだこの動きは。

Animation Clipの問題です。オブジェクトルートの位置情報がアニメーションに組み込まれているので、こんな動きになっちゃいます。 なので各Animation Clipからこれらの不要な位置情報を消します。

はいここで再生。

f:id:bbbbehabeer:20191130170358g:plain
イイ感じ!

それっぽくなりました!けどかがんでる状態からジャンプできていますね。膝だけであれだけの跳躍を。

ジャンプのタイミングをイイ感じにしてやるよ!

ならばジャンプのタイミングをイイ感じにしましょう。 要はアニメーションを再生してから、任意の秒数を待機して実際の位置情報でジャンプを開始すればよいのです。

スクリプトを修正する

Playerの挙動はPlayerCharacterコンポーネントで書かれています。 PlayerCharacter.csを複製してスクリプトを修正します。 ファイル名はPlayerFoxCharacter.csにしました。

PlayerCharacterの代わりにPlayerFoxCharacterをアタッチします。 Time Between Jumpsを0.3に設定しましょう。 本来はジャンプ間のクールタイムですが、修正したスクリプトでは、 ジャンプ前の待機時間にも反映させるようにしています。

f:id:bbbbehabeer:20191130193646p:plain
こんな感じ

再生ボタンを押します。

f:id:bbbbehabeer:20191130195038g:plain
すごくイイ感じ!

すごくいい感じじゃないですか!?大変よいと思います!

他のアニメーションも追加、落下処理を調整など、もっとよくするための作業は残ってますが、 あとは同じような作業の繰り返しなので省略します。

というわけでここでタイマーストップです。 お疲れ様でした。