公式チュートリアルを参考にした移行作業
今まで使っていたRot.js(ダンジョン生成のライブラリ)がUnityでは使えないので、公式チュートリアルを参考にマップを作ってみました。
この公式チュートリアルなんですが、結局一つだけ部屋を生成してそこに障害物を置くだけみたいです。僕がイメージしているローグライクと違いました。
初心者向けのチュートリアルですからあえて簡素な作りにしたのかもしれません。
もしかしたらオブジェクトの置きすぎで処理落ちするのを嫌ったのでしょうか?
まあ床張りで1ブロックずつPrefab置いたら処理落ちするかもしれません。C#はJavaScriptより遅いらしいですから。
でもどうせだったら不思議のダンジョンっぽいのをやってほしかったです。
やっぱり自分でダンジョン生成を書く必要があるようなので書きました。
前回は「区域分割法」と「2分割法」というものでダンジョンを生成していましたので、今回は「穴掘り法」というもので自動生成してみました。
中央にある草ブロックは気にしないでください。
穴掘り法だけだとこういう迷路みたいなのができます。
「できます」とかさも知っていたかの様に言っていますが、実行するまで気が付きませんでした。
穴掘り法は、
- ランダムに進む方向を決める
- その先の2マス先のブロックが通路か確かめる
- 通路でなかった場合はその方向に1マス掘る
- 掘った地点に移動する
これを永遠と繰り返します。
これでもいいかな〜と思いましたが、やっぱり僕は不思議のダンジョン系のゲームが作りたかったので、自分でプログラムを書くことにしました。
領域分割
立命館コンピュータクラブの領域分割とゲームプログラマーを目指すひと ランダムダンジョン生成プログラムのアルゴリズムを参考に領域分割までは作りました。
領域分割線の部分にブロックが配置されていないのは、そこが通路になる可能性があるからです。
分割した領域の中に部屋を配置して、分割線まで通路を伸ばします。
分割線に通路をつなぐことで全部の部屋をつなげられます。
通路としていらない分割線は削除してブロックを配置します。
いらない分割線を消すアルゴリズムはもう考えてあるのですが、たぶん何かしらのバグがある気がするのでちゃんと完成してからお披露目します。
現時点でこれめちゃくちゃ処理落ちしそうなんですけど、大丈夫ですかね?
まあ作るしか無い。処理落ちしたらその時考えよう。
それでは。