Animator

■概要

Animatorはアニメーションクリップを管理する機能です。
Animatorを使用することで、オブジェクトの状態が変化するとともに
使用しているアニメーションクリップを変更できます。

■使用画像

サンプル画像

この画像は両方とも分割機能を使用してスプライトを分割しておきます。

■概要

●ビュー表示方法
Animatorビューを表示する方法は上段メニューのWindow => Animatorで表示可能です。
	
unity_0144

●Animatorの作成
	Animatorの作成はProjectビュー内で右クリック => Animator Controllerで作成します。

	unity_0145

	作成時のAnimatorは「Any State」と「Entry」という2つの
	ステートを持っています。
	※Animatorをコントロールする部品のことをステートと呼びます。

	unity_0146
		
	・Any State
		本来AnimatorでAnimationを管理する場合は
		関連するステート同士をつなぐ必要があります。
		ですが、AnyStateは条件さえ満たせばどのような状態からでも
		切り替えることが可能です。
		これは大変便利な機能ですが、きちんと考えて使わないと
		意図しない挙動になるので注意が必要です。

	・Entry
		Entryはアニメーションが起動した時に一番初めに動き出すStateです。
		このStateには1つだけAnimationの設定ができ、
		それが実質最初に動き出すアニメーションになります。

		unity_0147

●ステート追加
	アニメーション間の遷移を作成するためには複数のステートを作成する必要があります。
	作成はAnimator画面で右クリックをして表示されたメニューから「Create State」=>
	「Empty」を選択します。

	unity_0152

●ステート削除
	ステートの削除は削除したいステートを選択して右クリックをして表示された
	メニューから「Delete」を選択します。

	unity_0153

●ステートコンポーネント
	以下にステートコンポーネントの説明を書いていますが、
	現状説明する必要がないパラメータもありますので、
	使用する可能性があるパラメータのみを抜粋しています。

	unity_0150

	・Name
		Inspector直下の項目です。
		このステートの名前を指定します。

	・Motion
		このステートが起動した時に動作するアニメーションを指定します。

	・Speed
		アニメーション速度の設定をします。
		この速度はアニメーションクリップの速度を1とします。

	・Transition
		遷移するステートのリストを表示しています。

●ステート遷移
	ステートの遷移(待機=>移動など)はステート同士の結びつきを
	設定することで行います。
	Animatorではこの結びつきはステート間に矢印のついた線を
	つなげることで表現します。
		
	unity_0154

	・関連(Transition)の作り方
		ステート間の関連を作るには「遷移前」と「遷移後」を決めます。

		unity_0155

		次は遷移前のステートで右クリック => MakeTransitionを選択します。

		unity_0156

		MakeTransitionを選択すると矢印つきの線が作成されます。

		unity_0157

		それを遷移後のステートでクリックすることでステート間の
		つながりが作成されます。

		unity_0158

	・Transition情報
		ステート間をつなげた線をクリックするとInspectorに
		遷移情報が表示されます。
		今回も必要と思われるパラメータについてのみ説明をします。

		unity_0159

		・HasExitTime
			HasExitTimeのチェックは遷移時にアニメーションが終了して
			遷移するか、途中でも遷移するかを設定します。
			チェックがONになっていたら、最後まで待ち、
			チェックがOFFなら途中で切り替わります。

		・グラフ
			グラフ部分はアニメーションの切り替えの状態を表しています。
			これはブレンドツリーと呼ばれる機能を使用するときに
			利用するようになります。

		・Conditions
			Conditionsは遷移をするきっかけとなる設定のリストが
			表示されています。
			こちらについてはこの後の項目で説明します。

■遷移設定

ステートの切り替えはパラメータと呼ばれる数値で切り替えます。

●パラメータの表示
	パラメータはAnimatorの左側にある「Parameters」タグを
	クリックすることで表示されます。

	unity_0160

●パラメータの追加方法
	・新規パラメータ追加
		パラメータの追加は「+」アイコンをクリックします。
		クリックすると「パラメータの型」のメニューが表示されるので、
		遷移させたいパラメータを選択します。

		unity_0161

	・名前の設定
		パラメータが作成されたら次はそのパラメータに名前をつけます。
		状態を変えるパラメータを示すことになるので、
		意味のある名前をつけます。

		unity_0162

	・パラメータ設定
		パラメータの設定はTransitionを選択してInspector内にある
		Condisions項目の「+」「-」を使用して設定を行います。
		追加は「+」削除は「-」を使用します。

		unity_0163

		①.パラメータ選択
			「↓」アイコンをクリックするとパラメータのリストが
			表示されるので、遷移で使用するパラメータを選びます。

		②.遷移条件
			遷移条件を指定します。
			条件は型毎に用意されており、Intでは「Greater」「Less」
			「Equals」「Not Equals」があります。

		③.条件値
			遷移条件を満たすために必要な値です。

		例:
			unity_0166
			上記の設定はSpeedが2.0より上なら遷移を行う設定です。

●パラメータの削除
	パラメータの削除は「Animatorからの削除」と
	「Transitionに設定しているパラメータの削除」があります。

	・Animatorからの削除
		Animatorからの削除はAnimatorのパラメータのリストから
		削除したいパラメータの上で右クリックをします。
		メニューの中の「Delete」を選択するとパラメータが削除されます。
		※Transitionに設定されている場合、データ不明となりますので、
		 注意して下さい。

		unity_0165

	・Transitionに設定しているパラメータの削除
		削除したいパラメータがあるTransitionを選択し、
		削除パラメータをクリックします。
		その後、右下の「-」アイコンをクリックすると
		パラメータが削除されます。

		unity_0164

●パラメータの値変更
	パラメータの値を変更してアニメーションを遷移させるのは
	スクリプトで行います。

	・Animatorコンポーネント取得
		パラメータ設定用の関数はAnimatorコンポーネントが持っているので、
		GetComponent関数を使用してAnimtorを取得します。

		例:
			Animator animator = GetComponent<Animator>();

	・変更関数
		パラメータ変更関数は「SetInteger」「SetFloat」「SetBool」
		「SetTrigger」があります。
		基本的に第一引数にパラメータ名、第二引数に変更値を指定します。
		※SetTriggerのみ、第二引数がありません。

		関数名:
			SetFloat
	
		戻り値:
			なし
		
		引数:
			第一引数:
				string str
					パラメータ名
	
			第二引数:
				float value
					変更値

		内容:
			指定したパラメータ名の値を変更値に変更する

		例:
			// パラメータ「Speed」の値を2.0に変更する
			GetComponent<Animator>.SetFloat("Speed", 2.0f);

		この変更された値が遷移条件を満たしたらアニメーションが切り替わります。

■サンプル

●事前準備
	・Animation作成
		分割機能を使用したスプライトをSceneビューにD&DしてAnimationを作成します。
		※1.使用画像のPlayerWait.png、PlayerRun.pngを使用しています。
		※2.名前は「PlayerWait」「PlayerRun」でサンプルは進めます。

	・Animator作成
		プロジェクトビューで右クリックして「Animator Controller」を作成します。
		※「名前はPlayerAnim」で進めます。

	・Spriteオブジェクト作成
		HierarchyにSpriteを作成して「Player」とつけます。

	・Sprite指定
		PlayerのInspectorの「Sprite」からPlayerWait、
		またはPlayerRunのいずれかのスプライトを選択します。

●Animator実装
	事前準備で作成したPlayerAnimを使用してAnimatorを実装します。


	①.パラメータ作成
		AnimatorにFloat型でSpeed項目を追加します。

	②.ステート作成
		ステートを二つ作成し以下の設定を行います。

		・Entryにつながっているステート
			Name => PlayerWait
			Motion => PlayerWait

		・Entryにつながっていないステート
			Name => PlayerRun
			Motion => PlayerRun

	③.Transition作成
		PlayerWait、PlayerRunをTransitionで相互に結び付けます。

	④.条件設定
		各Transitionに対して以下の設定をします。

		・PlayerWait => PlayerRun
			Has Exit Timeのチェックをはずす
			ConditionsにSpeedを追加
			Speedの条件をGreater、数値を0.01に設定

		・PlayerRun => PlayerWait
			Has Exit Timeのチェックをはずす
			ConditionsにSpeedを追加
			Speedの条件をLess、数値を0.01に設定

	⑤.スクリプト作成
		PlayerMoveという名前のスクリプトを作成し、
		Update関数内に以下のコーディングをする

		Vector3 add_pos = Vector3.zero;

		if (Input.GetKey(KeyCode.RightArrow))
		{
			add_pos.x += 3.0f;
		} else if (Input.GetKey(KeyCode.LeftArrow)) { 
			add_pos.x -= 3.0f;
		}
		add_pos *= Time.deltaTime;

		// パラメータ変更
		GetComponent<Animator>().SetFloat("Speed", Mathf.Abs(add_pos.x));

		transform.localPosition += add_pos;

	⑥.Animator、スクリプト指定
		PlayerAnimtorとPlayerMoveスクリプトを
		HierarchyのPlayerオブジェクトに指定します。

	⑦.実行
		実行してアニメーションが切り替わることを確認します。