【TopDown Engine】Demoキャラクターで学ぶAnimatorの基本操作

スポンサーリンク
TopDownEngine
スポンサーリンク

前書き

TopDown Engineでは、標準のAnimatorと組み合わせることで「待機(Idle)」「移動(Walk)」「攻撃(Attack)」などのモーション切替を簡単に実現できます。

本記事では、TopDown Engine を使っている方向けに、Demo に含まれる Koala キャラクターを例に各アニメーションがどのように切り替わっているか を順を追って解説します。
(Animator を最初から作るのではなく、まずは Demo の Animator を解析して学ぶ手順になっています。)

Demo の Koala を確認する

今回もDemoにあるキャラクターを参考にTopDownEngineでアニメーションを動かしていく方法を見ていこうと思います。

  • Demo シーン(または Demo オブジェクト群)から Koala オブジェクトを探して選択します。
  • Koala の中にある KoalaModel(見た目のモデル)を選択します。
  • Animator コンポーネントがアタッチされていることを確認します。
  • Controller にセットされている KoalaAnimatorControllerを開き、Animator ウィンドウでステートと遷移を確認します。
Koala
KoalaAnimator

デフォルトでは Damage / DownHole / Jumping / Walking / Running / Dead / Idle 等のステートが設定されているはずです。Play モードで Koala を操作して、Animator の遷移挙動を実際に確認してみてください。

KoalaAnimator

以下の動画は実行した時のKoalaAnimatorControllerの動きになります。歩いたり走ったりするとKoalaAnimatorControllerのAnimatorが遷移していることが分かりますね。

TopDownEngineではCharacterコンポーネントやAbilityコンポーネントを通じてAnimatorに自動でパラメータを渡しています。(ものによって自分で設定したりするAnimatorもあります)そのため自分でAnimator Controllerを作る必要はなく、基本的には既存のAnimator Controllerを使ってキャラクターのアニメーションを実現するほうが楽です。

では早速、それぞれのアニメーションが遷移する条件を一つずつ見ていきましょう

Idle / Walk / Run の切り替え(移動系)

移動系の切り替えは主に CharacterMovement CharacterRun が制御します。

  • Walk
    • CharacterMovement が速度を監視し、Animatorの Speed パラメータを更新
    • Speed = 0 → Idle、Speed > 0 → Walk に自動で切り替わる
      IdleThresholdがスクリプト上にあり、この閾値を超えた場合にWalk状態になるようにスクリプトが制御しています。
  • Run
    • Shitを押しながら移動することでRun状態になります。Run状態になるとアニメーションのRunフラグが立つようにスクリプトが制御しています。
ChracterMovement
ChracterRun

以下の動画はWalkとRunをしたときのAnimator遷移になります。

  • PlayモードでKoalaを操作
  • 移動するとWalkモーションに切り替わる
  • Shitを押しながら移動するとRunモーションに切り替わる
  • 停止するとIdleに戻る

Attack(攻撃)モーション

Attack は武器側(Weapon スクリプト)で Animator のパラメータ名を設定して制御します。Weaponスクリプトを見ると Animation Parameters Names という項目がありここで任意の文字列を設定することが出来ます。

Animation Parameters Names
  • Weapon のインスペクターにある Animation Parameters Names に、Animator 側のパラメータ名(例:Slash1, Slash2, Slash3)を入力しておくと、該当 Paramter が True になります。
  • Animator 側では、これらの Trigger を条件に Idle/Walk → Attack に遷移するように設定します(多くは Trigger 型)。
SwordAnimator

以下はKoalaSwordを動かしたときのAnimatorの遷移になります。

Damage と Death モーション

これらは Health コンポーネント側から制御されます。実装はハードコーディングされており、以下のような形で Trigger を直接呼び出します。

TargetAnimator.SetTrigger(“Damage”);
TargetAnimator.SetTrigger(“Death”);

  • Damage
    • キャラクターがダメージを受けたときに再生されるモーション
    • Health コンポーネントがAnimatorの Damage Trigger を有効にする
    • Idle / Walk / Attack からDamageに遷移後、元の状態に戻る
  • Death
    • キャラクターのHPが0になるとDeathステートに遷移
    • Animator ControllerでDeathモーションに遷移すると再びIdleやWalkに戻ることはない
    • Health コンポーネントがDeathトリガーを制御

以下は敵からダメージを受けた時のアニメーションの遷移になります。ダメージを受けるときにDamageFlagがTrueになり、体力が”0″になるとAliveフラグがFalse(=Death状態)になります。

Jumpモーション

JumpモーションについてはCharacterJumpスクリプトから設定されています。こちらについてもDamageと同様にスクリプト内でハードコーディングとなっており、Jumpingという名前でフラグが設定されるようになっています。

CharacterJump2D
  • Koalaはデモではジャンプできる設定がある場合のみ有効
  • CharacterJump コンポーネントがJumpトリガーをAnimatorに送る

以下動画はJumpしたときの動きになります。デフォルトではスペースボタンでJump動作になります。

まとめ

今回は Koala の Animator を題材にして、TopDown Engine でのモーション切替の仕組みを確認しました。

  • 移動系は CharacterMovement / CharacterRun が速度や入力を監視して Idle / Walk / Run を制御する
  • 攻撃系は Weapon コンポーネントを通して Animator に Trigger を送る
  • ダメージ・死亡は Health コンポーネントから直接 Trigger を設定する
  • ジャンプは CharacterJump が専用フラグを渡して制御する

つまり「移動は Movement」「攻撃は Weapon」「ダメージは Health」「ジャンプは Jump」と、担当コンポーネントごとに Animator と連動しているのが分かります。またTriggerによってはハードコーディングしているものもあるため、オリジナルのアニメーションを作りたい場合はなるべくDemoにあるTrigger名をそのまま使うほうがよいです。

この仕組みを理解しておくと、オリジナルキャラクターを作るときにも「どのコンポーネントがパラメータを更新しているか」を意識しながら、自分の Animator Controller に自然にアニメーションを組み込めるようになります。

まずは Demo を参考にして動きを再現し、慣れてきたら自作キャラのAnimatorを差し替えたり、新しいアニメーションを自分で作ってみましょう!

コメント

タイトルとURLをコピーしました