スポンサーリンク
ゲーム制作チュートリアル

【Unity】2D格闘ゲームの作り方①!初心者向けチュートリアル

ゲーム制作チュートリアル

【Unity】2D格闘ゲームの作り方①|初心者でもキャラ操作&攻撃まで作れる入門チュートリアル

Unityで2D格闘ゲームを作ってみたいけど、
「何から手を付ければいいのか分からない」
「いきなり難しそうで挫折しそう」
と感じていませんか?

この記事では、Unity初心者の方でも取り組めるように、
2D格闘ゲームの“最小構成”をゼロから作る手順を解説します。

本記事(①)で目指すゴールは、
キャラクターを配置して、左右に移動できて、簡単な攻撃が出せる状態です。

いきなり複雑な必殺技やコンボは作りません。
まずは「動かして戦える」ことを最優先に進めていきます。

チュートリアルでは、Unityの無料アセット「Bandits Pixel Art」を使用し、
実際にキャラクターを動かしながら制作していきます。

この記事で学べること

・Unityで2D格闘ゲーム用のプロジェクトを作成する方法
・タイルマップを使った背景の作り方
・プレイヤーキャラクターの配置と物理設定
・左右移動の実装方法
・Animatorを使った基本アニメーションの切り替え

「難しい設計論は後回しでOK」
まずはUnityで格闘ゲームらしい動きを作る感覚を掴みましょう。

コードも一行ずつ意味を説明しながら進めるので、
C#にまだ慣れていない方でも安心して読み進められます。

それでは、Unityの初期設定から始めていきましょう!


2. Unityで2D格闘ゲームを作る準備をしよう

ゲームを作る前に、まずはUnityの基本的な設定を整えましょう!
ここでは、メインカメラの調整タイルマップの配置を行い、ゲームの土台を作ります。


2-1. メインカメラの基本設定

まずは、メインカメラの背景色を変更して、ゲームの雰囲気を整えます。

手順

  1. ヒエラルキーウィンドウMain Camera を選択
  2. インスペクターウィンドウBackground の色を変更

好きな背景色に設定して、ゲームの世界観を作りましょう!
例えば、格闘ゲームなら少し暗めの色を使うと雰囲気が出ますね。


2-2. タイルマップでステージ背景を作成する

次に、キャラクターが動く**ステージ(床)**を作成します。
UnityのTilemapを使うことで、簡単に背景や床を作成できます。

手順

  1. ヒエラルキーウィンドウを右クリック
  2. 2D ObjectTilemapRectangular を選択
  3. Tilemapオブジェクトが作成される

次に、アセットのスプライトを使って床を作成します。
使用するアセット:Bandits Pixel Art

タイルを配置する

  1. Tile Palette ウィンドウを開く(Window2DTile Palette
  2. Create New Palette をクリックし、新しいパレットを作成
  3. アセットに入っているスプライトをTile Paletteにドラッグ&ドロップ
  4. Tilemapブラシツール で床を描く

2-3. 床用コライダーの設定

キャラクターが床を通り抜けないように、Tilemapにコライダーを追加します。

手順

  1. Tilemapを選択し、インスペクターウィンドウを開く
  2. Add Component をクリックし、 TilemapCollider2D を追加
  3. さらに CompositeCollider2D を追加
  4. TilemapCollider2DUsed by Composite にチェックを入れる
  5. Rigidbody2Dを追加し、 Body TypeStatic に設定

これで、床のコライダーが1つの大きな当たり判定になり、つなぎ目がなくなります!


メインカメラの背景色を変更して、ゲームの雰囲気を整える
Tilemapを使って床を作成し、スプライトを配置
TilemapCollider2D & CompositeCollider2D を追加して当たり判定を設定

これで、キャラクターが立つステージの準備が完了しました!
次は、いよいよキャラクターを配置していきます! 🎮🔥




3. プレイヤーキャラクターを配置しよう

ステージの準備ができたので、プレイヤーキャラクターを配置していきましょう!
今回は、アセットに含まれるスプライトを使ってキャラクターを設置し、アニメーションを作成します。


3-1. キャラクター素材をシーンに配置する

まずは、アセットのスプライトを使って、プレイヤーキャラクターをヒエラルキーに配置します。

手順

  1. プロジェクトウィンドウSprites フォルダを開く
  2. 好きなスプライトをヒエラルキーにドラッグ&ドロップ(例:HeavyBandit_4~7)
  3. キャラクターの位置や向きを調整

ドラッグ&ドロップした時点で、キャラクターがGameビューに表示されます!


3-2. Rigidbody2DとCollider2Dの設定

キャラクターに物理演算当たり判定を設定し、ゲームの世界で正しく動くようにします。

手順

  1. ヒエラルキーでキャラクターを選択
  2. インスペクターウィンドウAdd Component をクリック
  3. Rigidbody2D を追加し、以下の設定を行う
    • Body TypeDynamic(動くオブジェクトなので)
    • Freeze Rotation Zチェックを入れる(回転防止)
  4. BoxCollider2D を追加し、キャラクターの大きさに合わせて調整

これでキャラクターが物理演算を持ち、床の上に立つ準備ができました!
複数選択してドラッグ&ドロップした時にanimetionを作成しているので、再生するとキャラクターが動きます。


4. 移動用アニメーションを準備する

プレイヤーの移動アニメーションを作成して、動きをよりリアルにしましょう!
Unityでは、スプライトを複数選択してドラッグ&ドロップするだけで、簡単にアニメーションを作れます。

4-1.Animator Controllerの作成

  1. プロジェクトウィンドウで Sprites フォルダを開く
  2. HeavyBandit_8~15まとめて選択
  3. ヒエラルキーのキャラクターにドラッグ&ドロップ
  4. Animation ウィンドウが開くので、名前を Player_Run にして保存

💡 この方法で、敵キャラクターのアニメーションも簡単に作成できます!


4-2. アニメーション速度の調整方法

作成したアニメーションの速度を調整して、動きを自然にしましょう。

手順

  1. WindowAnimationAnimation ウィンドウを開く
  2. Player_Run アニメーションを選択
  3. キーフレーム(ポイント)をすべて選択
  4. ドラッグで縮めるor伸ばす(動きを速く or 遅くできる)

キャラクターをヒエラルキーに配置して、位置と向きを調整
Rigidbody2D & BoxCollider2D を追加して、物理演算と当たり判定を設定
スプライトをドラッグ&ドロップしてアニメーションを作成
Animationウィンドウで速度調整し、スムーズな動きを実現

これで、キャラクターが正しく配置され、アニメーションが再生される準備が完了!
次は、プレイヤーの移動処理をスクリプトで実装していきます! 🎮🔥




5. プレイヤーの左右移動を実装する

キャラクターの配置とアニメーションができたので、次はプレイヤーを移動できるようにするスクリプトを作成します!
キーボードの「← →」キーを押すとプレイヤーが移動し、向きが変わるようにしていきます。


5-1.移動用C#スクリプトの作成

Unityでキャラクターを動かすには、C#スクリプトを使ってプログラムを記述します。

手順

  1. プロジェクトウィンドウを右クリック
  2. CreateC# Script を選択
  3. スクリプト名を PlayerManager に変更
  4. 作成した PlayerManagerプレイヤーオブジェクトにドラッグ&ドロップしてアタッチ

5-2. プレイヤーの移動処理を記述

スクリプトを開いて、以下のコードを入力してください。

using UnityEngine;

public class PlayerManager : MonoBehaviour
{
    // 移動速度
    public float moveSpeed = 3f;
    Rigidbody2D rb;

    void Start()
    {
        // Rigidbody2Dを取得
        rb = GetComponent<Rigidbody2D>();
    }

    void Update()
    {
        // 方向キーの入力を取得
        float x = Input.GetAxisRaw("Horizontal");

        // 左右の入力に応じてプレイヤーの向きを変更
        if (x > 0)
        {
            transform.localScale = new Vector3(1, 1, 1);
        }
        if (x < 0)
        {
            transform.localScale = new Vector3(-1, 1, 1);
        }

        // 移動処理
        rb.velocity = new Vector2(x * moveSpeed, rb.velocity.y);
    }
}

5-3. スクリプトの動作確認

このスクリプトを適用することで、キーボードの「← →」キーを押すとプレイヤーが左右に移動するようになります!
また、移動方向に応じてプレイヤーの向きが反転するため、自然な動きになります。

試しにプレイボタン(▶️)を押して動作を確認してみましょう!


5-4. 回転しないように固定する設定

移動時にキャラクターが回転してしまう場合は、Rigidbody2Dの回転を固定しておきましょう。

手順

  1. ヒエラルキーでプレイヤーを選択
  2. インスペクターで Rigidbody2D を開く
  3. ConstraintsFreeze Rotation Zチェックを入れる

💡 これでプレイヤーが転倒せず、スムーズに動くようになります!


C#スクリプト「PlayerManager」を作成し、プレイヤーを移動できるようにする
キーボードの入力に応じて移動&向きを変更
Rigidbody2Dの「Freeze Rotation Z」を有効化して、キャラクターが回転しないようにする

これで、プレイヤーが自由に移動できるようになりました!
次は、移動アニメーションを設定して、動きに合わせてアニメーションを切り替えましょう! 🎮🔥




6. アニメーションの切り替え

プレイヤーが移動できるようになったので、次は移動に応じてアニメーションを切り替える処理を追加していきます!
例えば、静止しているときは待機アニメーション、移動しているときは走るアニメーションになるように設定します。


6-1. Animatorの遷移(Transition)を作成

アニメーションがプレイヤーの動きに応じて切り替わるように、Animatorで遷移を設定します。

手順

  1. プロジェクトウィンドウでアニメーションコントローラーをダブルクリック(例:PlayerAnimator
  2. Animator ウィンドウが開くので、以下の状態を設定
    • Idle(待機アニメーション)を Entry にする
    • Run(移動アニメーション)を追加
  3. Idle を右クリックして Make Transition を選択し、Run に矢印をつなぐ
  4. Run から Idle にも同様に矢印をつなぐ

6-2. 条件(Parameters)の設定

アニメーションの切り替えをスムーズにするために、**条件(Conditions)**を設定します。

手順

  1. Animator ウィンドウで、Idle → Run の矢印をクリック
  2. インスペクターウィンドウで以下を変更
    • Has Exit Time のチェックを外す
    • Transition Duration0 にする(アニメーションが即座に切り替わるように)
  3. パラメーター(Parameters)を追加
    • + ボタンをクリックし、float 変数を Speed として作成
  4. Conditions に以下を追加
    • Speed > 0.1 のとき、IdleRun に切り替え
    • Speed < 0.1 のとき、RunIdle に戻る

6-3. 移動状態に応じたアニメーション制御

設定した Speed の値をプレイヤーの移動速度に応じて変更するスクリプトを記述します。

手順

  1. すでに作成した PlayerManager スクリプトを開く
  2. 以下のコードを追加する
using UnityEngine;

public class PlayerManager : MonoBehaviour
{
    public float moveSpeed = 3f;
    Rigidbody2D rb;
    Animator animator;

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

    void Update()
    {
        float x = Input.GetAxisRaw("Horizontal");

        if (x > 0)
        {
            transform.localScale = new Vector3(1, 1, 1);
        }
        if (x < 0)
        {
            transform.localScale = new Vector3(-1, 1, 1);
        }

        rb.velocity = new Vector2(x * moveSpeed, rb.velocity.y);

        // スピードをAnimatorに送る
        animator.SetFloat("Speed", Mathf.Abs(rb.velocity.x));
    }
}

6-4. 動作確認

ゲームを再生(▶️ボタン)し、キーボードの「← →」キーでプレイヤーを移動
止まっているときは待機アニメーション(Idle)
移動すると走るアニメーション(Run)

🎉 これで、プレイヤーの動きに応じてアニメーションが自然に切り替わるようになりました! 🎉


**Animatorの設定やスクリプトでの制御を手動でやるのは大変…**と感じた方には、
Universal Fighting Engine 2 Basic がおすすめ!
このアセットなら、既存のアニメーションを簡単に設定でき、コンボシステムやAIまで組み込み可能
手間をかけずに、本格的な格闘ゲームを作りたいなら、ぜひチェックしてみてください! 🔥


Animatorを設定して、Idle(待機)とRun(移動)のアニメーションを追加
Animatorの遷移(Transition)を設定して、動きに応じて切り替える
スクリプトで Speed の値を変更し、アニメーションを制御する

これで、キャラクターの移動に連動したアニメーションが完成しました!
次は、攻撃アクションの追加や敵キャラの動きを実装して、さらにゲームらしくしていきましょう!🔥🎮




🎮 まとめ

今回の内容をしっかり理解すれば、2D格闘ゲームの基礎がバッチリ身につきます!
まずはプレイヤーの動きを完璧にし、次のステップへ進んでいきましょう!💪🔥

次回は、攻撃アクションなどを追加して、ゲームをさらに面白くしていきます!
引き続き、一緒にUnityでゲーム開発を楽しんでいきましょう! 🚀🎮


あわせて読みたい

2D格闘ゲームをさらにレベルアップさせたい方は、以下の記事もぜひチェックしてみてください!


よくある質問(FAQ)

Q
タイルマップにコライダーを設定する方法は?
A

Tilemap に TilemapCollider2D を追加し、「Used by Composite」にチェックを入れ、CompositeCollider2D を追加すると、つなぎ目がなくなります。

Q
プレイヤーのアニメーションが切り替わらない場合の対処法は?
A

Animator の Parameters に適切な float 変数(Speed)を追加し、コードで animator.SetFloat(“Speed”, Mathf.Abs(rb.velocity.x)) を設定してください。

Q
移動時にプレイヤーが回転してしまうのはなぜ?
A

Rigidbody2D の「Freeze Rotation Z」にチェックを入れると回転を防ぐことができます。

※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。

※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。

スポンサーリンク