ローグライクゲームの作り方12 乱数でダンジョン自動生成システムを構築しよう | Unity入門の森 ゲームの作り方

ローグライクゲームの作り方12 乱数でダンジョン自動生成システムを構築しよう

Unity ローグライクゲームの作り方


Unity入門の森オリジナル本格ゲーム制作講座はこちら
11種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

前回の記事ではローグライクゲームの罠システムを実装しました。

プレイヤー、敵、パラメータとUI、宝箱、罠と順に作成してきました。かなりシステム面が仕上がってきました。

前回の記事:

ローグライクゲームの作り方11 罠イベントを開発してプレイヤーの冒険を邪魔しよう
前回の記事では武器、HP回復アイテム、空腹度回復の食料などパラメータが変化するアイテムを取得できる宝箱イベントを作り、実際にダンジョンに配置できるようにしました。 前回の記事: 今回の記事ではアイテムに引き続きマップに罠を配置できるようにし...

今回の記事ではいよいよローグライクゲームの大きな特徴であるマップの自動生成システムを開発していきます。

本講座で最難関となる箇所ですが気合を入れて取り組んでいきましょう。

もし難しければ一旦書き写して動作する形にしてから色々値を変えたり改造して理解を深めていきましょう。


【Line登録者限定のプレゼントもあるよ!】

迷路自動生成アルゴリズムの作成

マップ自動作成には色々な方法がありますが、この記事では次のようなやり方でダンジョンを自動生成していきます。

  • 指定したマップのサイズを埋めるように壁を配置する
  • スタートとゴールを結ぶ道を作成する
  • 適当に壁を道や敵などに変更する

自動生成の処理は「Map」スクリプトに追加し、実際に生成する命令を出すのは「MapSceneManager」コンポーネントで行います。

まず、「MapSceneManager」コンポーネントを自動生成に対応するように修正します。

また、確認を簡単にするために「MapSceneManager」コンポーネントに次のメソッドを追加するのもいいでしょう。

「Update」メソッドでスペースキーを押すとマップを再生成するようにしています。

このメソッドはあくまで確認用なので、後々削除するのを忘れないようにしましょう。

上のコードではまだ定義していないものを使用しているので、コンパイルには失敗します。

マップを壁で埋める

では指定したサイズのマップを作成し、その全てを壁に埋めるようにします。

「Map」スクリプトに以下の内容を書き加えて修正してください。

この状態で再生するとマップが全て壁に埋め尽くされる状態になっています。

マップのサイズはシーンの「MapManager」の「MapSceneManager」コンポーネントの「MapSize」フィールドで指定することができます。

その時、「MapSceneManager」コンポーネントの「IsAutoGenerate」フィールドにチェックを入れるようにしてください。

注意点として、マップにプレイヤーがいないのでカメラが変な位置になっています。Sceneビューで適宜確認してみてください。

スタートからゴールまでの経路を作成

次にランダムな位置にプレイヤーとゴールを配置し、その間を結ぶように道を作ります。

スクリプトの修正が少々ややこしいので段階を踏んで行います。

まず、準備としてMap.csのGenerateMapメソッドを修正します。

続きを読む

このコンテンツはパスワードで保護されています。 コンテンツを読みたい方はUnity入門の森ショップ(https://unityforest.shop/)で講座閲覧権を取得してね。

まとめ

今回の記事では比較的簡単な方法(とは言えそれなりに複雑)ではありますが、マップの自動生成を行えるようにしました。

この記事の内容は乱数による自動生成なので、大雑把なマップが生成されます。

より精密なマップを生成したい時はパラメータを増やしたり、異なるマップ生成アルゴリズムを使用するといいでしょう。

テンプレートとなるマップ予め作成しておき、それらを組み合わせるのも一つの方法になります(レベルデザインの観点ではこのようなやり方の方が実践的かもしれないです)。

また、敵の移動アルゴリズムもマップの特徴に合わせたものにする方が自然な動作になります。この辺りも作成する内容によるので、色々とお好みに応じて試してみてください。

ローグライクゲームは作り始めると奥が深いです。

今回の講座で開発した内容は次のものになります。

  • マップの自動生成処理の組み込み
  • 指定したサイズのマップを壁で埋め尽くすように生成した。
  • 開始位置からゴールまでの位置を結ぶようにした
  • ランダムで壁マスを他のマスに置き換えるようにした。

それでは次の記事に行ってみましょう!

ローグライクゲームの作り方13 マップ移動を追加して不思議のダンジョンを完成させる
前回の記事では本講座の最難関であるマップ自動生成処理の作成を行いました。 前回の記事: 入る度に形を変える不思議のダンジョンのようなシステムを無事に実装できましたが、今のままだと次の階へ進んでいくことができません。 そこで、今回の記事では階...

Unity ローグライクゲームの作り方講座へ>>



Unity入門の森オリジナル本格ゲーム制作講座はこちら
11種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

コメント

タイトルとURLをコピーしました