Procedural Dungeon Generatorでお手軽にダンジョンつくろ〜

ayumegu(プログラマー)
よろしくお願いします。

今回もアセット紹介
今回は現在Madnessセール中のProcedural Dungeon Generator

なにができるかというとダンジョン生成とか、マップとかつくれます。
パターンも何種類もあるので見ているだけでわくわくします。
デモのサンプルで作ったマップをいくつか

部屋のサイズや数、ドアの数など多少パラメータで変更できます。
あとはデータから2Dなり3Dなり好きに配置すればOK

3Dのデモ
  

2Dのデモ

##とりあえずダンジョンを作ってみる かるい紹介はここまでで早速ダンジョンをつくってみることに
2Dにしようと思うので前回記事で紹介したRpgMapEditorを表示周りは使用します
こんな感じのものを作るならソースは下記1ファイルで完了

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using ProD;
using CreativeSpore.RpgMapEditor;
public class Test : MonoBehaviour {
public WorldMap worldMap;
public AutoTileMap autoTileMap;
void Start () {
Generator_Dungeon.SetGenericProperties(49,49, "");
Map tempMap = Generator_Dungeon.Generate();
for(int y = 0; y < 49; y++)
{
for(int x = 0; x < 49 ; x++)
{
autoTileMap.SetAutoTile(x, y, -1, (int)AutoTileMap.eTileLayer.GROUND);
autoTileMap.SetAutoTile(x, y, -1, (int)AutoTileMap.eTileLayer.GROUND_OVERLAY);
Cell cell = tempMap.GetCell(x, y);
if(cell.type == "Wall")
{
autoTileMap.SetAutoTile(x, y, 17, (int)AutoTileMap.eTileLayer.GROUND);
}
else if(cell.type == "Abyss")
{
autoTileMap.SetAutoTile(x, y, 0, (int)AutoTileMap.eTileLayer.GROUND);
}
else if(cell.type == "Path")
{
autoTileMap.SetAutoTile(x, y, 16, (int)AutoTileMap.eTileLayer.GROUND);
}
else
{
autoTileMap.SetAutoTile(x, y, 16, (int)AutoTileMap.eTileLayer.GROUND);
}
if(cell.type == "Exit")
{
autoTileMap.SetAutoTile(x, y, 1032, (int)AutoTileMap.eTileLayer.GROUND_OVERLAY);
}
else if(cell.type == "Entrance")
{
autoTileMap.SetAutoTile(x, y, 1033, (int)AutoTileMap.eTileLayer.GROUND_OVERLAY);
}
}
}
}
}

注意はマップの縦、横は奇数ではないとだめです。
cell.typeは

  • Wall:壁
  • Abyss:通路と接していない壁っていうのかな
  • Path:道
  • Door:扉
  • Entrance:入り口
  • Exit:出口

です。

ダンジョンの細かいパラメータを変更したいときは

private static int room_Min_X = 3;
private static int room_Max_X = 11;
private static int room_Min_Y = 3;
private static int room_Max_Y = 11;
private static int room_Freq = 10;
private static int room_Retry = 6;
private static int doorsPerRoom = 2;
private static int repeat = 12;
private static bool frameMap = false;
void Start () {
Generator_Dungeon.SetGenericProperties(49,49, "");
Generator_Dungeon.SetSpecificProperties("Abyss", "Path", "Wall", room_Min_X, room_Max_X, room_Min_Y, room_Max_Y, room_Freq, room_Retry, doorsPerRoom, repeat, frameMap);
Map tempMap = Generator_Dungeon.Generate();
// マップ表示処理
}

こんな風にGenerator_Dungeon.SetSpecificPropertiesメソッドにパラメータを渡してあげると変更できます
試しにドアの数を2にしてみたところ

あとはRpgMapEditorの記事のときに紹介した通りPlayerを配置したりすればこの通り
簡単につくったもの</a>

##感想 マップチップでやるならProcedural Dungeon GeneratorとRpgMapEditorがあればあっという間にダンジョンゲームはできてしまいそうです。
経路探索も入っているのでターンベースにしたり、わくわくですね〜。
もう1からダンジョン生成アルゴリズムをくむ必要がないという、素敵な時代になりました。