UnityでSRPGを作りたい。でも、どこから手をつければいいか分からない。
プロジェクト準備から完成まで、段階的に進めれば必ず作れます。
この記事では、実践的な手順を詳しく解説します。
✨ この記事でわかること
- Unityプロジェクトの準備方法
- グリッドマップの生成と表示
- 移動範囲の計算とハイライト表示
- ターン管理システムの実装
- 戦闘処理と敵AIの基本実装

SRPGは、段階的に実装すれば必ず完成します。まずはグリッドマップから始めましょう。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。
Unityプロジェクトの準備

まずは、Unityプロジェクトを準備します。
手順を詳しく説明します。
- STEP1Unity Hubでプロジェクトを作成(所要10分)
1. Unity Hubを起動
2. 「新規作成」をクリック
3. テンプレートは「2D」または「3D」を選択(SRPGは2D推奨)
4. プロジェクト名を「SRPG_Project」に設定
5. 「作成」をクリック
- STEP2必要なフォルダを作成(所要5分)
Projectウィンドウで、以下のフォルダを作成します:
– Scripts(スクリプト用)
– Prefabs(Prefab用)
– Materials(マテリアル用)
– Sprites(画像用)
- STEP3基本シーンの設定(所要15分)
1. Hierarchyで「Main Camera」を選択
2. Projectionを「Orthographic」に変更(2D用)
3. Sizeを10に設定
4. 背景色を適切な色に変更
これで、SRPG制作の準備が整いました。
次は、グリッドマップを生成します。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
グリッドマップの生成と表示

グリッドマップは、SRPGの基礎です。
実装方法を詳しく解説します。
ステップ1:タイルPrefabを作成
- Hierarchyで右クリック → 3D Object → Cube
- 名前を「Tile」に変更
- Scaleを(1, 0.1, 1)に設定(薄い板にする)
- ProjectウィンドウのPrefabsフォルダにドラッグ&ドロップ
ステップ2:グリッドマップ生成スクリプトを作成
Scriptsフォルダで右クリック → Create → C# Script
ファイル名を「GridMap」に変更します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
using UnityEngine; public class GridMap : MonoBehaviour { [Header("マップ設定")] public int width = 10; public int height = 10; public GameObject tilePrefab; public float tileSize = 1f; private GameObject[,] tiles; void Start() { CreateGrid(); } void CreateGrid() { tiles = new GameObject[width, height]; for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { Vector3 position = new Vector3(x * tileSize, 0, y * tileSize); GameObject tile = Instantiate(tilePrefab, position, Quaternion.identity); tile.transform.SetParent(transform); tiles[x, y] = tile; } } } public Vector3 GetWorldPosition(int x, int y) { return new Vector3(x * tileSize, 0, y * tileSize); } public bool IsValidPosition(int x, int y) { return x >= 0 && x < width && y >= 0 && y < height; } } |
ステップ3:スクリプトをアタッチ
- Hierarchyで空のGameObjectを作成(名前を「GridMap」に変更)
- GridMapスクリプトをアタッチ
- Inspectorで「Tile Prefab」に、作成したTile Prefabをドラッグ&ドロップ
- WidthとHeightを設定(例:10×10)
ステップ4:実行して確認
再生ボタン(▶)を押して、グリッドマップが生成されるか確認しましょう。
⚠️ よくあるエラー
- タイルが表示されない:Tile Prefabが正しく設定されているか確認
- タイルが重なっている:tileSizeの値を確認(1.0が標準)
- カメラから見えない:カメラの位置と角度を調整
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
移動範囲の計算とハイライト表示

ユニットを選択すると、移動可能なマスがハイライト表示されます。
実装方法を紹介します。
ステップ1:ユニットスクリプトを作成
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
using UnityEngine; public class Unit : MonoBehaviour { [Header("位置情報")] public int gridX; public int gridY; [Header("移動設定")] public int moveRange = 3; public void SetPosition(int x, int y, GridMap gridMap) { gridX = x; gridY = y; transform.position = gridMap.GetWorldPosition(x, y) + Vector3.up * 0.5f; } } |
ステップ2:移動範囲計算スクリプトを作成
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
using UnityEngine; using System.Collections.Generic; public class MoveRangeCalculator : MonoBehaviour { public GameObject highlightPrefab; private List<GameObject> highlights = new List<GameObject>(); public void ShowMoveRange(Unit unit, GridMap gridMap) { ClearHighlights(); // マンハッタン距離で移動範囲を計算 for (int x = -unit.moveRange; x <= unit.moveRange; x++) { for (int y = -unit.moveRange; y <= unit.moveRange; y++) { int distance = Mathf.Abs(x) + Mathf.Abs(y); if (distance <= unit.moveRange) { int targetX = unit.gridX + x; int targetY = unit.gridY + y; if (gridMap.IsValidPosition(targetX, targetY)) { Vector3 position = gridMap.GetWorldPosition(targetX, targetY) + Vector3.up * 0.1f; GameObject highlight = Instantiate(highlightPrefab, position, Quaternion.identity); highlights.Add(highlight); } } } } } void ClearHighlights() { foreach (var highlight in highlights) { Destroy(highlight); } highlights.Clear(); } } |
このコードで、ユニットの移動範囲がハイライト表示されます。
マンハッタン距離(縦横の移動量の合計)で計算します。
✅ 移動範囲計算のポイント
- マンハッタン距離:縦横の移動量の合計(斜め移動なし)
- ユークリッド距離:直線距離(斜め移動あり)
- SRPGでは、マンハッタン距離が一般的
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
ターン管理システムの実装

ターン制バトルでは、プレイヤーターンと敵ターンを管理します。
実装方法を紹介します。
ターン管理スクリプト
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
using UnityEngine; using System.Collections.Generic; public enum TurnState { PlayerTurn, EnemyTurn, BattleEnd } public class TurnManager : MonoBehaviour { public TurnState currentTurn = TurnState.PlayerTurn; public List<Unit> playerUnits = new List<Unit>(); public List<Unit> enemyUnits = new List<Unit>(); private int currentPlayerUnitIndex = 0; private int currentEnemyUnitIndex = 0; public void NextTurn() { if (currentTurn == TurnState.PlayerTurn) { currentPlayerUnitIndex++; if (currentPlayerUnitIndex >= playerUnits.Count) { currentTurn = TurnState.EnemyTurn; currentPlayerUnitIndex = 0; StartEnemyTurn(); } } else if (currentTurn == TurnState.EnemyTurn) { currentEnemyUnitIndex++; if (currentEnemyUnitIndex >= enemyUnits.Count) { currentTurn = TurnState.PlayerTurn; currentEnemyUnitIndex = 0; StartPlayerTurn(); } } } void StartPlayerTurn() { Debug.Log("プレイヤーターン開始"); // プレイヤーの操作を有効化 } void StartEnemyTurn() { Debug.Log("敵ターン開始"); // 敵AIの処理を開始 } } |
このコードで、プレイヤーターンと敵ターンを管理できます。
各ターンで、ユニットを順番に行動させます。
行動選択UIの実装
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
using UnityEngine; using UnityEngine.UI; public class ActionMenu : MonoBehaviour { public GameObject menuPanel; public Button moveButton; public Button attackButton; public Button waitButton; private Unit selectedUnit; public void ShowMenu(Unit unit) { selectedUnit = unit; menuPanel.SetActive(true); } public void OnMoveClicked() { // 移動範囲を表示 menuPanel.SetActive(false); } public void OnAttackClicked() { // 攻撃範囲を表示 menuPanel.SetActive(false); } public void OnWaitClicked() { // ターンを終了 menuPanel.SetActive(false); FindObjectOfType<TurnManager>().NextTurn(); } } |
ユニットを選択すると、行動メニューが表示されます。
移動・攻撃・待機を選択できます。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
戦闘処理の実装

戦闘処理では、ダメージ計算とHP管理が重要です。
実装方法を紹介します。
ステータス管理スクリプト
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
using UnityEngine; [System.Serializable] public class UnitStats { public int maxHP = 100; public int currentHP = 100; public int attack = 20; public int defense = 10; public int speed = 5; } public class Unit : MonoBehaviour { public UnitStats stats = new UnitStats(); public int gridX; public int gridY; public int moveRange = 3; public void TakeDamage(int damage) { int actualDamage = Mathf.Max(1, damage - stats.defense); stats.currentHP -= actualDamage; stats.currentHP = Mathf.Max(0, stats.currentHP); if (stats.currentHP <= 0) { Die(); } } public int CalculateDamage(Unit target) { return stats.attack; } void Die() { Debug.Log($"{gameObject.name}が倒れた"); gameObject.SetActive(false); } } |
戦闘処理スクリプト
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
using UnityEngine; public class BattleSystem : MonoBehaviour { public void Attack(Unit attacker, Unit target) { int damage = attacker.CalculateDamage(target); target.TakeDamage(damage); Debug.Log($"{attacker.name}が{target.name}に{damage}のダメージを与えた"); if (target.stats.currentHP <= 0) { Debug.Log($"{target.name}が倒れた"); } } } |
このコードで、基本的な戦闘処理が実装できます。
ダメージ計算は、攻撃力から防御力を引いた値です。
- ダメージ計算式:ダメージ = 攻撃力 – 防御力(最小1)
- HP管理:currentHPが0以下になると、ユニットが倒れる
- 拡張可能:クリティカル、相性、スキルなども追加できる
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
簡単な敵AIの実装

敵AIは、シンプルなルールベースから始めます。
実装方法を紹介します。
敵AIスクリプト
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
using UnityEngine; using System.Collections.Generic; public class EnemyAI : MonoBehaviour { private Unit enemyUnit; private GridMap gridMap; private List<Unit> playerUnits; void Start() { enemyUnit = GetComponent<Unit>(); gridMap = FindObjectOfType<GridMap>(); playerUnits = new List<Unit>(FindObjectsOfType<Unit>()); // プレイヤーユニットだけをフィルタリング } public void ExecuteTurn() { // 1. 最も近いプレイヤーユニットを探す Unit target = FindNearestPlayerUnit(); if (target == null) return; // 2. 攻撃範囲内にいるかチェック if (IsInAttackRange(target)) { Attack(target); } else { // 3. 移動して近づく MoveTowards(target); } } Unit FindNearestPlayerUnit() { Unit nearest = null; float minDistance = float.MaxValue; foreach (var player in playerUnits) { if (player.stats.currentHP <= 0) continue; int distance = Mathf.Abs(player.gridX - enemyUnit.gridX) + Mathf.Abs(player.gridY - enemyUnit.gridY); if (distance < minDistance) { minDistance = distance; nearest = player; } } return nearest; } bool IsInAttackRange(Unit target) { int distance = Mathf.Abs(target.gridX - enemyUnit.gridX) + Mathf.Abs(target.gridY - enemyUnit.gridY); return distance <= 1; // 隣接マスなら攻撃可能 } void Attack(Unit target) { FindObjectOfType<BattleSystem>().Attack(enemyUnit, target); } void MoveTowards(Unit target) { // 簡易的な移動:目標に向かって1マス進む int dx = target.gridX - enemyUnit.gridX; int dy = target.gridY - enemyUnit.gridY; int moveX = 0; int moveY = 0; if (Mathf.Abs(dx) > Mathf.Abs(dy)) { moveX = dx > 0 ? 1 : -1; } else { moveY = dy > 0 ? 1 : -1; } int newX = enemyUnit.gridX + moveX; int newY = enemyUnit.gridY + moveY; if (gridMap.IsValidPosition(newX, newY)) { enemyUnit.SetPosition(newX, newY, gridMap); } } } |
このコードで、敵が自動で行動します。
最も近いプレイヤーユニットを探し、攻撃範囲内なら攻撃、範囲外なら移動します。

敵AIは、最初はシンプルに実装しましょう。後から、より賢い判断を追加していけば大丈夫です。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
完成までのロードマップ

SRPGを完成させるまでの、具体的なロードマップを紹介します。
- 週1グリッドマップとユニット移動(所要10時間)
グリッドマップを生成し、ユニットを配置して移動できるようにします。移動範囲の表示も実装します。
- 週2ターン管理と行動選択(所要10時間)
プレイヤーターンと敵ターンを管理し、行動選択UIを実装します。移動・攻撃・待機の基本行動を追加します。
- 週3戦闘処理とダメージ計算(所要10時間)
ダメージ計算とHP管理を実装します。戦闘アニメーションも追加します。
- 週4敵AIとバランス調整(所要10時間)
敵AIを実装し、バランスを調整します。テストプレイで難易度を調整します。
合計40時間で、基本的なSRPGが完成します。
1日2時間なら、約3週間で完成します。
次のステップ
- スキルシステム:必殺技や回復スキルを追加
- 地形効果:森や山などの地形ボーナス
- クラスチェンジ:職業変更システム
- ストーリー:会話シーンとイベント
基本システムが完成したら、これらの要素を追加していきましょう。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
よくある質問(FAQ)

Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。
まとめ

UnityでSRPGを作るには、段階的な実装が重要です。
グリッドマップから始めて、徐々に機能を追加していきましょう。
✅ 今日から始める3ステップ
- ステップ1:Unityプロジェクトを作成する(所要30分)
- ステップ2:グリッドマップを生成する(所要2時間)
- ステップ3:ユニットを配置して移動できるようにする(所要3時間)
本格的にUnityを学びたい方は、Unity入門の森で実践的なスキルを身につけましょう。
あなたのペースで、少しずつ進めていけば大丈夫です。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる



コメント