![スクリーンショット_2019-07-27_13](https://assets.st-note.com/production/uploads/images/13226093/rectangle_large_type_2_529bbb03f932f0579ec4d45f30e929b4.png?width=800)
敵が隣接するプレイヤーを見失ってしまう問題の修正 RogueEna
NPC(敵など)が、隣接している敵対者(プレイヤーなど)を、曲がり角で見失ってしまう問題が発覚し、それを修正していました。
問題のシーンはこちら。
明日はこの敵の不自然な動きを直そうと思います。
— おちゃちゃ ゲーム開発者 (@ochachalton) July 26, 2019
敵の視界から消えてないはずなのに追いかけるのをやめるのは、コードの意図しない挙動なのでバグですね。視界から消えてるなら、視界の処理を改善する必要がありますね。
どちらにしても明日の作業はこれの予定です。 pic.twitter.com/L7iT704TOO
視界内の敵対者を追いかける際に用いる経路探索の方法に問題が有りました。
経路探索では角を考慮しておらず、角なら斜め移動できるという結果を導き出してしまい、結局その結果だと移動ができなくて、ランダムな場所に移動をする仕組みが発生するというのが具体的な問題でした。
経路探索のアルゴリズムは一般化していて、ノードのコストの計算方法などは外から注入できるようにしていたので、視界内の目標から移動方向を算出するための経路探索ではコストの計算方法に角を考慮し、角はコストが無限になるようにすることで修正ができました。
敵と隣接しているときに角を曲がったら敵がプレイヤーを見失って追いかけるのをやめてしまうバグを直しました。
— おちゃちゃ ゲーム開発者 (@ochachalton) July 27, 2019
原因は、A* のコスト計算で角を考慮していなかったことでした。通れない場所が経路探索の結果に出てしまうと、フォールバックとして用意しているランダム移動をするためです。 pic.twitter.com/zf27o0mGDF
こちらが修正されたバージョンです。
あと、とても細かい部分なのですが、これまではNPCはそのNPCの味方の位置を無視して経路探索をしていました。理由はNPCがなるべく敵対者に近づこうとしてほしいためです。
例えば敵対者がNPCに8方向すべて囲まれているようなケースだとそこに到達できないため経路探索の結果、一切敵対者のことを無視して行動してしまいます。
これを防ぐためにNPCは他のNPCを無視して経路探索を行っています。しかし、これではNPCを迂回して移動することができないため、今回その部分も修正しています。
修正内容ですが、従来のNPCを無視する経路探索によって得られた移動方向にNPCが居た場合、NPCを無視せず経路探索を再度行う、という方法を用いることにしました。これにより、囲まれていても近づきますし、囲まれていなければNPCを迂回して移動してくれるようになりました。
細かい挙動ですが、敵の移動方向がプレイヤーから予測しやすい状況を生み出すためには重要な修正となります。
移動に関する挙動はこれでほぼ目標通りになったと思います!
応援してくださると嬉しいです。よろしくお願いいたします!