3DダンジョンRPG作り方|UnityでProBuilder/ProGridsを使った実装手順

RPGゲームの作り方

「3DダンジョンRPGを作りたいけど、マップ作成やAI、バトルなど工程が多くて大変そう」

多くの人が最初にぶつかるのは、3Dならではの制作工程の複雑さです。

通路や部屋を立体的に組み上げる作業、NavMeshによる経路探索、ライティングの設定、さらに敵AIやバトルシステムなど、必要な要素は2Dゲームよりも格段に多くなります。

しかし、Unity標準の ProBuilder / ProGrids / NavMesh といったツールを正しく使えば、3DダンジョンRPGは個人でも短期間で“最小構成”を完成させることが可能です。

この記事では、3DダンジョンRPGを効率よく制作するための「技術的な全体像」を整理しながら、

  • 必要なツール
  • マップ作成の流れ(ProBuilder / ProGrids)
  • 敵AI(NavMeshAgent)
  • バトルシステム
  • カメラ
  • ランダムマップ生成

までを段階的に解説します。

ゲームを「遊ぶ側」から「作る側」へ

あなたのオリジナルゲーム、今年こそ完成させませんか?

RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。

Unity入門の森|永久会員チケット

永久会員チケット|Unity入門の森

全講座ラインナップを見てみる

実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。

3DダンジョンRPG作り方:結論(必要なツールと作業時間)

3DダンジョンRPG制作は工程が多いため、最初に「全体像」と「必要な準備」を把握しておくと作業が非常にスムーズになります。

この章では、制作に必要なツールと、最小構成を作るうえでの作業時間を先にまとめ、後の工程を理解しやすく整理します。

必須ツール

3DダンジョンRPG制作では、最初に使用するツールを明確にしておくことで、後の作業効率が大きく変わります。

特にUnity本体と標準ツール(ProBuilder、ProGrids)は、マップ制作や配置作業の中心となる重要要素です。

ここでは、最小構成の3Dダンジョン制作に必須となるツールを整理します。

  1. Unity 2021.3 LTS以上
    • 3Dプロジェクトテンプレートを使用
  2. ProBuilder / ProGrids(Unity Package Managerから導入)
    • ProBuilder:3DモデルをUnity内で直接作成
    • ProGrids:グリッドにスナップして正確に配置

推奨アセット(無料)

    • Standard Assets(Unity公式): キャラクターコントローラー、エフェクト
    • TextMeshPro: UIテキスト表示(Unity標準パッケージ)
    • Post Processing Stack v2: 画面効果(フォグ、ブルームなど)

作業時間の目安

      • 最小構成の3Dダンジョン: 基礎を学んだ後で3〜4週間(1フロア、敵5体、バトルシステム)
      • 本格的な3Dダンジョン: 2〜3ヶ月

3DダンジョンRPGの前提知識(Mesh/マテリアル/ライティング)

3DダンジョンRPGを作る前に、以下の3D特有の概念を理解しておく必要があります。

Mesh(メッシュ)の理解

MeshとはMeshは3Dモデルの形状データです。

頂点(Vertex)、エッジ(Edge)、面(Face)で構成されます。

      • 頂点(Vertex): 3D空間上の点
      • エッジ(Edge): 頂点同士を結ぶ線
      • 面(Face): エッジで囲まれた多角形

ProBuilderで作成したオブジェクトも、内部的にはMeshとして扱われます。

よくある誤り: MeshとGameObjectを混同する。Meshは形状データ、GameObjectはUnity内のオブジェクト。

マテリアル(Material)の基本

マテリアルとはマテリアルはMeshに貼り付ける「見た目」を定義します。

マテリアルの主要プロパティ:

      • Albedo: 基本色・テクスチャ
      • Metallic: 金属度(0 = 非金属、1 = 金属)
      • Smoothness: 滑らかさ(0 = 粗い、1 = 滑らか)
      • Normal Map: 凹凸の見た目を表現
よくある誤り: マテリアルをMeshに直接アタッチしようとする。正しくは、MeshRendererコンポーネントにマテリアルを設定する。

ライティング(Lighting)の基礎

ライティングとは3Dシーンでは、Lightがないとオブジェクトが見えません。

主要なLightタイプ:

      • Directional Light: 太陽光のような平行光(ダンジョンの全体照明に使用)
      • Point Light: 電球のような点光源(トーチ、ランタンに使用)
      • Spot Light: 懐中電灯のようなスポット光
注意点: リアルタイムライティングは負荷が高いため、Baked Lightmap(事前計算)を使うとパフォーマンスが向上します。

3DダンジョンRPG作り方の具体的な手順(ステップ形式)

3DダンジョンRPGの最小構成を作る手順を、ステップ形式で説明します。

ステップ1:ProBuilderでダンジョンマップを作成

必要な準備:

      1. Window > Package Manager > ProBuilder をインストール
      2. Tools > ProBuilder > ProBuilder Window を開く

実装手順:

      1. 基本の部屋を作成
        • ProBuilder Window > New Shape > Cube
        • サイズを調整(例:10 x 3 x 10)
        • ProBuilder > Object > Make Unique(Prefab化)
      2. 壁を作成
        • Cubeを複製して壁として配置
        • ProGridsでグリッドにスナップ(Tools > ProGrids > Toggle Grid)
        • グリッドサイズを1に設定
      3. 通路を作成
        • Cubeを削除して通路を開ける
        • ProBuilder > Geometry > Delete Faces で面を削除
よくあるミス: ProBuilderオブジェクトを通常のGameObjectとして扱う。ProBuilderで編集する場合は、ProBuilder Windowから操作する。

作業時間: 1フロア分で2〜3時間

ステップ2:敵の配置とAI実装

必要なComponent:

      • NavMeshAgent(経路探索)
      • Collider(当たり判定)
      • 敵のステータススクリプト

実装例:

using UnityEngine;
using UnityEngine.AI;

public class EnemyAI : MonoBehaviour
{
    [SerializeField] private float detectionRange = 10f;
    [SerializeField] private float attackRange = 2f;
    [SerializeField] private int attackDamage = 10;

    private NavMeshAgent agent;
    private Transform player;
    private bool isPlayerDetected = false;

    void Start()
    {
        agent = GetComponent<NavMeshAgent>();
        player = GameObject.FindGameObjectWithTag("Player").transform;
    }

    void Update()
    {
        float distanceToPlayer = Vector3.Distance(transform.position, player.position);

        if (distanceToPlayer <= detectionRange)
        {
            isPlayerDetected = true;
        }

        if (isPlayerDetected)
        {
            if (distanceToPlayer <= attackRange)
            {
                Attack();
            }
            else
            {
                agent.SetDestination(player.position);
            }
        }
    }

    private void Attack()
    {
        Debug.Log("敵の攻撃!");
    }
}

NavMeshの設定:

      1. ダンジョンフロアを選択
      2. Window > AI > Navigation
      3. Navigation > Object > Navigation Static にチェック
      4. Navigation > Bake > Bake を実行

作業時間: 敵1体のAI実装で1〜2時間

ステップ3:バトルシステムの実装

リアルタイムバトルの実装例:

public class BattleSystem : MonoBehaviour
{
    [SerializeField] private int playerHP = 100;
    [SerializeField] private int enemyHP = 80;
    [SerializeField] private float attackCooldown = 1f;

    private float lastAttackTime = 0f;
    private bool isInBattle = false;

    void Update()
    {
        if (isInBattle && Time.time >= lastAttackTime + attackCooldown)
        {
            PlayerAttack();
            lastAttackTime = Time.time;
        }
    }

    private void PlayerAttack()
    {
        enemyHP -= 20;
        if (enemyHP <= 0)
        {
            Debug.Log("敵を倒した!");
            isInBattle = false;
        }
    }
}

作業時間: バトルシステムの実装で2〜3時間

ステップ4:カメラシステムの実装

サードパーソンカメラの実装例:

public class ThirdPersonCamera : MonoBehaviour
{
    [SerializeField] private Transform target;
    [SerializeField] private float distance = 5f;
    [SerializeField] private float height = 2f;
    [SerializeField] private float rotationSpeed = 2f;

    private float currentRotationX = 0f;
    private float currentRotationY = 0f;

    void LateUpdate()
    {
        // マウス入力でカメラ回転
        currentRotationX += Input.GetAxis("Mouse X") * rotationSpeed;
        currentRotationY -= Input.GetAxis("Mouse Y") * rotationSpeed;
        currentRotationY = Mathf.Clamp(currentRotationY, -30f, 60f);

        // カメラ位置を計算
        Quaternion rotation = Quaternion.Euler(currentRotationY, currentRotationX, 0);
        Vector3 direction = rotation * Vector3.back;
        Vector3 targetPosition = target.position + Vector3.up * height;
        transform.position = targetPosition + direction * distance;
        transform.LookAt(targetPosition);
    }
}

作業時間: カメラシステムの実装で1〜2時間

3DダンジョンRPG作り方の応用(自動生成・ランダムマップ)

本格的な3DダンジョンRPGでは、ランダムマップ生成を実装します。

自動ダンジョン生成の基本

セルオートマトン法の実装例:

public class DungeonGenerator : MonoBehaviour
{
    [SerializeField] private int width = 50;
    [SerializeField] private int height = 50;
    [SerializeField] private int fillPercent = 45;

    private int[,] map;

    void Start()
    {
        GenerateDungeon();
    }

    void GenerateDungeon()
    {
        map = new int[width, height];
        
        // ランダムに壁を配置
        for (int x = 0; x < width; x++)
        {
            for (int y = 0; y < height; y++)
            {
                if (x == 0 || x == width - 1 || y == 0 || y == height - 1)
                {
                    map[x, y] = 1; // 外壁
                }
                else
                {
                    map[x, y] = Random.Range(0, 100) < fillPercent ? 1 : 0;
                }
            }
        }

        // セルオートマトンで滑らかに
        for (int i = 0; i < 5; i++)
        {
            SmoothMap();
        }

        // マップを可視化
        VisualizeMap();
    }

    void SmoothMap()
    {
        for (int x = 1; x < width - 1; x++)
        {
            for (int y = 1; y < height - 1; y++)
            {
                int neighborWallCount = GetSurroundingWallCount(x, y);
                if (neighborWallCount > 4)
                    map[x, y] = 1;
                else if (neighborWallCount < 4)
                    map[x, y] = 0;
            }
        }
    }

    int GetSurroundingWallCount(int gridX, int gridY)
    {
        int wallCount = 0;
        for (int neighborX = gridX - 1; neighborX <= gridX + 1; neighborX++)
        {
            for (int neighborY = gridY - 1; neighborY <= gridY + 1; neighborY++)
            {
                if (neighborX >= 0 && neighborX < width && neighborY >= 0 && neighborY < height)
                {
                    if (neighborX != gridX || neighborY != gridY)
                    {
                        wallCount += map[neighborX, neighborY];
                    }
                }
                else
                {
                    wallCount++;
                }
            }
        }
        return wallCount;
    }

    void VisualizeMap()
    {
        // ProBuilderやInstantiateでマップを可視化
        for (int x = 0; x < width; x++)
        {
            for (int y = 0; y < height; y++)
            {
                if (map[x, y] == 1)
                {
                    GameObject wall = GameObject.CreatePrimitive(PrimitiveType.Cube);
                    wall.transform.position = new Vector3(x, 0, y);
                }
            }
        }
    }
}

作業時間: 自動生成システムの実装で1週間程度

3DダンジョンRPG作り方の教材(Unity入門の森)

3DダンジョンRPGを最後まで作り切るには、マップ制作・AI・バトル・カメラ・ライティングなど、複数の技術を体系的に理解する必要があります。

しかし、ネット上の情報は断片的で、「どこから手をつければいいのか分からない」「実際に動くコードがほしい」という声も多くあります。

そんなときに役立つのが、Unity入門の森の3Dゲーム教材です。

ProBuilderやNavMeshなどの標準ツールを活用した実践的な解説が中心で、個人開発でもプロと同じ手順で3DダンジョンRPGを作り上げられるのが大きな特徴です。

「サンプルコードを動かしながら理解したい」
「3Dダンジョン特有のつまずき(マップ構築・AI・負荷対策)をまとめて学びたい」

という人に、特に向いている内容です。

向いている人

      • 3Dゲーム制作の基礎は理解したが、ダンジョン生成やAI実装が分からない
      • ProBuilderやNavMeshの使い方を体系的に学びたい
      • 実務で使える3Dゲーム開発スキルを身につけたい

得られるスキル

      • ProBuilder / ProGridsを使ったマップ作成
      • NavMeshを使った敵AI実装
      • 3Dカメラシステムの実装
      • ランダムダンジョン生成アルゴリズム
      • 3Dバトルシステムの設計
      • ライティング・ポストプロセッシングの最適化

技術面でのメリット

      • 実装可能なコード: コピペで動くサンプルコードが提供される
      • パフォーマンス最適化: 3D特有の負荷対策(LOD、Occlusion Cullingなど)を学べる
      • 設計パターン: 3Dゲームで使われる設計パターンを学べる

他教材との違い

比較項目 Unity入門の森 Unity公式 Learn Udemy教材(一般)
3Dダンジョン特化 ◎(専用解説あり) × △(講座により差)
ProBuilder / NavMeshの実践 ◎(手順とサンプル付き) △(基礎のみ)
ランダム生成の解説 ◎(3Dダンジョン向け) ×
AI(NavMeshAgent)の深さ ◎(応用まで) △(基礎止まり)
コピペで動くサンプルコード ◎(豊富) ×
個人開発向けロードマップ ×
開発経験者が作った実務寄り内容

3DダンジョンRPG制作でつまずきやすいポイント(NavMeshの設定、カメラの挙動、パフォーマンス最適化など)を、技術的に正確に解説しているため、挫折しにくい構成になっています。

ゲームを「遊ぶ側」から「作る側」へ

あなたのオリジナルゲーム、今年こそ完成させませんか?

RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。

Unity入門の森|永久会員チケット

永久会員チケット|Unity入門の森

全講座ラインナップを見てみる

実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。

まとめ

  • ProBuilder / ProGridsを使えば、3Dダンジョンのマップ制作を最小労力で進められる
    ─ 通路・部屋・壁の構築が高速化し、初心者でも形を作りやすい。
  • NavMesh(経路探索)を理解すると、敵AIの基礎を短時間で実装できる
    ─ プレイヤー追跡AIはダンジョンRPGのコア要素。
  • カメラシステム(特にサードパーソン/一人称視点)はゲーム体験を大きく左右する
    ─ 操作性と没入感の鍵。
  • ランダムダンジョン生成(セルオートマトンなど)は応用だが、作品の価値を大きく高める
    ─ 一度理解すると拡張性が上がる。
  • まずは「最小構成(1フロア・敵数体・バトル)」から作り、段階的に機能追加するのが挫折しないコツ
    ─ 3Dは工程が多いので、完璧主義より“動くものから順に”が重要。

技術的に正確な実装を心がけ、パフォーマンスを意識したコードを書くことで、個人開発だけでなく転職時のポートフォリオにも活用できます。

コメント

タイトルとURLをコピーしました