
スクリプトのようにキャラクターのためのアニメーターコントローラーを作成します。再利用、サポート、デバッグが簡単になるように、開発サイクル全体で使用できるようにします。
以下のすべてのスクリーンショットは、Campo SantoによるFirewatchのキャラクターHenryのアニメーションからのものです。

ブレンドツリーは複雑さを隠すのに最適です。ブレンドツリーは、コードに戻ることがないため、状態を持ちません。定義したパラメータに基づいて異なるクリップ間をブレンドします。
これの重要性は、ゲームの他の部分を壊すことを心配せずにブレンドツリーを反復できることです。複雑な状態のウェブを隠し、将来的なバグを防ぐことができます。なぜなら、ブレンドツリーのほとんどのアニメーションに動作を結びつけることができないからです。

レイヤーをスクリプトのクラスとして考えると役立ちます。レイヤー内のすべてが同じ論理的および動作的機能を果たすことを望みます。これは、各個別のレイヤーが他のレイヤーをオーバーライドするかどうかを制御するためです。特定のボーンに影響を与えるかどうか、そのレイヤーが加算的であるかどうかなどです。
状態およびサブ状態マシンにおける再利用可能で論理的なパターンは、開発を加速し、デバッグを容易にし、バグを減少させることができ、同時に複数の人が類似のコンテンツを作成できるようにします。
以下のセクションでは、レイヤーを構造化するのに役立つパターンを紹介します。

このパターンは、遷移が空の状態に出て戻るのを明確に見ることができるため、デバッグを容易にします。ハブの各スポークは、接触するすべての状態をリセットする必要があります。
スポークは、以下のパターンを使用してサブ状態マシンを作成するのに適した候補です。

状態を「イントロ」 – 実行/ループ – 「アウトロ」のパターンにグループ化することで、イントロおよびアウトロの状態にアニメーションイベントやステートマシンの動作をクリーンに接続できます。ブレンドツリーと同様に、ゲームを壊すことを心配せずに内部の実行/ループ状態を反復して変更できます。

中断可能なアニメーション、特にプレイヤー入力駆動のアニメーションの場合、クリップを2つの部分に分けます。まず、常に完了まで再生される必要があるすべての状態変更、効果、およびダメージを含むクリティカルセクションを維持します。次に、アイドルに戻るのが見栄えが良く、新しい入力によって中断できるセトルアニメーションを考案します。
アニメーションが望ましい動作と外観を持つようになったら、アニメーターの状態をゲームの状態にフィードバックする必要があります。以下のセクションで考慮すべき重要なポイントを確認してください。
ステートマシンの動作は、任意のアニメーションステートに添付できるコードの一部です。それらを使用して、アニメーター自体の状態に直接行動を結びつけます。
その中に複雑なゲームプレイコードを書くことは避けてください。なぜなら、状態の変更がどこから来ているのかを追跡するのが難しくなる可能性があるからです。ステートマシンの動作を使用してゲームプレイコードを駆動している場合は、メッセージングシステムを活用してください。マネージャークラスに話しかけるか、より高いレベルのパラメータからコードをトリガーします。
Debug.Break()は、使用できる最も効果的なステートマシンの動作の1つです。アニメーションのセットアップのどこにでも取り付けることができ、視覚スクリプトシステムのブレークポイントに似たものを持つことができます。
適切な場所でC#コードを使用してください。何百、何千もの遷移を管理したり、あちこちにAnyState遷移を接続したりするのではなく、Animator.PlayまたはAnimator.CrossFadeを使用して、コードから直接遷移を動的に作成します。それでも十分な制御が得られない場合は、コードを使用してアニメーションするための他の方法を見つけるためにUnityのPlayables APIを調べてください。いくつかの例はここにあります。

アニメーションイベントは、アニメーションクリップの特定の瞬間をゲーム内の特定の状態の変化に結びつけます。視覚効果や音響効果などの要素を引き起こすために使用できます。ただし、クリップが発火する前に遷移すると、それは決して発火しません。これを解決する方法の一つは、特定の時点に達したときにイベントが常に発火することを保証するステートマシンの振る舞いを追加することです。ゲーム内で他に何が起こっても(または起こらなくても)。