見出し画像

【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回】

  1. Animatorとは? ― IdleとWalkを切り替える

  2. Parameterの使い方 ― Bool / Float / Int / Trigger

  3. TriggerとAny State ― 攻撃アニメーションを作る

  4. Transitionを理解する ― Has Exit Time / Duration

  5. 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があります。

  1. Any State → Attack

  2. 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の個別指導のオンラインレッスンを行っています。
ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。

いいなと思ったら応援しよう!

ファイブボックス よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!