キャラクターが歩く、宝箱がパカッと開く、ボタンがふわっと大きくなる。動きがあるだけでゲームはぐっと楽しくなります!今回はUnityのアニメーションの基本、Animationウィンドウでの動きの作り方と、Animatorでの切り替え方をご紹介します。
この記事で学べること
- Animationウィンドウでアニメーション(クリップ)を作る方法
- 2Dのスプライトを並べて、パラパラ漫画のアニメーションを作る方法
- Animatorで、アニメーションを切り替える仕組み(状態・遷移・パラメータ)
- スクリプトからアニメーションを切り替える方法
前提知識
- アセットの作成と管理:アニメーションクリップの作り方(簡単な紹介)
- 2Dゲーム制作の基本操作:スプライトの取り込みと切り分け
- よく使うUnity専用の関数とプロパティ:GetComponent
4-5の記事では「アニメーションクリップを作ってキーフレームを打つ」ところまでを紹介しました。この記事では、その続きとしてAnimatorでの切り替えまで説明します。
アニメーションの仕組み
Unityのアニメーションは、次の3つで動きます。
- Animation Clip(アニメーションクリップ):1つの動き(歩く、ジャンプ、開くなど)のデータ
- Animator Controller:どのクリップを、どんなときに再生するかを決める設計図
- Animatorコンポーネント:オブジェクトに付けて、Animator Controllerを動かす
Animationウィンドウで動きを作る
クリップを作る
- 動かしたいオブジェクトを選択(例:Cube)
- Window>Animation>Animationを開く
- AnimationウィンドウのCreateボタンを押す
- 保存先とファイル名(例:CubeBounce)を決めて保存
これで、クリップと一緒にAnimator Controllerが作られ、オブジェクトにAnimatorコンポーネントが自動で付きます。
キーフレームを打つ
キーフレームは「この時間に、この値」という目印です。間はUnityが自動でなめらかにつないでくれます。
- Animationウィンドウ左上の録画ボタン(赤い丸)を押す
- タイムラインの0:00を選んで、CubeのPositionをY:0にする
- タイムラインの0:30(0.5秒)を選んで、Position Yを1にする
- タイムラインの1:00(1秒)を選んで、Position Yを0に戻す
- もう一度録画ボタンを押して終了
録画中はInspectorの値を変えるだけでキーフレームが打たれます。左側のAdd Propertyから、動かしたい項目(Transform>Positionなど)を先に追加する方法もあります。
再生ボタン(▶)で、Cubeがぴょんぴょん跳ねれば成功!
ループの設定
ProjectウィンドウでAnimation Clip(CubeBounce)を選ぶと、Inspectorに設定が出ます。
- Loop Time:チェックすると、最後まで再生したら最初に戻ってくり返す
歩く・待機のように続ける動きはチェック、ジャンプや扉が開くように1回で終わる動きはチェックを外します。
スライム録画ボタンを押したまま、ほかのオブジェクトを動かしちゃってた・・・



録画中はInspectorの変更が全部記録されちゃうよ!作業が終わったら、録画ボタンを押して止めるのを忘れずにね
2Dのスプライトアニメーション
2Dのキャラクターは、少しずつ違う絵を順番に切り替えて動かします(パラパラ漫画と同じです)。
- 4-4の記事の方法で、キャラクターの画像をSprite Editorで1コマずつに切り分けておく
- Projectウィンドウで、1つの動き(歩きなど)のスプライトを、Shiftを押しながら全部選択
- 選んだスプライトを、Hierarchyにドラッグ&ドロップ
- 保存先とファイル名(例:PlayerWalk)を聞かれるので保存
これで、スプライトを表示するオブジェクトと、アニメーションクリップ、Animator Controllerがまとめて作られます。
速さの調整
Animationウィンドウ右上の「⋮」からShow Sample Rateを選ぶと、Samples(1秒間に何コマ進めるか)が表示されます。
- 数字を大きくすると速く、小さくするとゆっくりになる
- ドット絵の歩きなら、8〜12ぐらいから試してみましょう
Animatorでアニメーションを切り替える
「止まっているときは待機、動いたら歩き」のように、状況に合わせてクリップを切り替えるのがAnimatorです。
Animatorウィンドウを開く
- Window>Animation>Animatorを開く
- アニメーションの付いたオブジェクトを選ぶと、その設計図が表示される
状態(State)
四角い箱1つ1つが状態で、それぞれにクリップが入っています。
- オレンジ色の状態:最初に再生される状態(右クリック>Set as Layer Default Stateで変更)
- 新しいクリップは、ProjectウィンドウからAnimatorウィンドウにドラッグ&ドロップで追加出来ます
遷移(Transition)
状態から状態への矢印が遷移です。
- 状態を右クリック>Make Transitionで、つなぎたい状態をクリック
- 矢印を選ぶと、Inspectorに切り替えの条件が表示される
パラメータ(Parameters)
切り替えの条件に使う変数です。Animatorウィンドウ左上のParametersタブの「+」から追加します。
| 型 | 使いどころ |
|---|---|
| Bool | 歩いている/いない、のように続く状態 |
| Trigger | ジャンプ、攻撃のように1回だけ起こること |
| Float | 移動の速さ(数字で切り替える) |
| Int | 武器の種類など、番号で切り替える |
例:待機と歩きを切り替える
- ParametersにBoolで「IsWalking」を追加
- Idle → Walkの遷移を作り、InspectorのConditionsの「+」で「IsWalking」「true」を設定
- Walk → Idleの遷移を作り、Conditionsに「IsWalking」「false」を設定
- どちらの遷移も、下の設定にする
- Has Exit Time:チェックを外す(条件を満たしたらすぐ切り替える)
- Transition Duration:0(2Dのスプライトアニメなら、なめらかにつながなくてよいので0にする)
Has Exit Timeとは
- チェックあり:今のアニメーションが最後(決まった時間)まで再生されてから切り替わる
- チェックなし:条件を満たした瞬間に切り替わる
ボタンを押した瞬間に反応してほしい動きは、チェックを外すのが基本です。
スクリプトから切り替える
Animatorのパラメータを、スクリプトから変えます。
using UnityEngine;
public class PlayerAnimatorControl : MonoBehaviour
{
[SerializeField] private Animator animator;
// パラメータ名を数字(ハッシュ)にしておくと、少し速く、つづり間違いも見つけやすい
private static readonly int IsWalkingHash = Animator.StringToHash("IsWalking");
private static readonly int JumpHash = Animator.StringToHash("Jump");
private InputSystem_Actions inputActions;
void Awake()
{
inputActions = new InputSystem_Actions();
}
void OnEnable()
{
inputActions.Enable();
}
void OnDisable()
{
inputActions.Disable();
}
void Update()
{
// 移動の入力があれば歩き、なければ待機
Vector2 move = inputActions.Player.Move.ReadValue<Vector2>();
animator.SetBool(IsWalkingHash, move != Vector2.zero);
// ジャンプのボタンでTriggerを送る
if (inputActions.Player.Jump.WasPressedThisFrame())
{
animator.SetTrigger(JumpHash);
}
}
}
- InspectorのAnimator欄に、アニメーションを付けたオブジェクトのAnimatorをセットします
animator.SetBool("IsWalking", true)のように、文字列のまま書いてもOKです- Triggerを使う場合は、Animatorで「Jump」というTriggerのパラメータを作り、Any StateなどからJumpの状態への遷移の条件にします
- 移動そのものは、6-8のPlayerMoverと一緒に使います
| 書き方 | パラメータの型 |
|---|---|
animator.SetBool(名前, true) | Bool |
animator.SetTrigger(名前) | Trigger |
animator.SetFloat(名前, 1.5f) | Float |
animator.SetInteger(名前, 2) | Int |
3Dの人型キャラクターの場合
3Dの人型キャラクターは、Mixamoなどのアニメーションを使うのが便利です。Humanoidの設定やBlend Treeを使った歩き・走りの切り替えは、Mixamoのアニメーションで歩く・走るキャラクターを作ろうで紹介しています。
よくあるエラーと対処法
エラー:アニメーションが再生されない
- 原因:オブジェクトにAnimatorが付いていない、AnimatorのControllerが空、または最初の状態(オレンジ)にクリップが入っていない
- 対処法:AnimatorコンポーネントのControllerと、Animatorウィンドウのオレンジの状態を確認する
警告:Parameter ‘IsWalking’ does not exist.
- 原因:スクリプトで指定したパラメータ名が、Animatorにない(つづり・大文字小文字の違い)
- 対処法:AnimatorウィンドウのParametersと、スクリプトの名前を完全に同じにする
エラー:切り替わるのが遅い
- 原因:遷移のHas Exit Timeにチェックが入っていて、アニメーションの最後まで待っている
- 対処法:Has Exit Timeのチェックを外す。Transition Durationも短くする
エラー:1回だけの動きがくり返される
- 原因:クリップのLoop Timeにチェックが入っている
- 対処法:ProjectウィンドウでクリップのLoop Timeのチェックを外す
エラー:動かしたいのに位置が変わらない(アニメーションに固定される)
- 原因:アニメーションでPositionを動かしていると、スクリプトで動かした位置が上書きされる
- 対処法:アニメーションを付けるのは見た目用の子オブジェクトにして、移動は親オブジェクトで行う
まとめ
- Animationウィンドウ:Createでクリップを作り、録画ボタンでキーフレームを打つ
- 2Dのスプライトアニメ:スプライトをまとめてHierarchyにドラッグ、速さはSamples
- Animator:状態・遷移・パラメータでクリップを切り替える
- Has Exit Time:すぐ切り替えたいときはチェックを外す
- スクリプト:
SetBool/SetTrigger/SetFloatでパラメータを変える
次のステップ
- 次の12-3では、2Dキャラクターの移動とジャンプを紹介します
- Unityスタートガイド 目次
コメント