Animator
概要
Animatorはアニメーションクリップを管理する機能です。
Animatorを使用することで、オブジェクトの状態が変化するとともに
使用しているアニメーションクリップを変更できます。
使用画像
サンプル画像
この画像は両方とも分割機能を使用してスプライトを分割しておきます。
概要
ビュー表示方法
Animatorビューを表示する方法は上段メニューのWindow => Animatorで表示可能です。
Animatorの作成
Animatorの作成はProjectビュー内で右クリック =>
Animator Controllerで作成します。
作成時のAnimatorは「Any State」と「Entry」というのステートを持っています。
※Animatorをコントロールする部品のことをステートと呼びます。
Any State
本来AnimatorでAnimationを管理する場合は
関連するステート同士をつなぐ必要があります。
ですが、AnyStateは条件さえ満たせばどのような状態からでも
切り替えることが可能です。
これは大変便利な機能ですが、きちんと考えて使わないと
意図しない挙動になるので注意が必要です。
Entry
Entryはアニメーションが起動した時に一番初めに動き出すStateです。
このStateには1つだけAnimationの設定ができ、
それが実質最初に動き出すアニメーションになります。
ステート追加
アニメーション間の遷移を作成するには複数のステートを作成する必要があります。
作成はAnimator画面で右クリックをして表示されたメニューから
「Create State」=>「Empty」を選択します。
ステート削除
ステートの削除は削除したいステートを選択して右クリックをして表示された
メニューから「Delete」を選択します。
ステートコンポーネント
以下にステートコンポーネントの説明を書いていますが、
現状説明する必要がないパラメータもありますので、
使用する可能性があるパラメータのみを抜粋しています。
・Name
Inspector直下の項目です。
このステートの名前を指定します。
・Motion
このステートが起動した時に動作するアニメーションを指定します。
・Speed
アニメーション速度の設定をします。
この速度はアニメーションクリップの速度を1とします。
・Transition
遷移するステートのリストを表示しています。
ステート遷移
ステートの遷移(待機=>移動など)はステート同士の結びつきを
設定することで行います。
Animatorではこの結びつきはステート間に矢印のついた線を
つなげることで表現します。
関連(Transition)の作り方
ステート間の関連を作るには「遷移前」と「遷移後」を決めます。
次は遷移前のステートで右クリック => MakeTransitionを選択します。
MakeTransitionを選択すると矢印つきの線が作成されます。
それを遷移後のステートでクリックすることでステート間の
つながりが作成されます。
Transition情報
ステート間をつなげた線をクリックするとInspectorに
遷移情報が表示されます。
今回も必要と思われるパラメータについてのみ説明をします。
・HasExitTime
HasExitTimeのチェックは遷移時にアニメーションが終了して
遷移するか、途中でも遷移するかを設定します。
チェックがONになっていたら、最後まで待ち、
チェックがOFFなら途中で切り替わります。
・グラフ
グラフ部分はアニメーションの切り替えの状態を表しています。
これはブレンドツリーと呼ばれる機能を使用するときに
利用するようになります。
・Conditions
Conditionsは遷移をするきっかけとなる設定のリストが表示されています。
こちらについてはこの後の項目で説明します。
遷移設定
ステートの切り替えはパラメータと呼ばれる数値で切り替えます。
パラメータの表示
パラメータはAnimatorの左側にある「Parameters」タグを
クリックすることで表示されます。
パラメータの追加方法
新規パラメータ追加
パラメータの追加は「+」アイコンをクリックします。
クリックすると「パラメータの型」のメニューが表示されるので、
遷移させたいパラメータを選択します。
名前の設定
パラメータが作成されたら次はそのパラメータに名前をつけます。
状態を変えるパラメータを示すことになるので、
意味のある名前をつけます。
パラメータ設定
パラメータの設定はTransitionを選択してInspector内にある
Condisions項目の「+」「-」を使用して設定を行います。
追加は「+」削除は「-」を使用します。
①.パラメータ選択
「↓」アイコンをクリックするとパラメータのリストが
表示されるので、遷移で使用するパラメータを選びます。
②.遷移条件
遷移条件を指定します。
条件は型毎に用意されており、Intでは「Greater」「Less」
「Equals」「Not Equals」があります。
③.条件値
遷移条件を満たすために必要な値です。
例:
上記の設定はSpeedが2.0より上なら遷移を行う設定です。
パラメータの削除は「Animatorからの削除」と
「Transitionに設定しているパラメータの削除」があります。
Animatorからの削除
Animatorからの削除はAnimatorのパラメータのリストから
削除したいパラメータの上で右クリックをします。
メニューの中の「Delete」を選択するとパラメータが削除されます。
※Transitionに設定されている場合、データ不明となりますので、
注意して下さい。
Transitionに設定しているパラメータの削除
削除したいパラメータがあるTransitionを選択し、
削除パラメータをクリックします。
その後、右下の「-」アイコンをクリックでパラメータが削除されます。
パラメータの値変更
パラメータの値を変更してアニメーションを遷移させるのはスクリプトで行います。
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オブジェクトに指定します。
⑦.実行
実行してアニメーションが切り替わることを確認します。