アニメーション遷移 (Animation Transition) は、ステートマシン が、あるアニメーションステートから別のアニメーションステートへ切り替わったりブレンドしたりすることを可能にします。遷移は、複数のステート間のブレンドにかかる時間の長さを指定するだけでなく、どのような条件下でブレンドが始まるかを指定します。特定の条件が満たされたときにのみ遷移が起こるように設定することもできます。これらの条件を設定するには、アニメーターコントローラー (Animator Controller) のパラメーターの値を指定します。
例えば、あるキャラクターに「巡回中」のステートと「休止中」のステートがあるとします。その巡回中と休止中との間の遷移を、Alertness (警戒度) パラメーターの値が一定のレベルを下回ったときにのみ起こるように設定することができます。
フィールドに名前を付けるには、下のように、フィールドに名前を入力します。
ステートの Inspector ウィンドウに、ステートが使用する遷移が下のように表示されます。
同時にアクティブにできる遷移は1 つだけです。ただし、設定によって、現在アクティブな遷移を別の遷移で中断することが可能です (後述の 遷移の割り込み を参照)。
遷移のプロパティーを表示するには、アニメーターウィンドウで 2 つのステートをつなぐ遷移の線をクリックします。プロパティーが Inspector ウィンドウに表示されます。
以下のプロパティーを使用して、遷移や、現在のステートとその次のステート (遷移によって繋がれた 2つのステート) のブレンドの仕方を調整します。
プロパティー | 機能 |
---|---|
Has Exit Time | Exit Time はパラメーターに依存しない特別な遷移です。パラメーターの代わりにステートの正規化された時間に依存します。このオプションを有効にすると、遷移は Exit Time で指定した特定の時間に発生します。 |
Settings | 遷移に関する詳細設定が含まれる折り込みメニュー。 |
Exit Time |
Has Exit Time が有効な場合、Exit Time の値は遷移が始まる正確な時間を表します。これは正規化された時間で表されます (例えば Exit Time 0.75 は、そのアニメーションの再生が75%に到達した最初のフレームを意味し、Exit Time の条件は true です)。次のフレームでは、条件は false です。 ループのアニメーションに関しては、Exit Time が 1 より小さい場合は、ループのたびに判定されます。そのため、これを使ってアニメーションの遷移の適切なタイミングをループのたびに計ることができます。 Exit Time が 1 より大きい場合は、1 度だけ判定されます。そのため、決まった回数のループを行った後、特定の時点で終了することができます。例えば、Exit Time 3.5 の遷移は、3.5 回ループを行った後 1 度だけ判定されます。 |
Fixed Duration | Fixed Duration をチェックすると、遷移時間は秒単位で決定されます。Fixed Duration をチェックしない場合は、遷移時間は遷移元のステートの正規時間に基づいて決定されます。 |
Transition Duration | 現在のステートの持続時間に対する遷移時間。Fixed Duration モードに応じて、正規化された時間または秒で表されます。これは、遷移グラフで 2つの青いマーカーに挟まれた部分として表示されます。 |
Transition Offset | 遷移先ステートの再生が開始される時点のオフセット。例えば 0.5 とすると、遷移先ステートは、そのタイムラインの 50% の時点から再生され始めます。 |
Interruption Source | 遷移が割り込まれる状況を制御するために使用します (後述の 遷移の割り込み 参照)。 |
Ordered Interruption | 現在の遷移が、その順序に関係なく他の遷移によって割り込まれることを可能にするかどうかを決定します (後述の 遷移の割り込み 参照)。 |
Conditions | 遷移に 1 つまたは複数の条件を設定することができますが、まったく条件を設定しないことも可能です。遷移に何も条件が設定されていない場合は、Unity Editor は Exit Time のみを考慮し、終了時間に達すると遷移します。遷移が 1 つまたは複数の条件を持っている場合、すべての条件が満たされたときにのみ遷移が発生します。 それぞれの条件は、以下の要素で構成されています。 - イベントパラメーターがひとつ。この値が条件で考慮されます。 - 条件述部がひとつ (必要な場合のみ。例えば、float の場合、Less / Greater) - パラメーターの値がひとつ (必要な場合のみ)。 遷移に Has Exit Time が選択されておりかつ 1 つ以上の条件がある場合、条件は、ステートの Exit Time が過ぎるまでチェックされません。これにより、遷移がアニメーションの特定の部分内でのみ起こるようにできます。 |
Interruption Source と Ordered Interruption プロパティーを使って、遷移の割り込みの仕方を制御します。
遷移の順序は、概念的に説明すると、キューのような構造で、遷移が予約され、先に予約されたものから順に実行されます。
AnyState の遷移は、常にキューの先頭に加えられます。その後、他の遷移が Interruption Source の値に基づいてキューに加えられます。
値 | 機能 |
---|---|
None | 他の遷移を加えることはできません。 |
Current State | 現在のステートからの遷移を予約できます。 |
Next State | 次のステートからの遷移を予約できます。 |
Current State then Next State | 現在のステートからの遷移を予約し、それから、次のステートからの遷移を予約します。 |
Next State then Current State | 次のステートからの遷移を予約し、それから、現在のステートからの遷移を予約します。 |
注意 Interruption Source が None に設定されている場合でも、遷移は AnyState の遷移の 1 つによって割り込まれることがあります。
Ordered Interruption プロパティーによって、予約されたものがどのようにパースされるかが変わります。
その値によって、予約されたもののパースは以下のリストにある異なるタイミングで終了します。
値 | 終了タイミング |
---|---|
Checked | 有効な遷移、または、現在の遷移が見つかっているとき。 |
Unchecked | 有効な遷移が見つかっているとき。 |
AnyState の遷移だけが、それ自体によって割り込み可能です。
遷移の割り込みに関するさらに詳しい情報は、Unity ブログの State Machine Transition Interruptions を参照してください。
上にリストアップされた設定項目は、フィールドに手動で数字を入力して調整することもできますが、遷移グラフで操作することも可能です。遷移グラフに表示された要素を変更すると、フィールドの値も変化します。
グラフの遷移プロパティーを、以下のように変更できます。
遷移に所属する現在のあるいはその次のステートが Blend Tree (ブレンドツリー) ステートである場合、インスペクターに BlendTree Parameters (ブレンドツリーパラメーター) が表示されます。これを使ってブレンドツリーの値をいろいろな設定にし、遷移がどのようになるかをプレビューできます。 ブレンドツリーに長さの異なるクリップが含まれる場合は、ブレンドツリーが短いクリップと長いクリップ両方を表示している場合の、遷移の見え方をテストしてみることをお勧めします。これらの値を調整しても、ランタイムでの遷移の見え方には影響しません。これは、異なる状況下で遷移がどのような見え方をするかプレビューするためだけにある機能です。
遷移は、1 つまたは複数の条件を持つことができますが、まったく条件を持たないことも可能です。まったく条件を持たない場合 Exit Time のみが考慮されます。Exit Time に到達すると遷移が起こります。遷移に 1 つまたは複数の条件がある場合、すべての条件が満たされたときにのみ遷移が発生します。
それぞれの条件は、以下の要素で構成されています。
遷移の Has Exit Time が有効で、かつ、1 つ以上の条件がある場合、これらの条件はステートの Exit Time が過ぎるまでチェックされません。これによって、遷移をアニメーションの特定の部分内でのみ発生させることが可能になります。