Unity Create a Game Series (E10. map connectivity)をやってみました。

Sebastian LagueさんのUnity5チュートリアル「Create a Game (Unity 5)」の
Unity Create a Game Series (E10. map connectivity)をやってみました。

このチュートリアルは、第8回になる「E08. tile map」からは今までのプロジェクトと独立していて、第8回からでもチュートリアルとして始められるようになっています。主なテーマは、マップ生成です。

Unityエディターで様々なマップを自動生成
Unityエディターで様々なマップを自動生成

E08,E09,E10と作業して、上記のような自動生成ができるようになりました。マップ生成は複雑に感じますが、実際にはライフゲーム、倉庫番、テトリスのような二次元配列を使い、隣接するXY要素の衝突判定やフラグ判定を行うときと基本的な仕組みは同じでした。またマップの場合は、道が途切れ内容にする方法が必要ですが、これは、アルゴリズムとして確立していてFlood Fillアルゴリズムを使いました。と言ってもやっているとは簡単で、中心をまず調べ、その隣接する障害物じゃないものを調べ続けるという事再帰的に繰り返していくだけです。

マップが二次元配列になっているので、以下が成り立ちます。

マップ全体の要素数 – 壁の数 = 通れるタイルの数

実際の例に置き換えると、以下のようになります。

10×10のマップ(100要素) – 10個の障害物 = 90個の通れるタイル

よって、Flood Fillアルゴリズムで、通れる道を調べたときに、90個に達しなければどこかの道が壁でおおわれていることになります。この仕組みを、壁を作るときに応用し、壁を作ってみて、その時点で、Flood Fillで道を調べふさがってしまったら、壁をいったん取り消すということを、壁の最大個数にするまで繰り返しマップを作ります。

 

このプロジェクトの配布

http://hajimete-program.com/games/Unity Create a Game Series (E10. map connectivity).zip

まとめ

マップ自動生成の基本部分はできたので、あとはUnityのNavigation対応と、壁などの装飾を残すだけです。1回の動画時間は20分以内ですが、一時停止し細かいロジックを理解するとなると1時間を超える作業になるので、思っている以上に時間がかかり大変です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA