Developer

【初心者Unity】アニメーションの遷移を検証③【遷移の割り込み】
2021.08.31
Lv1

【初心者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への割り込み遷移が失敗しました。

 
 

連載目次リンク

「初心者のための」Unityゲーム制作 目次
 

Unity実践編 - 目次リンク

実践Unityゲームプログラミング 連載目次