キャラクタ用のアニメータ・コントローラは、スクリプトと同じように作成します。開発サイクル全体を通して、再利用、サポート、デバッグができるよう、シンプルにします。
以下のスクリーンショットはすべて、『ファイアウォッチ』のキャラクター、ヘンリーのアニメーションのものである。 ファイヤーウォッチのヘンリーのアニメーションから。
ブレンド・ツリーは複雑さを隠すのに適している。ブレンド・ツリーはコードを呼び出さないので、状態を持たない。あなたが定義したパラメーターに基づいて、異なるクリップ間をブレンドします。
この意義は、ゲームの他の部分を壊す心配なしに、ブレンド・ツリーを反復できることだ。ブレンド・ツリーでは、ほとんどのアニメーションにビヘイビアを関連付けることができないため、複雑なステートの網目を隠すことができ、バグを未然に防ぐことができる。
レイヤーをスクリプトのクラスと考えるとわかりやすい。レイヤー内のすべてのものが、論理的にも行動的にも同じ機能を果たすようにしたい。これは、個々のレイヤーが、他のレイヤーをどのようにオーバーライドするか、つまり、特定のボーンに影響を与えるかどうか、そのレイヤーが加算的かどうか、などをコントロールするからである。
ステートマシンやサブステートマシンにおける再利用可能で論理的なパターンは、開発をスピードアップし、デバッグを容易にし、バグを減らすことができる。
以下のセクションでは、レイヤーを構成するのに便利なパターンを紹介する。
このパターンを使えば、トランジションが空の状態へ出て行って戻ってくるのがはっきり見えるので、デバッグが容易になる。ハブのすべてのスポークは、触れた状態をリセットする必要がある。
スポークは、以下のパターンを使ってサブステート・マシンを作るための確かな候補である。
ステートを「イントロ」→「実行/ループ」→「アウトロ」というパターンにグループ化することで、アニメーション・イベントやステートマシンのビヘイビアを、イントロとアウトロのステートにきれいにアタッチできる。ブレンド・ツリーのように、ゲームを壊してしまう心配をすることなく、内部の実行/ループ状態を反復して変更することができる。
中断可能なアニメーション、特にプレーヤーの入力によるアニメーションでは、クリップを2つの部分に分割します。まず、クリティカル・セクションを維持する。クリティカル・セクションには、常に完了までプレーしなければならないすべての状態変化、効果、損害が含まれる。第二に、アイドルに戻るときに見栄えがよく、新しい入力によって中断できるような決済アニメーションを考案する。
アニメーションが思い通りに動き、表示されたら、アニメーターの状態をゲームの状態にフィードバックする必要がある。留意点については、以下のセクションを参照のこと。
ステートマシンのビヘイビアは、任意のアニメーション・ステートに付けることができるコードのビットです。ビヘイビアをアニメーター自身の状態に直接結びつけるために使う。
その中で複雑なゲームプレイのコードを書くのは避けよう。ステートの変更がどこから来ているのかを追跡するのが難しくなるからだ。ステートマシンのビヘイビアを使ってゲームプレイのコードを動かすのであれば、メッセージング・システムを活用し、マネージャー・クラスと会話し、より高いレベルのパラメーターからコードをトリガーする。
Debug.Break()は、最も効果的なステートマシン動作の1つです。これをアニメーションのセットアップのどこかに取り付ければ、ビジュアル・スクリプト・システムと同じようなブレークポイントができる。
必要に応じてC#コードを使用する。何百、何千ものトランジションを管理したり、あちこちにAnyStateトランジションをフックするのではなく、Animator.PlayまたはAnimator.CrossFadeを使用して、コードから動的に直接トランジションを作成します。それでもまだコントロールが十分でない場合は、UnityのPlayables APIを調べると、コードを使ったアニメーションの方法がもっと見つかります。いくつかの例をここで見ることができる。
アニメーションイベントは、アニメーションクリップの特定の瞬間を、ゲームの特定の状態変化に結びつけます。視覚効果や音響効果などの要素を際立たせるために使われる。しかし、発射される前にクリップから移行した場合、発射されることはない。これを解決する1つの方法は、ステートマシンのビヘイビアを追加することである。このビヘイビアは、ゲーム内で他に何が起きても(起きなくても)、特定の時点に達したときに常にイベントが発生するようにする。