Unity2018.1.5f1
Windows10
□
自動生成のダンジョンに興味はおありでしょうか。
今回はそれの最もシンプルな形、迷路の自動生成システムを作ります。
迷路を自動で作るには方法がいくつかありますが今回は穴掘り法にしました。
全面が壁の空間にスタート地点の穴を作り、そこから2マス先に壁があるかどうか判定し、あればそこまでの壁を消す、なければ消さない、ということを繰り返して道を作っていきます。
今回私は自己流でそのシステムを作ってみました。
ダンジョン作りの参考にしてもらえたら嬉しいです。
■オブジェクトを用意する
オブジェクトとスクリプトを出す
まずは空のオブジェクトを2つ出しましょう。
名前は「MazeGnerator」と「Miner」です。
Hierarchy > Create > Create Empty
次にとりあえずC#スクリプトを作ります。
名前はオブジェクトと同じ「MazeGnerator」と「Miner」にしてください。
Project > Create > C# Script
そして同じ名前のオブジェクトにアタッチしてください。
もうひとつオブジェクトを出しますが、それは壁になるCubeです。
Hierarchy > Create > 3D Object > Cube
Prefabにする
次はMinerとCubeをPrefabにします。
その2つのオブジェクトをHierarchyからProjectにドラッグ&ドロップしてください。
そしてHierarchyに残っているそれらのオブジェクトを右クリック→Deleteで消しましょう。
Prefabにするとスクリプトで生成できるようになります。
今回の迷路の自動生成システムはMazeGneratorがCubeを大量に並べ、Minerで通路を掘っていきます。
MinerはMazeGneratorからひとつ出された後は自身で判定して次々にMinerを出し役目を終えたら消えていき最後はすべて消えるという仕組みです。
■スクリプトを書く
さあ次は2つのスクリプトを書きましょう。
MazeGeneratorスクリプト
スポンサーリンク
Minerスクリプト
Inspectorの設定をする
次はそれぞれのInspectorの設定をします。
MazeGneratorにはCubeとMinerのPrefabを。
MinerのPrefabには同じMinerのPrefabをセットしてください。
あと最後にCameraの位置をセットします。
15×15ならこの位置で良いでしょう。
さて無事に動いたでしょうか?
■作成中に困ったこと
Unityがストップした
これはなぜコルーチンにしたかの理由なのですが、最初全方向の判定とオブジェクトの消去、Minerの生成を一度にするようスクリプトを書きました。
そしたらUnityはストップしうんともすんとも言わなくなります。
処理が重すぎたのか、それとも一度に判定すると矛盾が出るためどうにもできなくなったのかは分かりませんが、コルーチンで時間差をつけることで解決しました。
迷路生成が途中で止まった
今回、MazeGneratorスクリプトから引数をMinerスクリプトのDoMining関数で受け取り、それからMiningコルーチンに引数を送っています。
しかし、MazeGneratorスクリプトから直接コルーチンに引数を送ることもでき、そうした方がコードの短縮になるとやってみた結果迷路の生成が途中で止まるようになりました。
どうもコルーチンの処理は重いようで別クラスから何度も起動させることに無理があったようです。
□
今回の迷路の自動生成システムですが、最初は必ずZ軸のプラスの方向から判定するという欠点があります。
他の方のやり方を見たらひとつのスクリプトで完結させていました。
コードを見ても理解できなかったのですが、自分なりのやり方で改善してみたいです。
それでは今回はこれで。
お疲れさまでした。
続きです。
【UnityC#講座】迷路の自動生成システムを改善した【配列、Switch文、List】
■関連記事
【UnityC#講座】オブジェクトを縦横規則正しく並べて生成、色を変える、子オブジェクトにして検索する
スポンサーリンク