【Unity】RPGを作るチュートリアルその63 マップを制御するクラスを作成
- 2025.04.08
- RPGチュートリアル
- RPG, Unity, ゲーム開発, チュートリアル

シンプルなRPGをUnityで作るチュートリアルシリーズの63回目です。
第62回ではエンカウントの動作を管理するクラスを作成しました。
今回はマップの管理の仕組みを考えつつ、マップを制御するクラスから作成していきます。
制作環境
MacBook Pro 2023 Apple M2 Max
Unity6 (6000.0.30f1) Silicon
作業内容と順序
シンプルなRPGを作る上でどんな作業が必要か、どんな順番で作っていくと良さそうか、別ページで検討しました。基本的にこの流れに沿って進めていきます。
チュートリアルの一覧
このシリーズ全体の一覧は以下のページにまとめています。
前回の内容
前回はエンカウントの動作を管理するクラスを作成しました。
マップの管理について
RPGでは今どの場所にいるのか、この場所からどの場所に移動できるのか、といった部分を管理しておくと制御がしやすくなります。村、フィールド、洞窟など、いる場所の単位はマップや、レベルという呼ばれ方をしますが、今回のチュートリアルではマップと呼びたいと思います。
現在の状態だと、マップは以下のように「Grid」の下にタイルマップを配置する形になっています。タイルマップはレイヤーに分かれていて、このレイヤー構成は他のマップでも共通して使いたいと思います。

村、フィールド、洞窟といった区切りでタイルを配置してマップを作成したいので、以下の画像のようにマップの単位で親オブジェクトを作成して管理します。この親オブジェクトにマップ管理用のスクリプトをアタッチして、マップの情報を持たせるようにしたいと思います。また、この親オブジェクトの単位でPrefabを作成して、Addressablesでロードできるようにします。

個別のマップに関してはそのマップを管理するクラスを用意して、シーン内ではマップの読み込みや切り替えを行います。今回はマップの制御クラスを作成していきます。
マップの制御クラスの作成
個別のマップを制御するクラスを作成します。必要な機能としては、
- マップIDを保持するフィールド
- マップ名を保持するフィールド
- エンカウント定義を保持するフィールド
- EncounterManagerにエンカウント定義を渡すメソッド
です。
Projectウィンドウから「Assets/Scripts/Map」のフォルダに移動し、MonoBehaviourのスクリプトファイルを作成します。名前は [MapController] にしました。

作成した「MapController」の中身は以下のように記載しました。
マップID、マップ名、エンカウント定義データをそれぞれInspectorウィンドウから設定できるようにします。
また、エンカウント定義データに関しては、エンカウント管理のクラスに通知するためのメソッドを用意します。このメソッドはマップを表示する際に呼び出す想定です。
スクリプトのアタッチ
スクリプトを保存したら、ゲームオブジェクトの作成してスクリプトをアタッチしましょう。
MapControllerのアタッチ
Hierarchyウィンドウから、「Grid」のゲームオブジェクトの下に空のゲームオブジェクトを作成します。名前は [TestMap] にしました。

作成した「TestMap」を選択し、Inspectorウィンドウから「MapController」のスクリプトをアタッチします。「Map Id」の項目は [0] に、「Map Name」の項目は [テストマップ] に、「Map Id」の項目は [EncounterData_Field] をアサインします。

マップのPrefab化
続いてマップの親オブジェクトをPrefabにします。PrefabはAddressablesでロードできるようにして、読み込むマップIDに対応したPrefabをインスタンス化、あるいはインスタンス化済みなら表示の切り替えができるようにします。
Projectウィンドウから「Assets/Prefabs」のフォルダを開き、新しくフォルダを作成します。名前は [Map] にしました。

作成した「Map」フォルダを開き、Hierarchyウィンドウから「TestMap」のゲームオブジェクトをドラッグ&ドロップしてPrefabを作成します。機械的にロードできるように、名前は [Map_0000_TestMap] にしました。「Map_」の部分が接頭辞で、「0000」の部分はマップIDを4桁で表したもの、その後ろは人が分かるようにマップの説明にしています。ロードしたPrefabを特定する際に、IDを4桁表記に直して文字列の先頭一致を使う予定です。

Addressablesのグループ追加
作成したPrefabをAddressablesに登録するところまでやっちゃいましょう。「Addressables Groups」のウィンドウを開き、コンテキストメニューから [Create New Group] -> [Packed Assets] を選択して新しくグループを作成します。名前は [Map] にしました。

作成したグループに、先ほど作成した「Map_0000_TestMap」のPrefabをドラッグ&ドロップして追加します。コンテキストメニューから [Simplify Addressable Names] を選択して名前を短くしておきます。

マップ用のラベルを追加したいので、ラベルのプルダウンをクリックして、メニューから [Manage Labels…] を選択します。

ラベルの管理ウィンドウでは、新しく [Map] のラベルを追加します。

ラベルの管理ウィンドウを閉じたら、プルダウンから先ほど追加した「Map」のラベルを選択します。

マップ関係のPrefabに関してはこのグループに追加していきます。
ラベルの定数クラスを変更
スクリプト内からラベル名を参照するため、既存のラベルの定数クラスである「AddressablesLabels」を変更していきます。
既存の「Magic」のフィールドの下に「Map」のフィールドを追加します。
動作確認については、マップの管理を行うクラスができてからやっていくので、今回はここまでで完了です。
今回のブランチ
まとめ
今回はマップの管理の仕組みを考えつつ、マップを制御するクラスから作成しました。また、マップ用ゲームオブジェクトのPrefabを管理するために、Addressablesのグループやラベルについても設定を行いました。
次回はマップの管理クラスを作成して、エンカウントの動作を確認していきましょう。
ゲーム開発の攻略チャートを作りました!
-
前の記事
【Unity】RPGを作るチュートリアルその62 エンカウントの動作を管理するクラスを作成 2025.04.07
-
次の記事
【Unity】RPGを作るチュートリアルその64 マップを管理するクラスを作成 2025.04.09
コメントを書く