【Unity初心者向け】Animator基礎編④|Transitionを理解しよう|Has Exit TimeとTransition Duration
前回の記事では「Any State」を使って、攻撃のAnimationを発動する方法を確認しました。
UnityのAnimatorでは、Idle から Walk、前回のように Any State
から Attack というように、アニメーションを切り替えながらキャラクターを動かします。
このアニメーション同士をつないでいる矢印が、Transition(トランジション)です。
これまでの記事でもTransitionを作ってきましたが、Inspectorを見ると、次のような設定項目が並んでいます。
Has Exit Time
Exit Time
Transition Duration
Fixed Duration
名前だけでは、何を設定する項目なのか少し分かりにくいですよね。
今回は、前回作成した攻撃アニメーションを使いながら、Transitionのタイミングを調整していきます。
特に重要なのが、次の2つです。
いつ、次のアニメーションへの切り替えを始めるか
どのくらいの時間をかけて切り替えるか
この2つを理解すると、入力への反応がよく、自然に見えるアニメーションを作れるようになります。
Animator 基礎編【全5回】
Animatorとは? ― IdleとWalkを切り替える
Parameterの使い方 ― Bool / Float / Int / Trigger
TriggerとAny State ― 攻撃アニメーションを作る
Transitionを理解する ― Has Exit Time / Duration
Animation Event ― アニメーションから処理を呼び出す
今回のゴール
今回は、前回作成した攻撃アニメーションのTransitionを調整します。
攻撃ボタンを押したら、すぐにAttackへ切り替える
攻撃アニメーションは、最後まで再生してからIdleへ戻す
アニメーションが切り替わる時間を調整する
最終的には、次のような設定にします。

Transitionとは?
Transitionは、あるStateから別のStateへ移るための切り替えルールです。
たとえば、次のような切り替えに使われます。
IdleからWalkへ移る
WalkからIdleへ戻る
Any StateからAttackへ移る
AttackからIdleへ戻る
Animatorウィンドウでは、State同士をつないでいる矢印がTransitionです。
Transitionをクリックすると、Inspectorに切り替えのタイミングや条件を設定する項目が表示されます。

Has Exit Timeとは?
まずは、TransitionのInspectorにあるHas Exit Timeから見ていきましょう。
Has Exit Timeは、簡単にいうと、
現在のアニメーションが指定した再生位置まで進むのを待つかどうか
を決める設定です。
Has Exit TimeがOFFの場合
Has Exit Time が OFF の場合は、現在のアニメーションの再生位置を待ちません。
Condition に設定した条件を満たすと、その時点から次の State への遷移を始めます。
たとえば、Idle から Attack へ移る Transition に、Attack Trigger を設定したとします。
Has Exit Time が OFF なら、Idle アニメーションの途中であっても、Triggerを受け取った時点で Attack への遷移が始まります。
攻撃やジャンプなど、ボタンを押したらすぐに反応してほしい動作に向いています。
Has Exit TimeがONの場合
Has Exit Time が ON の場合は、条件を満たしただけでは、すぐに遷移するとは限りません。
現在のアニメーションが、Exit Time で指定した位置まで進んでから、次のStateへの遷移を始めます。
ここで重要なのは、Has Exit TimeをONにすると、必ず最後まで再生するわけではないという点です。
どこまで再生してから遷移するかは、Exit Timeの数値によって決まります。

Exit Timeはアニメーションの再生位置
Exit Time は、アニメーションのどの位置から遷移を始めるかを指定する数値です。
基本的には、秒数ではなく、Animation Clip 全体に対する再生割合として考えます。
たとえば、長さが1秒の攻撃アニメーションでExit Timeを0.8に設定すると、およそ0.8秒の位置から次のStateへの遷移が始まります。
ただし、Animation Clip の長さが2秒なら、同じ0.8でもおよそ1.6秒の位置になります。
つまり、Exit Time = 0.8は「0.8秒」という意味ではなく、アニメーションの80%の位置という意味です。

「切り替わる位置」ではなく「遷移が始まる位置」
ここは、少し注意が必要です。
Exit Time は、次のアニメーションへ完全に切り替わる位置ではありません。
正確には、
次のアニメーションへの遷移を始める位置
です。
Animatorでは、前のアニメーションから次のアニメーションへ移るときに、2つの動きを少しずつ混ぜ合わせることがあります。
この混ざりながら切り替わる期間が Transition です。
たとえば、Exit Time を0.8に設定している場合、アニメーションの80%の位置から、次のアニメーションとの混ざり始めます。
そのため、Transition の時間が長いと、元のアニメーションの終盤が薄くなり、最後の動きが見えにくくなる場合があります。

攻撃アニメーションで確認してみよう
前回作成した攻撃アニメーションには、次の2つのTransitionがあります。
Any State → Attack
Attack → Idle
この2つでは、Has Exit Timeの使い方が異なります。
Any StateからAttackへ移る場合
攻撃ボタンを押したときは、現在のアニメーションを待たずに、すぐ攻撃へ移ってほしいところです。
そこで、Any State → Attackは次のように設定します。
Has Exit Time:OFF
Condition:Attack

前回作成した Attack Trigger が送られると、その時点からAttackへの遷移が始まります。
なお、Any State は通常の Animation Clip を再生するStateではありません。そのため、Any Stateから作成したTransitionでは、最初から Has Exit Time が OFF になっています。
ここでは「Any Stateからの攻撃は、条件を満たしたらすぐに切り替える」と覚えておけば大丈夫です。
AttackからIdleへ戻る場合
一方、攻撃からIdleへ戻るときは、攻撃アニメーションを途中で終わらせたくありません。
そこで、Attack → Idleは次のように設定します。
Has Exit Time:ON
Exit Time:1
Condition:なし

これで、Attackを1回分再生したあと、自動的にIdleへの遷移が始まります。

AttackのLoop Timeを確認しよう
単発の攻撃アニメーションでは、Animation Clip の Loop Time をOFFにしておきます。
Loop Time が ON なっていると、Attackが繰り返し再生され、意図したタイミングでIdleへ戻らないように見えることがあります。
Projectウィンドウで攻撃の Animation Clip をダブルクリック、InspectorからLoop Timeを確認しましょう。
Attack
Loop Time:OFF

IdleやWalkは繰り返し再生するため、基本的にLoop TimeをONにします。
一方、攻撃やダメージなどの単発アニメーションは、OFFにするのが基本です。
Transition Durationとは?
次は、Transition Durationを見ていきましょう。
Transition Duration は、前のアニメーションから次のアニメーションへ、どのくらいの時間をかけて切り替えるかを指定する項目です。
Transition Duration が長いと、2つのアニメーションが長く混ざりながら切り替わります。
Transition Duration が短いと、素早く次のアニメーションへ切り替わります。
Durationが長い場合
アニメーション同士が滑らかにつながる
切り替えがゆっくりになる
攻撃のような動作では、反応が鈍く見えることがある
攻撃の最初や最後の動きが分かりにくくなることがある
Durationが短い場合
入力に対して素早く反応する
動作の開始が分かりやすい
短すぎると、切り替わりが不自然に見えることがある
攻撃アニメーションでは、まず0~0.1程度の短い値から試してみると、違いを確認しやすいでしょう。
最適な値は、Animation Clipの長さやキャラクターの動きによって変わります。実際にゲームを再生しながら調整してください。

Fixed Durationとは?
Transition Duration の近くには、Fixed Duration という項目があります。

これは、Transition Duration の数値をどのように扱うかを決める設定です。
Fixed Duration がOFFの場合、Transition Duration は、Animation Clip の長さに対する割合で指定します。
たとえば、Transition Duration が 0.25 なら、Animation Clip の長さの 25% を使って切り替えます。
Fixed Duration をONにすると、Transition Duration を秒数で指定できます。
Fixed Duration:ON
Transition Duration:0.1
この場合は、Animation Clip の長さに関係なく、0.1秒かけて切り替わります。
秒数で調整したい場合は、Fixed DurationをONにした方が、初心者には分かりやすいでしょう。

今回のおすすめ設定
今回の攻撃アニメーションでは、次の設定から試してみましょう。
Any State → Attack
Has Exit Time:OFF
Fixed Duration:ON
Transition Duration:0~0.1
Condition:Attack

Attack Triggerを受け取ったら、すぐに攻撃への遷移を始めます。
Attack → Idle
Has Exit Time:ON
Exit Time:1
Fixed Duration:ON
Transition Duration:0~0.1
Condition:なし

攻撃アニメーションを1回分再生してから、Idleへの遷移を始めます。
移動入力が続いている場合は、いったんIdleへ戻ったあと、これまでに設定したParameterの条件によってWalkへ切り替わります。
設定を変えて違いを確認しよう
Animatorの設定は、数値だけを見ても動きが想像しにくいことがあります。
次のように設定を変えながら、実際の動きを比較してみましょう。
Has Exit TimeをOFFにする
条件を満たした時点から遷移が始まります。
攻撃ボタンを押したときの反応を確認してみましょう。
Exit Timeを0.5にする
攻撃アニメーションの半分を再生した位置から、Idleへの遷移が始まります。
攻撃が途中で終わったように見えるはずです。
Exit Timeを1にする
攻撃アニメーションを1回分再生してから、Idleへの遷移が始まります。
攻撃の動きを最後まで見せたい場合に適しています。
Transition Durationを長くする
AttackとIdleが長く混ざり、攻撃の終わりがぼんやりして見える場合があります。
最後にDurationを短く戻し、どちらが自然に見えるか比較してみましょう。
今回のまとめ
今回は、AnimatorのTransitionについて学びました。

次回はAnimation Event
次回は、Animation Eventを使って、アニメーションの途中から処理を呼び出します。
たとえば、攻撃アニメーションの武器を振り下ろした瞬間に、次のような処理を実行できます。
攻撃判定を発生させる
効果音を鳴らす
エフェクトを表示する
見た目の動きとゲーム内の処理を合わせるために、とても便利な機能です。
次回は、攻撃アニメーションのタイミングに合わせて処理を実行する方法を、初心者向けに解説します。
こちらはUnity初心者向けの記事をテーマ別にまとめています。
▼ Unity初心者向け記事まとめはこちら
こちらのマガジン「ミニゲーム作成講座 全8回セット」でもシーンの切り替えなどを活用して、初心者でも知識ゼロから作れるミニゲーム作成講座を紹介しています。

さらにステップアップの「スマホで遊ぶジャンプゲーム 8回セット」のマガジンもぜひご活用ください。

ファイブボックスでは、スクラッチやUnityの個別指導のオンラインレッスンを行っています。
ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。
いいなと思ったら応援しよう!
よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!