Unityは、初心者でも扱いやすいゲームエンジンとして人気があります。
特に2Dゲームは、シンプルなアニメーションを実装することで、キャラクターに命を吹き込むことができるため、多くの開発者に支持されています。
この記事では、Unityを使用してシンプルな2Dゲームを作成し、AnimatorとAnimation Clipを用いた基本的な2Dアニメーションの実装方法を、初心者向けに丁寧に解説していきます。
2Dゲーム用の基本アセットの準備
2Dゲーム開発では、キャラクターや背景、アイテムなどのアセット(画像やスプライト)が必要です。今回は以下のようなシンプルなアセットを用意します。
- キャラクタースプライト: 歩行、待機、ジャンプなどの状態に合わせた画像を用意します。
- 背景画像: ゲームシーンに使用するシンプルな背景画像。
Unityの「Assets」フォルダにこれらのアセットを取り込み、シーンに配置することで、ゲーム画面が見やすくなります。
Animation ClipとAnimatorの基本概念
Animation Clipとは
Animation Clipは、オブジェクトの状態(位置、回転、スケール、スプライトの変更など)を時間軸に沿って記録するファイルです。
これにより、キャラクターが歩いたり、ジャンプしたりする動きを作成できます。
Animatorとは
Animatorは、複数のAnimation Clipを制御するためのシステムです。
ステートマシン(状態遷移)を用いて、どのタイミングでどのアニメーションを再生するかを管理します。
例えば、「待機状態」から「歩行状態」へとスムーズに切り替える際に利用されます。
基本的なワークフロー
- Animation Clipの作成: まずは、各アニメーションのクリップを作成します。
- Animator Controllerの設定: Animation Clipをまとめ、ステートマシンを作成して状態遷移を設定します。
- スクリプトとの連携: キャラクターの動きや入力に応じて、Animator Controllerの状態を変更します。
2Dアニメーションの作成手順
ここでは、実際にUnity上で2Dアニメーションを作成する手順を紹介します。
Animation Clipの作成方法
- スプライトの準備: キャラクターの各状態に対応するスプライトを用意し、Assetsフォルダにインポートします。
- Animationウィンドウの表示: メニューバーの「Window」→「Animation」→「Animation」をクリックして、Animationウィンドウを表示させます。
- Animation Clipの作成: 対象のキャラクターオブジェクトを選択し、Animationウィンドウ内で「Create」をクリック。名前を「Idle」や「Walk」など、状態に合わせて設定します。
- キーの設定: タイムライン上で各スプライトを配置し、開始と終了の位置にキーフレームを設定します。これにより、キャラクターが状態に合わせた動きを実現できます。
Animator Controllerの作成方法
- 新規作成: Assetsフォルダ内で右クリック→「Create」→「Animator Controller」を選択し、名前を「PlayerController」とします。
- Animatorウィンドウへの配置: 作成したAnimator Controllerを、対象のキャラクターオブジェクトのInspector内にある「Animator」コンポーネントへドラッグ&ドロップします。
- ステートマシンの設定: Animatorウィンドウを開き、先ほど作成したAnimation Clipをドラッグして各ステートとして配置します。
- 状態遷移の設定: ステート間を矢印で接続し、どの条件でアニメーションが切り替わるかを設定します。例えば、「歩行中なら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が適切なアニメーションを再生できるようにしています。
実際のシーンへの組み込み方
次に、作成したアニメーションとスクリプトを実際のシーンに組み込み、ゲームとして動作させる方法を確認します。
シーンの準備
- シーンの設定: 「SampleScene」などのシーンを作成し、背景画像や地面となるオブジェクトを配置します。
- キャラクター配置: 作成したキャラクターオブジェクトをシーンにドラッグ&ドロップし、位置やサイズを調整します。
カメラ設定
- カメラの位置: 2Dゲームの場合、カメラがシーン全体を見渡せるように、適切な位置やOrthographicサイズを設定します。
- 追従カメラ: プレイヤーキャラクターを中心にカメラが追従するように設定することで、プレイ中にキャラクターが常に画面中央に来るようにできます。
デバッグとテスト
- 再生ボタン: Unityエディタ上部の再生ボタンをクリックして、実際にキャラクターが移動し、アニメーションが正しく再生されるか確認します。
- 調整: 必要に応じて、Animation Clipのタイミングや状態遷移条件、スクリプトのパラメーターなどを調整し、より自然な動きを実現します。
演習問題とその解答例
演習問題
問題
Unityを使用して、以下の機能を持つシンプルな2Dキャラクターを作成してください。
- キャラクターには「Idle(待機)」と「Run(走行)」の2種類のAnimation Clipがあり、Animator Controllerで状態遷移を設定すること。
- ユーザーの左右矢印キー入力に応じてキャラクターが走行状態に入り、キーが離されたときに待機状態に戻る。
- キャラクターが移動する方向に合わせて左右反転する機能も実装すること。
解答例
手順と解説
- アセット準備:
- 待機用スプライト(Idle)と走行用スプライト(Run)を用意し、Assetsフォルダにインポートする。
- Animation Clip作成:
- Animationウィンドウを使用して、キャラクターの「Idle」および「Run」アニメーションClipをそれぞれ作成する。
- 各Clipには適切なキーフレームを設定し、スプライトの切り替えタイミングを調整する。
- Animator Controllerの設定:
- 新規Animator Controllerを作成し、先ほど作成した「Idle」と「Run」のステートを配置する。
- 「Speed」というパラメーターを追加し、0の場合はIdle、0より大きい場合はRunに遷移する条件を設定する。
- スクリプトの作成:
- 先述のサンプルコードをベースに、左右キーの入力で「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ゲームの開発にも応用できます。初級編としてこの記事を参考に、まずはシンプルな動作から挑戦し、徐々に自分だけのゲーム作りに取り組んでみてください。