今回はTPSゲームで銃の撃ち合いをすることを想定したときのAi行動をUnrealEngineのEQSで作成していく方法の備忘、解説まとめになります。
基本的な流れは、敵がプレイヤーを探して、見つかった場合は攻撃などの行動を行い、見つからない場合は物陰に隠れたり、フラフラプレイヤーを探しながら徘徊するような動きです。
色々EQSで作れる行動は書きましたが全部はまとめません。自分の重要なものに絞って使う機会があるものはどんどん追加していく形で記事を作成していきます。(解説してない行動が多々できる)
探索・移動
プレイヤー(特定のActor)を探す
EQSのジェネレーターActor Of Classを使用して、指定したターゲット(プレイヤーなど)のActorを検索します。ターゲットが複数ある場合は、テストにDistanceなどを入れて最も近いActorを取得するようにするなどするとよいでしょう。
サービスから実行する場合ブラックボードに値を入れる際は変数の値の型をActorではなくPawnに設定しないとブラックボードに値を入れてくれません。
逆にタスクからEQSを実行してActor Of Classを使用して、指定したターゲットのActorを検索した場合はブラックボード変数の値の型がActorでも値を入れてくれました。
敵の視界にプレイヤーがいるかチェックする
【Unreal Engine】AI Perceptionを使ってAIキャラクターにプレイヤーを見つけたら追いかけさせる(AI Sight:視覚)【逆引きUE】【AI入門】
AiPerceptionの設定
- AiControllerブループリントに Add Component → AiPerception を追加
- 詳細ウインドウ → AI Perception → Senses Config → Ai Sight config を選択
- 数字の横の△マークをクリックで開く → Senseの横の△マークも開く → Detection by Affiliation の項目の3つ全てにチェックを入れる。(Detect Enemies Detect Neutrals Detect Friendlies)
- ComponentウインドウからAi Perceptionを選択 → 詳細ウインドウ下 Events → On Target Perception Updated のプラスボタンを左クリック
- Set Value as Objectノードで On Target Perception UpdatedのActorイベントをブラックボードのTargetActor(任意の変数)などの変数に値を格納できるように処理を作る(Get BlackBord Make Literal Name) → この状態だと見つけたActorすべてを認識する。
- Playerだけを追いかけさせたい場合はGet Player Characterを取得して==でBranchをかけて処理を分岐させ、Playerだけをブラックボードの変数に入れるようにOn Target Perception UpdatedのActorイベントの処理を書き換える
- ブラックボードのTargetActorのBaseClassはActorにしておく
ビヘイビアーツリーを作る
Ai Perceptionで認識させることができれば、適宜自分の作りたい動作に応じたビヘイビアーツリーを作成しましょう。それがよくわからない人は参考動画のビヘイビアーツリーを試しに作ってみましょう。
一度認識したプレイヤーを忘れさせる
〇〇の行動中であったとしてもすぐに行動を変更する
LowerPriority
画像を作成予定。
決まった経路を巡回する
ウロウロ移動する(ランダム移動)
目的地へ移動する
プレイヤーから隠れるような位置へ移動する(CoverSystem)
プレイヤーから逃げる
物陰に隠れる
【Unreal Engine】EQSを使ってプレイヤーから安全な場所にAlキャラクターを隠れさせる(逃げさせる)方法【逆引きUE】【AI入門】
攻撃
プレイヤーの方へ向きを変える
ビヘイビアーツリーのフローの中のSelector、Sequenceの中にサービスとしてSet Default Focusを設定すると、そのフローを通ったときに指定してブラックボード変数の値のActorまたはPawnの方へ向きを変えてくれます。
タスクのSet Focusで向きを変えることができますが、攻撃時に常にプレイヤーの方へ向くなどの場合はサービスで作成すると良いでしょう。
プレイヤーへ攻撃する
敵のブループリントに攻撃のカスタムイベントを作成して、タスクで呼び出す方法と、そもそもサービスに攻撃の処理を書く方法があるようですが、今は難しく感じるので一旦保留にしておきます。
プレイヤーを取り囲む(複数の敵)
【Unreal Engine】EQSを使ってプレイヤーを取り囲む・一定の距離を保つ方法【逆引きUE】【AI入門
Aiを作る機会があれば全部の項目の解説を埋めたいですね。
コメント