竹林ソフト 2024/03/03 20:00

再建を繰り返す街づくりゲーム開発(マップ生成について)

マップは InteliMap Pro アセットで生成したものを使うことにします。
今回は、実際の使い方について定義します。

やったこと

IntelMap Pro でのランタイムマップ生成

このアセットは「こういう感じでマップ生成してね」というものを解析させると、それを元にランダムなマップを生成してくれるものです。

前回から引き続き使ってみた感じ、

  • 指定した範囲のマップを生成できる。
  • 生成の際にシードを指定できる。
  • 同じエリアに複数回の資源配置を行うことで、資源量を上乗せできる。
    • 川なんかの接続は考慮される。

ということがわかりました。

↓ 与えたオブジェクト配置

↓ 生成サンプル(クリア、1回目の生成、2回目の生成、3回目の生成、のループ)

つまり、ランダムシードと資源配置の回数さえ同じなら全く同じマップが生成されるので、例えば 64x64 を1エリアとして、このエリアごとのランダムシードと配置回数とが同じになるようにすればいいだけです。

なので、1つのランダムシードさえセーブデータに保存しておいて、それから他のエリアのためのランダムシードを生成して使う仕組みにします。

あとは、例えば木を伐採したときには「この座標の木は伐採されてあと N ラウンドで復活する」という変更された情報だけ保存するようにします。

実装自体はまた後でやりますが、ベースとなるランダムシードに対して、例えばエリアの座標が (x, y) で表されるとしたら、seed = baseSeed + (y << 16) + x; でいいかなと思っています。資源を生成する回数は (x, y) と原点との距離で決まるようにします。

建物画像へのアウトラインや色のテスト

フィールド上の建物にフォーカスしたときにアウトラインを描画したり、建築のときに建物画像を緑色や赤色にするあたりを実装します。

実装というか、そのあたりの実現のために All In 1 Sprite Shader アセットを利用します。

そして、ドキュメントを読んでアウトライン、全体を緑色にする、赤色にする、を切り替わるデモを作成しました。

        while (true)
        {
            material.EnableKeyword("OUTBASE_ON");
            yield return wait;
            material.DisableKeyword("OUTBASE_ON");

            material.SetColor("_GreyscaleTintColor", Color.green);
            material.EnableKeyword("GREYSCALE_ON");
            yield return wait;
            material.DisableKeyword("GREYSCALE_ON");


            material.SetColor("_GreyscaleTintColor", Color.red);
            material.EnableKeyword("GREYSCALE_ON");
            yield return wait;
            material.DisableKeyword("GREYSCALE_ON");
        }

いずれこのコードを建物の処理まわりに実装すればオッケーです。よいです。

ゲーム仕様の検討

ゲーム仕様というか、ゲーム序盤の流れを書き出しました。

- 新規ゲーム -> シナリオ選択 -> マッププレビュー -> 決定
- 画面下の建物ボタンにカーソルを合わせてツールチップ表示で概要や建築コストを確認できる。
- 建築できない建物のツールチップには「(~の技術)が必要」などと、わかるように表示する。
- setup.lua で指定した資源の総数が画面上に表示できる。
- 資材が足りない場合、建物を赤色プレビュー表示する。
  - 資源が不足していても建築指示は行える。
- 初期に必要になる建物は木材だけで建築できる。
  - 住居など
- 整地ボタンを押してエリアを指定すると、エリア内の木材の伐採や建物の解体を行う。
  - 整地したエリアは道として扱う。
    - 地面の種類: なし(緑)、草、整地、道、舗装路、線路
- 拠点から接続されていない場所の木材の伐採指示が行われたときには警告メッセージを表示する。
  - 「拠点から道がつながっていません」
  - 警告アイコンをフィールドに表示
    - フォーカスでメッセージ表示
  - 画面に警告のリスト表示
- ワーカーの最大数は時間経過や技術で増える。
  - setup.lua で設定できる。
- 拠点は市場として機能して生活品を住居に運搬する。
- 拠点は定期的に食料を生産できる。
- ゲーム開始時に大量の食料を拠点に配備しておいてもいい。
- 研究は専用の建物で行う。
  - Factorio と同様に、必要なアイテムが揃うと研究ポイントが増加する。
- ワーカーは仕事を始めると、帰宅するまで他の仕事を行わない。
  - 仕事は種類優先でワーカーを割り振る。

まだ敵とか防衛とかリーダーの要素など、いろいろと仕様が曖昧なので、引き続きゲームの流れを考えながら仕様を決めていきます。

まとめと今後の予定

仕様を決めながら、使うであろう機能の要素実装を行いました。よいです。
次回もこんな感じで進めていきます。がんばります。

月別アーカイブ

限定特典から探す

記事を検索