前書き
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 ウィンドウでステートと遷移を確認します。


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

以下の動画は実行した時の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フラグが立つようにスクリプトが制御しています。


以下の動画はWalkとRunをしたときのAnimator遷移になります。
- PlayモードでKoalaを操作
- 移動するとWalkモーションに切り替わる
- Shitを押しながら移動するとRunモーションに切り替わる
- 停止するとIdleに戻る
Attack(攻撃)モーション
Attack は武器側(Weapon スクリプト)で Animator のパラメータ名を設定して制御します。Weaponスクリプトを見ると Animation Parameters Names という項目がありここで任意の文字列を設定することが出来ます。

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

以下は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という名前でフラグが設定されるようになっています。

- 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を差し替えたり、新しいアニメーションを自分で作ってみましょう!
コメント