マップ生成アルゴリズム・NPCの経路探索など

[マップ生成アルゴリズム]

マップ生成関連で色々調べ、WaveFunctionCollapse

似たような感じで
処理の繰り返しだけで構成されているシンプル性とかルール、生成パーツ等を
変えるだけで生成パターンを変えられる拡張性のある方法で生成したい。
そういう方向性のテスト用として作ったマップが以下の画像。



手順としては
  1. マップの空間を生成するブロックのサイズ単位に分ける
  2. マップの端またはブロックが生成済みの空間に隣接する空間の中から1つ選ぶ
  3. 選んだ空間から隣接する面と反対の方向に適当な長さの空間にブロックを生成できるか判定し、可能なら生成
  4. 2へ戻る
今は生成部分が(1*1*適当な長さ)の直方体だけど、生成パターンを増やしたり、隣接するブロックの条件で制約つけたりするともっと色んなパターンを生成できそうな気はする。

[NPCの経路探索]

マップの構造のことやマップが壊せることもあり、常に歩くルートで経路探索するのが難しいので、プレイヤー、NPCが飛行できるようにした。
ただ、飛行中の方が射撃精度がばらつきやすく、ダメージを受けた後は飛行できなくなるようにして、飛行はあくまで移動用で、撃ち合う時は地面の上にいたほうが有利になるようにした。

経路探索はA*で探索するようにして、上記の点やあまりにふわふわ飛んで移動するのも
かっこよくないので、経路探索時の移動コストを空中より地面の上の方が
少なくなるようにしてなるべく歩いての移動が多いルートを選ぶようにした。

また、目的地までのルートを一度に探索しようとすると処理に時間がかかるので
ある程度のところで処理を打ち切り、見つけた地点の中で最も移動しやすく目的地までの
直線距離が短いところまで移動するようにした。

文字で説明するのもわかりずらいので、以下がNPCが目的地まで移動している動画。


[NPCの動作・戦闘]

NPCの他のキャラクターの感知、射撃や戦闘時、ランダムな近くの場所へ移動したり
敵が視界からいなくなった時に最後に敵を見た位置まで探しに行くといったシステムを作った。
そのあたりの動作テストを行ったのが以下の動画。


ということで書きたいことは以上。
自分で見返すと、倒したNPCがスッっと消えるのがわかりづらいので、ラグドールなどでやられた後の表現あったほうがわかりやすいと思ったので、今後はそのあたりやマップ生成部分の改良に取り組みたい。






コメント