Procedural Dungeon Generatorでお手軽にダンジョンつくろ〜
今回もアセット紹介
今回は現在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からダンジョン生成アルゴリズムをくむ必要がないという、素敵な時代になりました。