Unity(C#)初心者・入門者向けチュートリアル ひよこのたまご

AndroidやiOS向けアプリを簡単に作れるゲーム開発環境Unity(ユニティ)の使い方を、チュートリアル方式で一緒に学びましょう!

【Unity開発】Animator Controllerの遷移設定(Duration等)【ひよこエッセンス】

Unity5.1.1f1 Personal(2015年6月)
f:id:hiyotama:20150624205139p:plain


ひよこエッセンスの時間です〜

今回はAnimator Controllerの記事の続きです〜遷移時の細かな設定を中心に見ていきます〜

hiyotama.hatenablog.com

Animator Controllerの遷移設定(Duration等)


前回記事でIdleからWalkへ遷移するアニメーションを作成することができましたが、下の赤枠部分の解説を丸々飛ばしてしまいましたので、今回解説していきたいと思います〜

f:id:hiyotama:20150628201614p:plain
Settings周辺の解説をします


まずはHas Exit Timeです〜

Has Exit Timeのチェックが外れている時はConditionsにてアニメーション遷移条件を決め、チェックが付いている時はアニメーション再生回数を決め、それが終了したらアニメーション遷移します〜


続いてExit Timeです〜

Has Exit Timeにチェックが付いている場合、ここでアニメーションを実行する回数を決めます〜

3に設定するとStateを3回実行したらアニメーション遷移、0.5に設定するとStateを半分実行してアニメーション遷移、といった具合です〜


続いてFixed Durationです〜

Durationは存続時間を表し、Unityではアニメーションが切り替わるのに要する時間を意味します〜
Duration時間内で徐々に遷移後アニメーションの度合いを強くしていくことで、スムーズなアニメーションを実現します〜


そのDuration時間を、遷移前アニメーションの長さを元に%で算出するか、秒を元に算出するか決めるのがFixed Durationです〜


Fixed Durationにチェックが入っていない場合、遷移前Stateのアニメーション1回分の長さを元にDurationを決定します〜単位は%です〜

Transition Durationを1にした場合、遷移前Stateの1回分長さをかけて徐々に遷移後アニメーションへ移行します〜

f:id:hiyotama:20150628202922p:plain
Idle1回分の長さをかけて徐々にWalkへ移行


Transition Durationを0.5にした場合、遷移前のStateの1単位分の長さの半分の時間をかけて遷移後アニメーションへ移行します〜

f:id:hiyotama:20150628203107p:plain
Idleの半分の長さでWalkに移行


Transition Durationを0にした場合、アニメーション遷移の瞬間にキッパリとアニメーションを切り替えます〜2Dアニメーションの場合は徐々に移行ができないので、Transition Durationを0にします〜

f:id:hiyotama:20150628203301p:plain
アニメーション遷移のタイミングで即座に移行


FixedDurationにチェックが入っている場合、遷移前Stateの長さとは独立してDurationの長さを決定する、すなわち秒を使ってDuration時間を決めていきます〜


Transition Durationを1にすれば1秒かけて徐々に遷移後アニメーションへ移行します〜

f:id:hiyotama:20150628203556p:plain
1秒でアニメーション遷移


Transition Durationを0.5にすれば0.5秒かけて遷移後アニメーションへ移行します〜

f:id:hiyotama:20150628203901p:plain
0.5秒でアニメーション遷移


Transition Durationを0にすれば、アニメーション遷移の瞬間にキッパリとアニメーションを切り替えます〜

f:id:hiyotama:20150628203956p:plain
キッパリとアニメーション遷移


続いてTransition Offsetです〜

Offsetは差分の埋め合わせを表し、Unityだとアニメーションの開始位置をズラす感じの意味で使われています〜


例えばWalkアニメーションが左→右→左→右という順番で足を動かしている場合、Transition Offsetを0.5に設定すると、右→左→右→左という順番で足を動かすようになります〜


f:id:hiyotama:20150628204157p:plain
Transition Offset=0 Walkは先頭から再生される


f:id:hiyotama:20150628204306p:plain
Transition Offset=0.5 Walkは真ん中から再生される


続いてInterruption Sourceです〜
ここではアニメーションの中断が設定できます〜


Noneは、中断されません〜

Current Stateは、現在のアニメーション再生時に中断されます〜

Next State: 遷移先アニメーション再生時に中断されます〜

Current State Then Next StateとNext State Then Current Stateは、現在もしくは遷移先アニメーション再生時に中断されます〜


Ordered Interruptionは、トランジションの順番とは独立して中断することができるそうですが、よく意味が分かっていません〜

f:id:hiyotama:20150628205245p:plain


Interruption関係についてはこのIdleとWalkを行き来するアニメーションでうまくいったのは、Current Stateを選択し、尚且つORdered Interruptionのチェックを外した時だけでした〜もう少し調査したいと思います〜


続いてPreview source stateです〜こちらは、プレビュー画面でどのStateを表示するかを決められます〜
ゲーム再生時にのみ設定できます〜


f:id:hiyotama:20150628205621p:plain
Idleを選択 下のプレビュー画面にIdle状態のユニティちゃんを表示



最後にCan Transition To Selfです〜こちらはTriggerを使ったほうが効果が分かりやすいので、Jumpアニメーションを追加します〜


f:id:hiyotama:20150628205940p:plain
Any State→Jump→Exitを作成


f:id:hiyotama:20150628210113p:plain
Jumpトリガー作成


f:id:hiyotama:20150628210304p:plain
JumpStateの設定 JUMP00を指定


f:id:hiyotama:20150628210330p:plain
Any State→JumpのTransition設定


f:id:hiyotama:20150628210428p:plain
Jump→ExitのTransition設定


スペースキーを押した時にジャンプするように、UnityChanScriptを加筆していきます〜

using UnityEngine;
using System.Collections;

public class UnityChanScript : MonoBehaviour {
	private Animator anim;
	
	void Start () {
		anim = GetComponent<Animator>();
	}
	
	void Update ()
	{
		if (Input.GetKey ("up")) {
			anim.SetBool ("Walk", true);
		} else {
			anim.SetBool ("Walk", false);
		}
//********** 開始 **********//
		if (Input.GetKeyDown ("space")) {
			anim.SetTrigger("Jump");
		}
//********** 終了 **********//
	}
}

UnityChanScript.cs


f:id:hiyotama:20150628211001p:plain
ジャンプ!


それでは話をCan Transition To Selfに戻しましょう〜

Can Transition To Selfは、今回のようにAny StateからTriggerを使ってアニメーション遷移をする時などに影響します〜


まずはCan Transition To Selfがオフである場合です〜
この場合2回連続で同じTriggerが実行すると、1回目のアニメーションが終了するまで、2回目のTriggerはtrueのまま待機状態となります〜
つまり1回目のアニメーションが終了した時にはじめて2回目のTriggerがtrueからfalseとなり、2回目のアニメーションが実行されます〜


続いてCan Transition To Selfがオンの時ですが、こちらの場合は1回目の遷移先のアニメーションが終了する前でも2回目のTriggerが実行されます〜
つまり1回目のアニメーションは強制的に中断され、2回目のアニメーションが実行されます〜


ひと通りアニメーション遷移時の設定について解説しましたが、まだ分からないところが多いので追記していくと思います〜


以上、ひよこエッセンスでした〜

ありがとうございました〜