3.Animatorで分岐する - Morijellyfish-org/UnityAnimationGuide GitHub Wiki
Animator.controllerを開き、Animation_Aのステートを削除します。
その後右クリックして Create State > Empty
から新しいステートを作成します、下の画像の様になっていれば大丈夫です。
NewStateだと名前がわかりにくいので、適当な名前を付けてあげて下さい。今回はBranch
とします。
命名はInspectorから出来ます。
Animation_A.anim
,Animation_B.anim
をD&Dで追加します。
Branch
を右クリックしてMakeTransition
を選択し、Animation_A
,Animation_B
と接続します。
Animation_A
,Animation_B
からExitへもそれぞれ接続します。
次の画像の様になっていれば大丈夫です。
Tip
ステートの位置は基本的に挙動に影響を与えませんが、整頓する事で見やすくなります。
Animatorウィンドウ左上のLayers / Parameters
のParametersを選択し、プラスボタン '+' からBool
を選択し、値を追加します。
値の名はBack
とします。下の画像のようになっている事を確認して下さい。
Branch
ステートを選択し、InspectorウィンドウのTransitionsに条件を付けていきます。
Branch->Animation_A
を選択し、Conditionsを追加します、Back : false
とします。
Branch->Animation_B
を選択し、Conditionsを追加します、Back : true
とします。
どちらのTransitionも、HasExitTimeのチェックを外してください。
動作の確認をします、Animatorウィンドウが見える状態でSceneを実行する事で、何が再生されているか等がわかります。
ParametersのBack
のチェックを外して実行するとAnimation_A
、チェックを付けて実行するとAnimation_B
が再生される事を確認できたら完了です。
Animation_B
の中身が存在しないので、作りましょう。Cube
を選択して、Animationウィンドウを見るとAnimation_A
の編集画面が開きます。
しかし編集したいのはAnimation_B
なので、それを開く手順から説明します。
Previewの下にあるAniamtion_Aのプルダウンを選択すると、適用されているAnimatorが持つAnimationの一覧が出てきます、これを使ってAnimation_B
を選択する事で他のAnimationを編集する事が出来ます。
内容はPosition.zを0から-1にするものにして、後ろに進む振舞をさせます、LoopTimeの設定と補完の設定を忘れないようにしてください。
このParameters/Back
の値を使う事で、再生するAnimationを切り替えられるようになりました。外部から切り替える事で、ゲーム等でもこの機能を活用する事が出来ます。
VisualScriptingであれば以下のように
C#であれば以下のように
Animator animator;
void Start()
{
animator = GetComponent<Animator>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
animator.SetBool("Back", !animator.GetBool("Back"));
}
}
する事で、Animatorが持つ値の入出力が可能です。 詳細は公式のドキュメントを参照して下さい。
しかし現在の移動分岐は、それぞれのAnimationが再生し終わるのを待つため、1秒単位でしか切り替わりません、そこでAnyStateを使った分岐を紹介します。
Transitionを下の画像のようにつないで、それぞれAnyState->Animation_A
,AnyState->Animation_B
に条件を指定する事で機能します。
これによってSettings/TransitionDuration
を最小単位として高頻度での更新を行う事が出来ます。