Animator

概要

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

使用画像

サンプル画像

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

概要

ビュー表示方法

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

Animatorの作成

Animatorの作成はProjectビュー内で右クリック => Animator Controllerで作成します。 unity_0145 unity_0145 作成時のAnimatorは「Any State」と「Entry」というのステートを持っています。 ※Animatorをコントロールする部品のことをステートと呼びます。 unity_0146 unity_0146

Any State

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

Entry

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

ステート追加

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

ステート削除

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

ステートコンポーネント

以下にステートコンポーネントの説明を書いていますが、 現状説明する必要がないパラメータもありますので、 使用する可能性があるパラメータのみを抜粋しています。 unity_0150 unity_0150 ・Name Inspector直下の項目です。 このステートの名前を指定します。 ・Motion このステートが起動した時に動作するアニメーションを指定します。 ・Speed アニメーション速度の設定をします。 この速度はアニメーションクリップの速度を1とします。 ・Transition 遷移するステートのリストを表示しています。

ステート遷移

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

関連(Transition)の作り方

ステート間の関連を作るには「遷移前」と「遷移後」を決めます。 unity_0155 unity_0155 次は遷移前のステートで右クリック => MakeTransitionを選択します。 unity_0156 unity_0156 MakeTransitionを選択すると矢印つきの線が作成されます。 unity_0157 unity_0157 それを遷移後のステートでクリックすることでステート間の つながりが作成されます。 unity_0158 unity_0158

Transition情報

ステート間をつなげた線をクリックするとInspectorに 遷移情報が表示されます。 今回も必要と思われるパラメータについてのみ説明をします。 unity_0159 unity_0159 ・HasExitTime HasExitTimeのチェックは遷移時にアニメーションが終了して 遷移するか、途中でも遷移するかを設定します。 チェックがONになっていたら、最後まで待ち、 チェックがOFFなら途中で切り替わります。 ・グラフ グラフ部分はアニメーションの切り替えの状態を表しています。 これはブレンドツリーと呼ばれる機能を使用するときに 利用するようになります。 ・Conditions Conditionsは遷移をするきっかけとなる設定のリストが表示されています。 こちらについてはこの後の項目で説明します。

遷移設定

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

パラメータの表示

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

パラメータの追加方法

新規パラメータ追加

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

名前の設定

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

パラメータ設定

パラメータの設定はTransitionを選択してInspector内にある Condisions項目の「+」「-」を使用して設定を行います。 追加は「+」削除は「-」を使用します。 unity_0163 unity_0163 ①.パラメータ選択 「↓」アイコンをクリックするとパラメータのリストが 表示されるので、遷移で使用するパラメータを選びます。 ②.遷移条件 遷移条件を指定します。 条件は型毎に用意されており、Intでは「Greater」「Less」 「Equals」「Not Equals」があります。 ③.条件値 遷移条件を満たすために必要な値です。 例: unity_0166 unity_0166 上記の設定はSpeedが2.0より上なら遷移を行う設定です。 パラメータの削除は「Animatorからの削除」と 「Transitionに設定しているパラメータの削除」があります。

Animatorからの削除

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

Transitionに設定しているパラメータの削除

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

パラメータの値変更

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

Animatorコンポーネント取得

パラメータ設定用の関数はAnimatorコンポーネントが持っているので、 GetComponent関数を使用してAnimtorを取得します。 例: Animator animator = GetComponent<Animator>();

変更関数

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

SetFloatメソッド仕様

メソッド名: 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オブジェクトに指定します。 ⑦.実行 実行してアニメーションが切り替わることを確認します。