ベルトスクロールアクションの敵のAI
ベルトスクロールアクションを現在作成中です。
実際に作ってみて、敵がプレイヤーの後ろに回り込むAIのアルゴリズムが何となくわかったので、作り方を紹介します。
■通常の接近するAI
まず敵が1体の場合は、普通に近づきます。
取りうる攻撃によっては有利な間合いがある(例えば飛び道具を使えるなどの)場合は、適度に間合いを取った方が良いかもしれません。
一般的なベルトアクションでは、直線上にプレイヤーに近づくのではなく、距離を取りつつ近づくAIが多いです。
■プレイヤーの後ろに回り込むAI
敵が2体以上いる場合は、1体は普通に接近して、もう1体は後ろに回り込む、ということをするとプレイヤーの対処が難しくなり、立ち回りを考える面白さが生まれます。
回り込みAIの手順に関しての概要は以下の通りです。
ルールとしては、以下の通りです。
1. 2人以上の敵がいる場合、プレイヤーと同じZ値にならないところまで移動する。そして直進する
2. プレイヤーの後ろに回り込んだら、通常の接近AIで近づく
さらに処理を細分化すると、
1. プレイヤーの後ろに敵がいるかどうかチェック
2. 回り込みを行う敵を決定する
3. 敵のZ値をずらす
4. 直進してプレイヤーの後ろまで移動する
となります。
▼1. プレイヤーの後ろに敵がいるかどうかチェック
この判定は、プレイヤーの左側にいる敵の数と、右側にいる敵の数をカウントすることで可能となります。
▼2. 回り込みを行う敵を決定する
次に、回り込みを行う敵の決定です。
プレイヤーからの距離を計算して、「一番遠い敵」を回り込みする敵とします。
▼3. 敵のZ値をずらす
回り込みするには、上下に移動してプレイヤーの攻撃が当たらない場所まで移動する必要があります。
プレイヤーが下の方(Z軸手前)にいたら上の方(Z軸の奥)、上にいたら下に移動する、というルーチンで行えば大抵は問題ないはずです。
▼4. 直進してプレイヤーの後ろまで移動する
最後に直進移動です。単純にプレイヤーの後ろへたどり着くまで直進すると、プレイヤーが壁を背にしていた場合に、直進し続けてしまうので、一定フレームで直進処理を打ち切った方が良いです。
■AIの状態遷移
これまでの処理を状態遷移にまとめてみます。
細かい計算や判定はありますが、おおよそこのような遷移である程度は、うまく回り込むことができると思います。
以上、回り込みのAIでした。
◾️関連する記事
ベルトスクロールアクションについて、基本的なシステムの実装方法をまとめています。
ベルトアクションは、どのような面白さの構造を持っているのかを考察してみました。
また、どんなことに気をつけて作る必要があるのか、ということも書いています。