Unityの有料アセットであるRPG Map Editorは2DのRPGのフィールドマップやダンジョン制作に有用な,Creative Sporeが作成したツールである.

目次

  1. デモ
  2. セットアップ
    1. タイルセット
    2. タイルマップ
  3. マップチップの読み込み
  4. マップの作成
    1. タイル
    2. 衝突の種類
    3. コピーに関するTips
    4. Shiftキーに関するTips
  5. キャラクターを動かす
  6. 通行可・不可を確認する
    1. 単に通行の可・不可をチェックしたい
    2. レイヤー別に表示・非表示を切り替えて状況を把握をしたい
    3. 全てのレイヤーを表示したまま状況を調べたい.
  7. OrderとDepth
    1. Order
    2. Depth
    3. 実験
    4. 結論
  8. エクスポート
    1. Tileset
    2. Map Data
    3. map.xml
    4. ファイルの依存関係について

デモ

購入後にデモを実行する方法は以下の通り.
まず,Asset Storeからアセットをインポートする.

アセットのインポート

次に,Assets > CreativeSpore > RpgMapEditor > Samples > Scenes > demo1 - Big Mapを選択すると,デモを行うことができる.

デモの選択

ゲームを再生すると,プレイヤーキャラクターを動かすことができる.
また,左端に表示されているマップチップをリアルタイムで差替えて試すことができる.

ゲームの再生

セットアップ

  1. プロジェクトから+を選択する.

プロジェクトの+を選択

  1. RpgMapEditor > AutoTilesetを選択すると,アセットに新しいタイルセットが追加される.

新しいオートタイルセットを作る

  1. 同様にヒエラルキーで右クリックまたは+を選択して,新しくタイルマップを作ることができる.

新しいタイルセットとタイルマップができた

タイルセット

インスペクタで新しいタイルセットを見ると,アトラスの生成ボタンがある.
ここから,材料となるマップチップを読み込む.

タイルマップ

作成されたAutoTileMapをヒエラルキーで選択する.

オートタイルマップを選択したところ

すると,インスペクタの下にTilesetMap Dataという項目があるので,これを新規作成することでマップの作成を開始することができる.

マップチップの読み込み

ツクールやウディタなど向けに開発されたマップチップも利用したい場合.

  1. ヒエラルキーにAutoTileMapを作った後,インスペクタを開く.
  2. TilesetをCreateするボタンを押す.
  3. スロットサイズ(どれぐらいたくさんのタブを用意するか.つまり,どれぐらいたくさんの素材を使うことにするか.)とピクセル(32*32のマップチップなら「32」とする.)を決める.
  4. 3つのファイルができるが,素直な名前のTilesetを開き,使うことにするマップチップをタイルセットのアトラスに入れていく.

スロットサイズが2×2であれば,アトラスは4スロットを持つ.
ノーマルタイル1スロットごとに4つのタブができ,各タブには512×512ピクセルのサイズが確保されている.

マップの作成

レイヤー・衝突・コピーについて.
詳細はRPG Map Editorの付属ドキュメントを参照.

タイル

カメラから見たマップ・プレイヤーの見た目関係として3種類の区別がある.
タイルと基本的なレイヤーの関係は以下の通り.

  • アルファのない不透明タイル(地面)→Groundレイヤーに置く.
  • アルファタイル(地面の上に置かれた物)→Ground Overlayレイヤーに置く.
  • オーバーレイタイル(キャラクターが裏にまわれる物):タイルセットで衝突の種類が「オーバーレイ(★)」となっているもの→Overlayレイヤーに置く.

通常の設定でプレイヤーキャラクターの下にくるのがGroundGround Overlayで,上にくるのがOverlayである.

必要であれば,レイヤーは増減できる(し,後述の通り,コピーに特徴があるので,自分で見返して意味が分かるように適当な名前をつけてレイヤーを使い分ける方がよい).
その場合の見た目の関係は,カメラ・プレイヤー・各レイヤーのOrderDepthに従う.

衝突の種類

プレイヤーが壁を突き抜けたりしないように,衝突を設定する.
プレイヤーより地面方向で一番近いところにあるものを基準に,衝突の判定を行なっているようである.

  • ブロック(■):タイル全体に衝突する.
  • 壁(□):縁の部分でのみ衝突する.オートタイルなんかでこの表示がある.
  • 柵(♯):オーバーレイ的に後ろが見えるけれども,衝突する.
  • オーバーレイ(★):衝突しないタイルの種類で,オーバーレイレイヤーに描かれることが想定されている.

壁とは,側面のことではなく,上から真下を見下ろした図で当たるところのこと.
正方形に囲われた9マスのタイルであれば,壁を周辺8マスに適用して,中心は衝突設定しない感じ.
特に理由がない限り,建物の側面にはブロックを使う.

衝突も後からまとめて設定できる.

コピーに関するTips

レイヤーを有効/無効にすることで,レイヤーを表示/非表示にすることができる.
また,タイルをコピーすると,無効にしたレイヤーをスキップできる.

Shiftキーに関するTips

Shiftキーを押しながらのマッピングはMap Layersの並び順で次のレイヤーに置くという操作になる.

  • Groundに地面を描きながら,Ground Overlayに石や草を置きたいとき.
  • Ground Overlayに石や草を描きながら,その上空のOverlayレイヤーへ旗や電灯を吊るしたいとき.

レイヤーを増やしても次のレイヤーへ描くという意味で挙動は同じである.

注意.
エディタ上でGround OverlayGroundOverlayという並び順で作業している場合,Ground OverlayでShiftを押すと,Groundにタイルを置く.
また,GroundでShiftを押すと,Overlayになる.
ちなみに,OverlayでShiftを入れると,これより後のレイヤーがないので描くことができない.

キャラクターを動かす

  1. サンプルのPlayerPlayerCameraをヒエラルキーに入れる.

サンプルゲームのPlayerプレハブ

Playerプレハブをヒエラルキーに追加

サンプルゲームのPlayerCameraプレハブ

PlayerCameraプレハブをヒエラルキーに追加

  1. PlayerCameraTargetPlayerをセットする.

カメラの被写体をプレイヤーにする

  1. AutoTileMapViewCameraPlayerCameraをセットする.
    この見本では,サンプルのタイルセットとマップデータを用いた.

オートタイルマップでも同じカメラにする

  1. 元から存在するメインカメラを削除する.
    既存のカメラは削除

通行可・不可を確認する

RPG Map Editorで制作するマップにおいて,キャラクターが壁を突き抜けたりするのを予防するためのチェック方法.

単に通行の可・不可をチェックしたい

Auto Tile MapShow Collisionsにチェックを入れる.
通行できないところが赤で塗られる.

レイヤー別に表示・非表示を切り替えて状況を把握をしたい

インスペクターからマップをペイントするときのEditで,Map Layersの各チェックボックスを使ってレイヤー表示/非表示を切り替える.

全てのレイヤーを表示したまま状況を調べたい.

ヒエラルキーのAutoTileMapDataに内包されたオブジェクトをクリックすると,マップ上で該当するレイヤーが強調表示される.
ただし,複数のレイヤーがペイントされたグリッドは,いずれのレイヤーでも強調表示される.

OrderとDepth

見た目の重なり方と通行可能性が一貫するかどうか実験した.

Order

数値が大きいとカメラ側に描かれる.
デフォルトは0となっていて,1, 2, …となると後から描き足されていく.
(マイナスに設定することもできる.)
しかし,衝突判定に影響を与えるわけではない.

Depth

数値が小さいと通常はカメラ側に描かれる.
つまり,プレイヤーをゼロ地点として,プラスで絶対値が大きい方が地面,マイナスで絶対値が大きい方が空中方向に描く.
衝突判定を上書きしていく.

マイナスのGroundに置かれたタイルは通行可・不可が利く.
プラスのOverlayは,ぶつからないGround Overlayのようなもの.

実験

通行可能な草むらタイルと通行不能な岩タイルを使って草むらの上に岩を置き,通路を塞ぐマッピングを行いたいとする.
(例示はGround / Overlayの2分法で行う.)
まずは全てorder = 0とする.

  • 通常:depth = 1.0Groundに草むら,depth = 0.5Groundに岩(草むらの上に岩を置く)⇒岩にぶつかる<見た目通りでOK>
  • depth = 1.0Groundに岩,depth = 0.5Groundに草むら(岩と草むらが反対になっていて,岩を草むらで塗りつぶす)⇒プレイヤーは草むらに直面しているので通行可能<草しか見えないので衝突判定も見た目通りだが,草むらの下に変な物があるのは望ましくない>
  • depth = 1.0Groundに草むら,depth = - 0.5Groundに岩(草むらの上に空中寄りの位置に岩を置く)⇒岩にぶつかる<見た目も衝突も正しいので実用上は問題ないが,余裕があれば修正すべき>
  • depth = 1.0Groundに草むら,depth = - 0.5Overlayに岩(草むらの上の空中に岩を置く)⇒岩が浮いているので,岩をくぐる<衝突が見た目と異なるのでNG>
  • depth = 1.0Groundに草むら,depth = 0.5Overlayに岩(草むらの上の地面寄りの位置の空中に岩を置く)⇒浮いている岩をまたぐ<衝突が見た目と異なるのでNG>
  • depth = 1.0Groundに草むら,depth = 0.5Groundに岩という通常のケースから,岩を置くGroundレイヤーをorder = 0,草むらを置くGroundレイヤーをorder = 1⇒岩の後に草むらが描かれるので,岩が見えなくなる.しかし,Orderは衝突に作用しないので,Depthに基づいて岩にぶつかる.<衝突が見た目と異なるのでNG>

結論

以上から,衝突が見た目と変わってしまうのでOverlayOrderには注意する必要がある.

エクスポート

マップのエクスポートはUnityPackage形式で行える.

エクスポートするものの主な実体はTilesetMap Datamap.xmlであった.

Tileset

AutoTileMapのインスペクタを開くと,TilesetMap Dataで使われているデータがある.このTilesetをクリックしたところにタイルセット,タイルセットのアトラスマテリアル,タイルセットのインポート設定という3つのファイルがある.これら3ファイル.

タイルセットをクリックすると、プロジェクト内のファイルが置かれた階層へ移ることができる

タイルセットのエクスポート

アトラスマテリアルのエクスポート

インポート設定のエクスポート

Map Data

先ほどのAutoTileMapのインスペクタのMap Dataに該当するファイル.

Map Dataのエクスポート

map.xml

同じくAutoTileMapのインスペクタで,DataのタブにExport Map...という項目があり,クリックするとXMLファイルが生成される.

XMLファイルのエクスポート

ファイルの依存関係について

Map Dataは,Tilesetのどこに位置する画像が使われているかを各レイヤーごとに管理している.
XMLファイルはこのMap Dataのセーブデータである.
試しにXMLをエクスポートした後でマップを書き換え,XMLを再度インポートしてみると,エクスポートしたときのデータまで戻る.

Map DataをそのままにTilesetを差し替えると,アトラス的に同じ位置にくる新しいTilesetの画像に差し替えられる.