Unityで始める!シンプルな2Dゲーム作成とアニメーション基本操作

Unityは、初心者でも扱いやすいゲームエンジンとして人気があります。

特に2Dゲームは、シンプルなアニメーションを実装することで、キャラクターに命を吹き込むことができるため、多くの開発者に支持されています。

この記事では、Unityを使用してシンプルな2Dゲームを作成し、AnimatorとAnimation Clipを用いた基本的な2Dアニメーションの実装方法を、初心者向けに丁寧に解説していきます。

2Dゲーム用の基本アセットの準備

2Dゲーム開発では、キャラクターや背景、アイテムなどのアセット(画像やスプライト)が必要です。今回は以下のようなシンプルなアセットを用意します。

  • キャラクタースプライト: 歩行、待機、ジャンプなどの状態に合わせた画像を用意します。
  • 背景画像: ゲームシーンに使用するシンプルな背景画像。

Unityの「Assets」フォルダにこれらのアセットを取り込み、シーンに配置することで、ゲーム画面が見やすくなります。

Animation ClipとAnimatorの基本概念

Animation Clipとは

Animation Clipは、オブジェクトの状態(位置、回転、スケール、スプライトの変更など)を時間軸に沿って記録するファイルです。

これにより、キャラクターが歩いたり、ジャンプしたりする動きを作成できます。

Animatorとは

Animatorは、複数のAnimation Clipを制御するためのシステムです。

ステートマシン(状態遷移)を用いて、どのタイミングでどのアニメーションを再生するかを管理します。

例えば、「待機状態」から「歩行状態」へとスムーズに切り替える際に利用されます。

基本的なワークフロー

  1. Animation Clipの作成: まずは、各アニメーションのクリップを作成します。
  2. Animator Controllerの設定: Animation Clipをまとめ、ステートマシンを作成して状態遷移を設定します。
  3. スクリプトとの連携: キャラクターの動きや入力に応じて、Animator Controllerの状態を変更します。

2Dアニメーションの作成手順

ここでは、実際にUnity上で2Dアニメーションを作成する手順を紹介します。

Animation Clipの作成方法

  1. スプライトの準備: キャラクターの各状態に対応するスプライトを用意し、Assetsフォルダにインポートします。
  2. Animationウィンドウの表示: メニューバーの「Window」→「Animation」→「Animation」をクリックして、Animationウィンドウを表示させます。
  3. Animation Clipの作成: 対象のキャラクターオブジェクトを選択し、Animationウィンドウ内で「Create」をクリック。名前を「Idle」や「Walk」など、状態に合わせて設定します。
  4. キーの設定: タイムライン上で各スプライトを配置し、開始と終了の位置にキーフレームを設定します。これにより、キャラクターが状態に合わせた動きを実現できます。

Animator Controllerの作成方法

  1. 新規作成: Assetsフォルダ内で右クリック→「Create」→「Animator Controller」を選択し、名前を「PlayerController」とします。
  2. Animatorウィンドウへの配置: 作成したAnimator Controllerを、対象のキャラクターオブジェクトのInspector内にある「Animator」コンポーネントへドラッグ&ドロップします。
  3. ステートマシンの設定: Animatorウィンドウを開き、先ほど作成したAnimation Clipをドラッグして各ステートとして配置します。
  4. 状態遷移の設定: ステート間を矢印で接続し、どの条件でアニメーションが切り替わるかを設定します。例えば、「歩行中ならWalk状態へ遷移」など、簡単な条件を設定することで、より自然な動きを実現できます。

スクリプトとの連携

Animator Controllerはスクリプトと連動して動作します。以下は簡単な例です。

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    private Animator animator;

    void Start()
    {
        animator = GetComponent<Animator>();
    }

    void Update()
    {
        // 矢印キーで左右に移動する簡単な制御
        float move = Input.GetAxis("Horizontal");

        // 速度に応じてAnimatorのパラメーターを変更
        animator.SetFloat("Speed", Mathf.Abs(move));

        // キャラクターの向きを変える
        if (move > 0)
            transform.localScale = new Vector3(1, 1, 1);
        else if (move < 0)
            transform.localScale = new Vector3(-1, 1, 1);

        // 実際の移動処理(シンプルな例)
        transform.Translate(Vector2.right * move * Time.deltaTime * 5f);
    }
}

このスクリプトでは、左右キーの入力に応じてキャラクターが移動し、Speedパラメーターの値を変えることでAnimator Controllerが適切なアニメーションを再生できるようにしています。

実際のシーンへの組み込み方

次に、作成したアニメーションとスクリプトを実際のシーンに組み込み、ゲームとして動作させる方法を確認します。

シーンの準備

  1. シーンの設定: 「SampleScene」などのシーンを作成し、背景画像や地面となるオブジェクトを配置します。
  2. キャラクター配置: 作成したキャラクターオブジェクトをシーンにドラッグ&ドロップし、位置やサイズを調整します。

カメラ設定

  • カメラの位置: 2Dゲームの場合、カメラがシーン全体を見渡せるように、適切な位置やOrthographicサイズを設定します。
  • 追従カメラ: プレイヤーキャラクターを中心にカメラが追従するように設定することで、プレイ中にキャラクターが常に画面中央に来るようにできます。

デバッグとテスト

  • 再生ボタン: Unityエディタ上部の再生ボタンをクリックして、実際にキャラクターが移動し、アニメーションが正しく再生されるか確認します。
  • 調整: 必要に応じて、Animation Clipのタイミングや状態遷移条件、スクリプトのパラメーターなどを調整し、より自然な動きを実現します。

演習問題とその解答例

演習問題

問題

Unityを使用して、以下の機能を持つシンプルな2Dキャラクターを作成してください。

  1. キャラクターには「Idle(待機)」と「Run(走行)」の2種類のAnimation Clipがあり、Animator Controllerで状態遷移を設定すること。
  2. ユーザーの左右矢印キー入力に応じてキャラクターが走行状態に入り、キーが離されたときに待機状態に戻る。
  3. キャラクターが移動する方向に合わせて左右反転する機能も実装すること。

解答例

手順と解説
  1. アセット準備:
    • 待機用スプライト(Idle)と走行用スプライト(Run)を用意し、Assetsフォルダにインポートする。
  2. Animation Clip作成:
    • Animationウィンドウを使用して、キャラクターの「Idle」および「Run」アニメーションClipをそれぞれ作成する。
    • 各Clipには適切なキーフレームを設定し、スプライトの切り替えタイミングを調整する。
  3. Animator Controllerの設定:
    • 新規Animator Controllerを作成し、先ほど作成した「Idle」と「Run」のステートを配置する。
    • 「Speed」というパラメーターを追加し、0の場合はIdle、0より大きい場合はRunに遷移する条件を設定する。
  4. スクリプトの作成:
    • 先述のサンプルコードをベースに、左右キーの入力で「Speed」パラメーターを変更する処理を記述する。
    • キャラクターの向きを変える処理も同時に実装する。
サンプルコード
using UnityEngine;

public class SimplePlayerController : MonoBehaviour
{
    private Animator animator;
    public float moveSpeed = 5f;

    void Start()
    {
        // Animatorコンポーネントの取得
        animator = GetComponent<Animator>();
    }

    void Update()
    {
        // 横方向の入力取得
        float move = Input.GetAxis("Horizontal");

        // 入力値に応じてSpeedパラメーターを更新
        animator.SetFloat("Speed", Mathf.Abs(move));

        // キャラクターの左右反転処理
        if (move > 0)
            transform.localScale = new Vector3(1, 1, 1);
        else if (move < 0)
            transform.localScale = new Vector3(-1, 1, 1);

        // キャラクターの移動処理
        transform.Translate(Vector2.right * move * moveSpeed * Time.deltaTime);
    }
}
補足
  • Animator Controllerの設定で、Transition(遷移)の条件として「Speed > 0」でIdleからRunに、また「Speed == 0」でRunからIdleに遷移するように設定することを忘れないでください。
  • シーン内にこのスクリプトを持つキャラクターオブジェクトを配置し、実際にプレイモードで動作を確認してください。

まとめ

この記事では、Unityを使ったシンプルな2Dゲームの作成と、2Dアニメーションの基本操作について詳しく解説しました。主なポイントは以下の通りです。

  • Animation Clip: キャラクターの動きを記録するための基本単位であり、スプライトの切り替えなどを管理する。
  • Animator: 複数のAnimation Clipを統合し、状態遷移を管理するシステムである。
  • 実践的な実装: Animation ClipとAnimator Controllerの作成、そしてスクリプトとの連携により、ユーザーの入力に応じた動的なアニメーション制御が可能となる。
  • 演習問題: 本記事の内容を元に、実際に手を動かして機能を実装することで、理解を深めることができる。

Unityの基本操作とアニメーションの仕組みを理解することで、今後さらに複雑な2D・3Dゲームの開発にも応用できます。初級編としてこの記事を参考に、まずはシンプルな動作から挑戦し、徐々に自分だけのゲーム作りに取り組んでみてください。