1. はじめに
Unityを使って2D格闘ゲームを作りたいけど、どこから始めればいいかわからない…そんなあなたに向けて、この記事では基礎から順番に作り方を解説します!
「キャラクターを配置して動かす」「アニメーションを設定する」「攻撃アクションを実装する」など、2D格闘ゲームを作るうえで欠かせない基本要素を一つずつ学んでいきましょう。
今回は、Unityの無料アセット「Bandits Pixel Art」を使って、実際にキャラクターを動かしながら作っていきます。
この記事で学べること
✅ タイルマップを使って背景を作成する
✅ プレイヤーキャラを配置して、動かせるようにする
✅ アニメーションの切り替えでスムーズに動かす
格闘ゲームの基本となる「プレイヤーの移動」や「アニメーションの切り替え」から始めて、少しずつゲームらしい動きを作っていきます。
初心者の方でも分かりやすいように、コードの説明も丁寧に解説するので、ぜひ一緒に作ってみましょう!
それでは、Unityの基本設定から始めます! 🚀
2. Unityの初期設定
ゲームを作る前に、まずはUnityの基本的な設定を整えましょう!
ここでは、メインカメラの調整とタイルマップの配置を行い、ゲームの土台を作ります。
2-1. メインカメラの設定
まずは、メインカメラの背景色を変更して、ゲームの雰囲気を整えます。
手順
- ヒエラルキーウィンドウで
Main Camera
を選択 - インスペクターウィンドウで
Background
の色を変更

好きな背景色に設定して、ゲームの世界観を作りましょう!
例えば、格闘ゲームなら少し暗めの色を使うと雰囲気が出ますね。
2-2. タイルマップを配置
次に、キャラクターが動く**ステージ(床)**を作成します。
UnityのTilemap
を使うことで、簡単に背景や床を作成できます。
手順
- ヒエラルキーウィンドウを右クリック
2D Object
→Tilemap
→Rectangular
を選択- Tilemapオブジェクトが作成される
次に、アセットのスプライトを使って床を作成します。
使用するアセット:Bandits Pixel Art
タイルを配置する
- Tile Palette ウィンドウを開く(
Window
→2D
→Tile Palette
) Create New Palette
をクリックし、新しいパレットを作成- アセットに入っているスプライトをTile Paletteにドラッグ&ドロップ
Tilemap
に ブラシツール で床を描く

2-3. コライダーを設定
キャラクターが床を通り抜けないように、Tilemapにコライダーを追加します。
手順
- Tilemapを選択し、インスペクターウィンドウを開く
Add Component
をクリックし、TilemapCollider2D
を追加- さらに
CompositeCollider2D
を追加 TilemapCollider2D
のUsed by Composite
にチェックを入れる- Rigidbody2Dを追加し、
Body Type
をStatic
に設定

これで、床のコライダーが1つの大きな当たり判定になり、つなぎ目がなくなります!
まとめ
✅ メインカメラの背景色を変更して、ゲームの雰囲気を整える
✅ Tilemapを使って床を作成し、スプライトを配置
✅ TilemapCollider2D & CompositeCollider2D を追加して当たり判定を設定

これで、キャラクターが立つステージの準備が完了しました!
次は、いよいよキャラクターを配置していきます! 🎮🔥
3. キャラクターの配置とアニメーションの準備
ステージの準備ができたので、プレイヤーキャラクターを配置していきましょう!
今回は、アセットに含まれるスプライトを使ってキャラクターを設置し、アニメーションを作成します。
3-1. キャラクターを配置する
まずは、アセットのスプライトを使って、プレイヤーキャラクターをヒエラルキーに配置します。
手順
- プロジェクトウィンドウで
Sprites
フォルダを開く - 好きなスプライトをヒエラルキーにドラッグ&ドロップ(例:HeavyBandit_4~7)
- キャラクターの位置や向きを調整

ドラッグ&ドロップした時点で、キャラクターがGameビューに表示されます!
3-2. キャラクターの物理設定
キャラクターに物理演算と当たり判定を設定し、ゲームの世界で正しく動くようにします。
手順
- ヒエラルキーでキャラクターを選択
- インスペクターウィンドウで
Add Component
をクリック Rigidbody2D
を追加し、以下の設定を行うBody Type
→Dynamic
(動くオブジェクトなので)Freeze Rotation Z
にチェックを入れる(回転防止)
BoxCollider2D
を追加し、キャラクターの大きさに合わせて調整

✅ これでキャラクターが物理演算を持ち、床の上に立つ準備ができました!
✅ 複数選択してドラッグ&ドロップした時にanimetionを作成しているので、再生するとキャラクターが動きます。
3-3. 移動アニメーションの準備
プレイヤーの移動アニメーションを作成して、動きをよりリアルにしましょう!
Unityでは、スプライトを複数選択してドラッグ&ドロップするだけで、簡単にアニメーションを作れます。
手順
- プロジェクトウィンドウで
Sprites
フォルダを開く - HeavyBandit_8~15 をまとめて選択
- ヒエラルキーのキャラクターにドラッグ&ドロップ
Animation
ウィンドウが開くので、名前をPlayer_Run
にして保存

💡 この方法で、敵キャラクターのアニメーションも簡単に作成できます!
3-4. アニメーションの速度調整
作成したアニメーションの速度を調整して、動きを自然にしましょう。
手順
Window
→Animation
→Animation
ウィンドウを開くPlayer_Run
アニメーションを選択- キーフレーム(ポイント)をすべて選択
- ドラッグで縮めるor伸ばす(動きを速く or 遅くできる)

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

これで、キャラクターが正しく配置され、アニメーションが再生される準備が完了!
次は、プレイヤーの移動処理をスクリプトで実装していきます! 🎮🔥
4. プレイヤーの移動処理
キャラクターの配置とアニメーションができたので、次はプレイヤーを移動できるようにするスクリプトを作成します!
キーボードの「← →」キーを押すとプレイヤーが移動し、向きが変わるようにしていきます。
4-1. C#スクリプトの作成
Unityでキャラクターを動かすには、C#スクリプトを使ってプログラムを記述します。
手順
- プロジェクトウィンドウを右クリック
Create
→C# Script
を選択- スクリプト名を
PlayerManager
に変更 - 作成した
PlayerManager
をプレイヤーオブジェクトにドラッグ&ドロップしてアタッチ
4-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);
}
}
4-3. スクリプトの動作確認
このスクリプトを適用することで、キーボードの「← →」キーを押すとプレイヤーが左右に移動するようになります!
また、移動方向に応じてプレイヤーの向きが反転するため、自然な動きになります。
✅ 試しにプレイボタン(▶️)を押して動作を確認してみましょう!
4-4. プレイヤーの回転防止
移動時にキャラクターが回転してしまう場合は、Rigidbody2Dの回転を固定しておきましょう。
手順
- ヒエラルキーでプレイヤーを選択
- インスペクターで Rigidbody2D を開く
Constraints
のFreeze Rotation Z
にチェックを入れる

💡 これでプレイヤーが転倒せず、スムーズに動くようになります!
まとめ
✅ C#スクリプト「PlayerManager」を作成し、プレイヤーを移動できるようにする
✅ キーボードの入力に応じて移動&向きを変更
✅ Rigidbody2Dの「Freeze Rotation Z」を有効化して、キャラクターが回転しないようにする

これで、プレイヤーが自由に移動できるようになりました!
次は、移動アニメーションを設定して、動きに合わせてアニメーションを切り替えましょう! 🎮🔥
5. アニメーションの切り替え
プレイヤーが移動できるようになったので、次は移動に応じてアニメーションを切り替える処理を追加していきます!
例えば、静止しているときは待機アニメーション、移動しているときは走るアニメーションになるように設定します。
5-1. アニメーションの遷移(Transition)の作成
アニメーションがプレイヤーの動きに応じて切り替わるように、Animatorで遷移を設定します。
手順
- プロジェクトウィンドウでアニメーションコントローラーをダブルクリック(例:
PlayerAnimator
) Animator
ウィンドウが開くので、以下の状態を設定Idle
(待機アニメーション)をEntry
にするRun
(移動アニメーション)を追加
Idle
を右クリックしてMake Transition
を選択し、Run
に矢印をつなぐRun
からIdle
にも同様に矢印をつなぐ

5-2. 遷移条件(Conditions)の設定
アニメーションの切り替えをスムーズにするために、**条件(Conditions)**を設定します。
手順
Animator
ウィンドウで、Idle → Run
の矢印をクリック- インスペクターウィンドウで以下を変更
Has Exit Time
のチェックを外すTransition Duration
を0
にする(アニメーションが即座に切り替わるように)
- パラメーター(Parameters)を追加
+
ボタンをクリックし、float
変数をSpeed
として作成
Conditions
に以下を追加Speed > 0.1
のとき、Idle
→Run
に切り替えSpeed < 0.1
のとき、Run
→Idle
に戻る


5-3. スクリプトでアニメーションを制御
設定した Speed
の値をプレイヤーの移動速度に応じて変更するスクリプトを記述します。
手順
- すでに作成した
PlayerManager
スクリプトを開く - 以下のコードを追加する
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));
}
}
5-4. 動作確認
✅ ゲームを再生(▶️ボタン)し、キーボードの「← →」キーでプレイヤーを移動
✅ 止まっているときは待機アニメーション(Idle)
✅ 移動すると走るアニメーション(Run)
🎉 これで、プレイヤーの動きに応じてアニメーションが自然に切り替わるようになりました! 🎉
**Animatorの設定やスクリプトでの制御を手動でやるのは大変…**と感じた方には、
Universal Fighting Engine 2 Basic がおすすめ!
このアセットなら、既存のアニメーションを簡単に設定でき、コンボシステムやAIまで組み込み可能。
手間をかけずに、本格的な格闘ゲームを作りたいなら、ぜひチェックしてみてください! 🔥
まとめ
✅ Animatorを設定して、Idle(待機)とRun(移動)のアニメーションを追加
✅ Animatorの遷移(Transition)を設定して、動きに応じて切り替える
✅ スクリプトで Speed
の値を変更し、アニメーションを制御する

これで、キャラクターの移動に連動したアニメーションが完成しました!
次は、攻撃アクションの追加や敵キャラの動きを実装して、さらにゲームらしくしていきましょう!🔥🎮
🎮 まとめ
今回の内容をしっかり理解すれば、2D格闘ゲームの基礎がバッチリ身につきます!
まずはプレイヤーの動きを完璧にし、次のステップへ進んでいきましょう!💪🔥
次回は、攻撃アクションなどを追加して、ゲームをさらに面白くしていきます!
引き続き、一緒にUnityでゲーム開発を楽しんでいきましょう! 🚀🎮
あわせて読みたい
2D格闘ゲームをさらにレベルアップさせたい方は、以下の記事もぜひチェックしてみてください!
- 🎯 【Unity】2D格闘ゲームの作り方②!攻撃&ダメージ判定を実装する方法!
▶ プレイヤーの攻撃モーションや当たり判定を実装して、ゲームにアクション性をプラス! - 🧠 UnityでAIを実装!ビヘイビアツリーと状態マシンで賢いNPCを作る方法
▶ 敵キャラに知性を持たせたい人必見!格闘ゲームのCPU対戦も夢じゃない! - 🎮 【Unity】ストリートファイター風ゲームを作るための必須アセット
▶ 本格的な格ゲー演出を導入したい人におすすめのアセットを紹介! - 🔊 Unityゲーム開発に必須!おすすめ効果音アセット【初心者向け】
▶ 攻撃音やヒット音で格闘シーンに臨場感をプラスしよう! - 🧩 【Unity】2DアクションRPGの作り方①!初心者向けチュートリアル
▶ キャラのアニメーションやバトル演出の基礎が学べる人気記事!
よくある質問(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」にチェックを入れると回転を防ぐことができます。