竹林ソフト 2024/05/23 20:00

ねこ巫女籠城ゲーム開発(敵の移動の仕様を考える)

攻めてくる敵の移動をそれっぽくするための仕様を書き出して検討します。

やりたいこと

概要から書き出してみると

  • 作った城郭の周囲に敵が配置されて、その敵がわらわらと押し寄せてくる。
  • 敵は門とかに集中しつつも、適当に斜面なり石垣を登ったりもしてほしい。

ということを実現したいです。
実装を前提にした仕様を考えていきます。

敵の経路探索について

基本的にはダイクストラ法を使って敵の攻撃対象である「拠点」として定義した建物に向かうようにします。
なんというか「大部分の敵は門に向かいつつも、ある程度の数の敵は門以外を攻めようとする」みたいなことを実現したいです。

具体的な経路探索については、

  • 拠点からダイクストラ法でタイルを評価していき「拠点に向かうにはこっちに移動する」という方向をタイルごとに8方向で定義する。
    • この評価はフレームごとに少しずつ行い、足元に移動方向が定義されたユニットは移動を開始する。
  • 全てのユニットの足元のタイルに移動方向の定義が終わったら、改めて最初からタイル評価を始める。
    • 門などでの渋滞を考慮して、渋滞が発生しているタイルの移動コストを高めにする。
    • 評価し直した結果は順次タイルに上書きしていく。

という処理を考えています。小難しいですね。
いつもそうなのですが、自分が実装する仕様を小難しいものにするのは大変つらいです。

敵のわらわら感は Boids っぽいもので実現する

Boids は群れっぽく移動させるアルゴリズムです。
とりあえず、1つのタイルに入れる敵の数を抑制する、とかの実装を考えていますがまた後で考えます。

1つのタイルといっても、石垣の斜面は1つのタイルに収めるつもりなのですが、石垣を登れる敵の数を抑制してもいいのかとか、思ったよりは簡単じゃないです。石垣だけ特別扱いすればいい気もしています。

建物や壁の敵の乗り越え方について

これは、建物や壁に対して移動用のメッシュを定義してあるので、それを利用するつもりです。壁はタイルの境界線上に配置されうるのですが、それは移動用メッシュをタイルごとになるように分割します。

↓ 過去に作った建物の移動用メッシュの例

その他

近接攻撃の敵の移動は、基本は拠点に向かいつつも近い距離にタレットがあったら移動して攻撃してもいいかな、とか考えています。

石垣の上にある隅櫓などについてですが、実物の櫓を見ると登って侵入できる気がしないのですが、ゲームなので櫓にとりついてある程度の移動時間が経過したら壁をすり抜けて建物内に移動できるようにします。
建物内に移動した敵が建物にどう影響するかはまた後で考えます。

まとめと今後の予定

今回は、敵の移動をどうするかを考えて書き出してみました。よいです。

次回は「敵がまっすぐ移動する」とかの基本動作に着手して、順に「壁があったら乗り越える」という機能を追加していきたいです。がんばります。

月別アーカイブ

限定特典から探す

記事を検索