【初心者Unity】アニメーションの遷移を検証③【遷移の割り込み】
1.はじめに
AnimatorControllerを使用することで、アニメーションを指定した条件で切り替えることができました。
⇒【初心者Unity】AnimatorControllerの基礎
今回はこの『指定した条件で切り替える』という部分について掘り下げていきたいと思います。
【初心者Unity】アニメーションの遷移を検証①【遷移条件】
【初心者Unity】アニメーションの遷移を検証②【ブレンド】
【初心者Unity】アニメーションの遷移を検証③【遷移の割り込み】
2.遷移の割り込み
あるアニメーションへの遷移途中で他のアニメーションへ遷移を切り替えることができます。
このことを遷移の割り込みと言います。
例えば、攻撃アニメーションへの遷移途中でダメージを受けた場合、攻撃アニメーションへの遷移を中断して、のけぞるアニメーションへ遷移する、というような挙動を実現することができます。
遷移の割り込みの設定には以下の2項目を使用します。
Interruption Source -> 遷移の割り込みの優先順位を決定する
Ordered Interruption -> Stateが設定している優先順位を参照する
以降では、以下の3つのアニメーションを使用して検証していきます。
Lateral -> 横方向に移動するアニメーション(ループ再生)
Vertical -> 縦方向に移動するアニメーション
Rotate -> 回転するアニメーション(ループ再生)
事前準備として、Animatorビューで以下の設定を行います。
■構成
■LateralからVerticalへのTransition作成
■LateralからRotateへのTransition作成
■Interruption Source
遷移の割り込みの優先順位を決定する項目です。
設定値は以下の5つから選択します。
None -> 遷移の割り込みは行われない
Current State -> 現在のStateから他のStateへの遷移の割り込みを許可する
Next State -> 遷移先のStateから他のStateへの遷移の割り込みを許可する
Current State Then Next State -> 後述
Next State Then Current State -> 後述
多少複雑ですが、順番に見て行きましょう。
■None
遷移の割り込みは行われません。
事前準備の設定を完了後、ゲームを再生してみましょう。
LateralからVerticalへの遷移中にTriggerを☑してもRotateへの遷移割り込みは行われません。
■Current State
現在のStateから他のStateへの遷移の割り込みを許可する設定です。
今回は、Lateralから伸びている2本のTransition間で割り込みを発生させます。
実際の挙動を見てみましょう。
LateralからVerticalへのtransitionの設定を以下のように書き換えて下さい。
ゲームを再生します。
Rotateへの割り込み遷移が成功しました。
■Next State
遷移先のStateから他のStateへの遷移の割り込みを許可する設定です。
ここで、新たにVerticalからRotateへのTransitionを作成し、以下のように設定します。
今回は、Lateral->Verticalの遷移中にVertical->Rotateの割り込み遷移を発生させます。
実際の挙動を見てみましょう。
LateralからVerticalへのTransitionの設定を以下のように書き換えて下さい。
ゲームを再生します。
Rotateへの割り込み遷移が成功しました。
■Current State Then Next State / Next State Then Current State
この2つはまとめて説明してしまいます。
状況としては、Current StateとNext State双方の割り込み遷移が同時に発生した場合にどちらを優先するか、という設定です。
Current State Then Next StateはCurrent Stateを優先し、Next State Then Current StateはNext Stateを優先します。
Current State Then Next State -> 青色の割り込みを優先
Next State Then Current State -> 赤色の割り込みを優先
■Ordered Interruption
Ordered InterruptionはStateで設定しているTransitionの優先順位を参照する設定項目です。
各StateはTransitionの優先順位を持っています。
例えば、LateralのInspectorを確認すると以下のような設定がなされています。
赤枠で囲った部分が優先順位を規程している箇所で、リストの上に記載されているほど優先順位が高くなります。
今回の場合、Rotateへの遷移よりもVerticalへの遷移を優先するということになります。
ここで、Current Stateの動作確認をした際の設定値を以下のように変更して、Ordered Interruptionの挙動を確認してみましょう。
ゲームを再生してみます。
先ほどは成功したRotateへの割り込み遷移が失敗しました。