コンテンツへスキップ

【Unity】2D アニメーションの作り方

アニメーションを作る方法は2パターンあります。1つ目は、「プログラムでアニメーションを制御する方法」です。プレイヤーの入力に合わせてキャラクターを動作させる際によく使われます。2つ目は、「AnimatorController で制御する方法」です。特定の動作を実行させたいときに便利です。例えば、オープニング画面に表示されるゲームタイトルのアニメーションの作成などに適しています。

方法①「プログラムでアニメーションを制御する方法」

概要

プレイヤーの操作によって、キャラクターが左右に移動したりジャンプしたりする場合、プログラム側でアニメーションを制御する方法が適しています。

実行結果
unity-2d-animation-0
プログラムの例

手順

STEP1:対象のゲームオブジェクトに「Animator」コンポーネントを追加する

ゲームオブジェクト(下図では「Player」)を選択し、インスペクターにある「コンポーネントを追加」をクリックします。

unity-2d-animation-1

「Miscellaneous」⇒「Animator」と選択します。

unity-2d-animation-2

STEP2:「アニメーターコントローラー」をアセットに作成し、ゲームオブジェクトと紐づける

アセット内の「Player」を右クリックし、「作成」⇒「アニメーターコントローラー」を選択します。

unity-2d-animation-3

名前を「PlayerAnime」とし、プレイヤーのインスペクター「Animator」内のコントローラーにドラッグアンドドロップします。これで、ゲームオブジェクト「Player」とアニメーターコントローラー「PlayerAnime」の紐づけが完了です。

unity-2d-animation-4

STEP3:アニメーションを作成する

ヒエラルキーから「Player」を選択し、アニメーションビューを表示します。「作成」ボタンが表示されるのでボタンをクリックします。

unity-2d-animation-5

Idle(アイドル)状態のアニメーションを作成します。ここでは、ファイル名を「Idle.anim」としました。

unity-2d-animation-6

下図のように、アニメーションで使いたい画像を選択(最初の画像:クリック、最後の画像:Shift + クリック)し、アニメーションビューにドラッグアンドドロップします。

unity-2d-animation-7

アニメーションは再生することができます。アニメーションビューの中に再生ボタンがあるのでクリックしてみてください。下記のように、アニメーションの動作を確認することができます。

アニメーションの速度が速かったり遅かったりする場合は、「サンプル」の値を変更して調節します。「サンプル」を表示させる手順は、以下の通りです。

unity-2d-animation-8

STEP4:プログラムでアニメーションを制御する

// ★1 アニメーション用の変数
private Animator animator;
private ANIME_TYPE nowAnime = ANIME_TYPE.Idle;
private ANIME_TYPE oldAnime = ANIME_TYPE.Idle;

// ★2 アニメーション名
private enum ANIME_TYPE
{
    Idle,
    Run,
    Jump,
    Fall
}

/// <summary>
/// Start is called before the first frame update
/// シーンに読み込まれたときに1回だけ実行される
/// </summary>
private void Start()
{
    rbody2D = GetComponent<Rigidbody2D>();
    transform.localScale = new Vector2(Scale, Scale);

    // ★3 「Animator」コンポーネントの取得
    animator = GetComponent<Animator>();
}

/// <summary>
/// Update is called once per frame
/// 入力系の処理を記述するところ
/// </summary>
private void Update()
{
    axisH = Input.GetAxisRaw("Horizontal");
    if (axisH < 0.0f)  // 左を向く
    {
        transform.localScale = new Vector2(-1 * Scale, Scale);
    }
    else if (0.0f < axisH)  // 右を向く
    {
        transform.localScale = new Vector2(Scale, Scale);
    }
}

// 一定時間ごとに呼び出されるので、
// 物理演算結果の再現性が保てる
// (物理演算やアニメーションを記述)
private void FixedUpdate()
{
    // ★4 アニメーション更新
    if (OnGround()) // 地面の上
    {
        if (axisH == 0.0f)
        {
            nowAnime = ANIME_TYPE.Idle;
        }
        else
        {
            nowAnime = ANIME_TYPE.Run;
        }
    }
    else
    {
        if (0.0f <= rbody2D.velocity.y)
        {
            nowAnime = ANIME_TYPE.Jump;
        }
        else
        {
            nowAnime = ANIME_TYPE.Fall;
        }
    }
    if (nowAnime != oldAnime)
    {
        // アニメーションを再生する
        oldAnime = nowAnime;
        animator.Play(nowAnime.ToString());
    }
}
■ 1行目(★1):アニメーション用の変数
■ 6行目(★2):アニメーション名

enum を使用すると、特定の値しかとらないデータを管理することができます(例:曜日、都道府県)。タイプミスを防ぐこともできます。ここでは、アニメーションの名前を enum で管理します。

■ 24行目(★3):「Animator」コンポーネントの取得
■ 50行目(★4):アニメーション更新

プレイヤーの入力に合わせて、アニメーションを再生します。例えば、地面の上にいる場合で、止まっているときは Idle のアニメーション(55行目)、左右に移動しているときは Run のアニメーション(59行目)を設定しています。

nowAnime は現在のアニメーションのことです。oldAnime の内容と異なる場合は、animator.Play(76行目)を実行して現在のアニメーションを再生します。

方法②「AnimatorController でアニメーションを制御する方法」

概要

AnimatorController を利用すれば、GUI 上で(プログラミングすることなく)アニメーションを作成することができます。プレイヤーの入力と関係なく、特定の動作をさせたいときに主に利用します。

実行結果
unity-2d-animation-2-1
アニメーターコントローラーの例

手順

STEP1:「アニメーターコントローラー」をアセットに作成し、ゲームオブジェクトと紐づける

アセット内に「アニメーターコントローラー」を作成します。下記の例では、「Opening」という名前にしました。

unity-2d-animation-2-2

「Opening」を、プレイヤーのインスペクター「Animator」内のコントローラーにドラッグアンドドロップします。

unity-2d-animation-2-3

STEP2:アニメーションを作成する

プログラムを利用せずにアニメーションを作成します。キーフレーム収録モードを使って、「位置」を移動させることもできます。下記の動画を参考に、アニメーションを作成してみてください。

アニメーション「OpeningRun」
アニメーション「OpeningJump」

STEP3:AnimatorController でアニメーションを制御する

下記は、アニメーター「Opening」のステート遷移図です。STEP2で作成した「OpeningRun」と「OpeningJump」を、「Entry」から遷移するように設定します。

unity-2d-animation-2-4

正しく設定できると、概要の実行結果のようなアニメーションが再生されます。

広告

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA