【Unity】Animatorを使ってみよう
目次
はじめに
こんにちは、情熱開発部プログラム課の瀧内です。
2月が過ぎ、もう2026年の6分の1を過ぎてしまいました。
時間が流れるのが早く感じる、今日この頃です。
さて、今回はUnityの機能の一つ、Animatorを触ってみようと思います。
使用バージョン Unity6.0 (6000.0.58f2)
Animatorとは
Animatorは、オブジェクトのアニメーションを管理・制御することが出来るコンポーネントシステムです。
これを用いることで、手軽にオブジェクトをアニメーションさせることが出来ます。
Animatorを使ってみる
それでは、さっそくAnimatorを使っていきましょう。
今回は、この可愛らしいボンヘ星人をアニメーションを制御していきます。

Animatorの準備
まずは、「右クリック > Create > Animation > Animator Controller」でAnimator Controllerを作成します。

作成後、ダブルクリックで開くと以下のような画面が出てきます。

この画面で、アニメーションの管理と制御を行います。
作成したAnimatorを、事前に用意していたボンへ星人にアタッチしておきましょう。

これでAnimatorの準備は完了です。
Animationの準備
次に、Animatorで使用するanimationを用意します。
「右クリック > Create > Animation > Animation Clip」でAnimation Clipを作成しましょう。
今回はボンへ星人が回転するアニメーションを作成するので、「Rotation」と命名します。
作成したら、AnimatorウインドウにRotationをドラッグ&ドロップしましょう。
すると、オレンジの長方形が出てきます。この長方形をステートと呼びます。

また、Entryからステートに矢印が伸びています。これを遷移と呼びます。
これはアニメーションの順序を示しており、矢印に沿ってアニメーションが再生されていきます。
ステートの種類
Animatorには以下のステートがあります。
Entry: アニメーションの開始地点です。ここから遷移されているステートが、最初に再生されます。
AnyState: どの状態からでもいつでも遷移出来るステートです。
Exit: アニメーションを終了させるためのステートです。一連のアニメーションをここに遷移させることで、アニメーションをループさせることが出来ます。
Animationを組み込む
事前準備が完了したので、さっそくアニメーションを作成していきましょう。
ボンへ星人をアニメーションさせるには、Animationで挙動を設定する必要があります。
作成したRotationをダブルクリックすることで、「Animation」というタグが表示されます。

Hierarchyにいるボンへ星人を選択して、挙動を作っていきましょう。
Add Propertyを選択することで、何をアニメーションさせるのかを選ぶことが出来ます。
今回はボンへ星人を回転させるアニメーションを作るため、Rotationを選択します。

すると、タイムラインにひし形のマークが表示されました。これをキーフレームと呼びます。
このキーフレームの値を変更することで、アニメーションの挙動を設定することが出来ます。

キーフレームを設定する
それでは、実際にアニメーションの挙動を設定してみましょう。
タイムラインを60に移動させて、Rotation.zを360にします。

これで、1秒間に1回転するアニメーションが完成しました。
実際の挙動を確かめてみましょう。

アニメーションを手動で再生する
先ほど作ったのは再生時に自動で再生されるアニメーションでしたが、Animatorでは、手動でアニメーションを制御することも出来ます。
まず、再生時にアニメーションが再生されないように、何もしないステートを作成します。
再度、「右クリック > Create > Animation > Animation Clip」でAnimation Clipを作成しましょう。
今回は手動でアニメーションが再生されるまで待機するだけのアニメーションなので、「Idle」と命名します。
作成後は、Rotationと同じく、Animatorウインドウにドラッグ&ドロップしましょう。
次に、勝手にRotationが再生されないようにするために、Entryから遷移されるステートを変える必要があります。
Idleステートを右クリックし、Set as Layer Default Stateを選択しましょう。

すると、Idleステートがオレンジのステートに変わり、起動時にIdleに遷移することになります。
Entryから遷移されるステートを変更した後は、IdleからRotationへ、アニメーションを遷移するようにしましょう。
再度Idleステートを右クリックし、Make Transtionを選択しましょう。
すると、矢印が出てくるので、Rotationをクリックします。
これで、IdleからRotationへの遷移が作成されます。
同じ要領で、RotationからExitへの遷移も作っておきましょう。

しかし、このままだとIdleからRotationへと、勝手に遷移してしまいます。そのため、自動遷移を制限してしまいましょう。
IdleとRotationの間の矢印をクリックして、Inspectorを確認しましょう。
InspectorにあるHas Exit Timeのチェックを外すことで、自動遷移を無効化することが出来ます。

ここまで準備すれば、あとはスクリプトを用意するだけです。
Hierarchyにいるボンへ星人を選択して、空のスクリプトを作成し、アタッチします。
今回は「AnimatorChanger」と命名します。
スクリプトには、以下のコードを追加します。
using UnityEngine;
public class AnimControl : MonoBehaviour
{
Animator animator;
void Start()
{
animator = GetComponent<Animator>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Return))
{
animator.Play("Rotation");
Debug.Log("Enterを押した!");
}
}
}ここまで準備を終えると、手動でアニメーションを制御出来るようになります。
実際の挙動を確かめてみましょう。

無事に、Enterキーでアニメーションを再生することが出来ました。
他の制御方法に触れてみよう
先ほど説明した遷移でのアニメーション制御に慣れてきたら、次は他の方法でアニメーションを制御してみましょう。
というのも、遷移によるアニメーション制御で複雑なアニメーションを作ろうとすると、遷移の登録に手間がかかったり、見た目がスパゲティコードのようになってしまいます。
また、先ほど使用したanimator.Playは「アニメーションを再生する」というシンプルな内容であるが故に、Animationを再生中に他のAnimationを再生し始めると、ワープしたり途切れたりと、違和感が生じてしまいます。

こういった時は、animator.CrossFadeを使ってみましょう。
Animatorに「Positionが変わるAnimation」を追加しておいて、コードを以下のように書き替えてみます。
using UnityEngine;
public class AnimControl : MonoBehaviour
{
Animator animator;
void Start()
{
animator = GetComponent<Animator>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Return))
{
animator.CrossFade("Rotation",0.5f);
}
if (Input.GetKeyDown(KeyCode.Space))
{
animator.CrossFade("Position", 0.5f);
}
}
}
前の状態よりも、アニメーションの違和感が薄くなりましたね。これで遷移設定の手間とはおさらばです。
注意点
PotationやRotationなどのTransformなど、スクリプトで触ることが多いものを変えるアニメーションを設定した際は、スクリプトでの変更と競合しないかを意識しておきましょう。
スクリプトで値を変更した際にAnimatorが動作すると、その値はAnimatorに上書きされてしまいます。
何故かスクリプトで設定した値になってくれないので調べてみたら、実はAnimatorで上書きしてました…ということがないように気を付けましょう。
また、アニメーションを数多く作ったり、複雑にすればするほど、関連ファイル数が増えるため、管理が難しくなります。規則に則った命名やファイル分け、トレース・遷移の整理は意識しておかなければ、後々自分でAnimatorを触り直したり、他の人が初めて触る際に混乱する原因になりえます。

まとめ
今回は、UnityのAnimatorについて紹介しましたが、いかがでしたでしょうか。
Animatorは、直感的に設定を行える優れたコンポーネントシステムで、ステージの装飾部分やUIなどで活用出来ます。
基本的にはデザイナーの方が触ることが多いこのシステムですが、一人多役をこなすことが多い学生の方や、インディーゲーム制作者の方は触る機会が多くなると思います。
ぜひ開発にご活用いただければ幸いです。
参考文献
以下のサイトを参考にさせていただきました。
【免責事項】
本サイトでの情報を利用することによる損害等に対し、
株式会社ロジカルビートは一切の責任を負いません。