HIKI Tech Blog

yhikishimaのブログ。ゆるくUE4やUnity、web開発の記事を書いてます。

【UE4】AIコントローラー

https://bintololab.com/ue4-enemy-ai こちらを参考にUnrealEngineで敵AIを作ってみる。

Characterクラス

敵のキャラクター用のCharacterブループリントクラス。

  • ブループリント>Characterから敵のCharacterクラスを作成する

  • コンポーネントのMeshに敵キャラ用のMeshをセット

  • CharacterMovementのOrient Rotation to Movementにチェックを入れる

  • Pawn項目にあるAI Controller Classに以下で作成したAIControllerクラスを設定

f:id:yhikishima:20201101153426p:plain

AIController

使用するブラックボードやビヘイビアツリーの登録、ブラックボードで使用するキーに値をセットをする。

  • ブループリント>検索からAIControllerを選択してAICharacterクラスを作成する

f:id:yhikishima:20201101153911p:plain

  • AIControllerのイベントグラフのブループリントを開いて、変数「HomeLocation」を追加。変数の型を「Name」に設定

  • ブループリントを以下で設定

f:id:yhikishima:20201101162456p:plain

ブラックボード

ブラックボード中に変数のようにして使用するキーを追加できる。このキーの値をビヘイビアーツリー上で参照して、条件式で分岐したり判別に使用する。ブループリントでキー名を指定して値をセットできる。

  • AI→ブラックボードで追加

  • 「新規キー」追加ボタンを押して、以下の3つのキーを登録する。

キー名 KeyType 備考
TargetToFollow Object 敵キャラクターが追跡するターゲットとして対象のActorを確保するためのキー
HomeLocation Vector 敵キャラクターの初期座標を確保するためのキー
TargetLocation Vector 敵キャラクターが追跡するターゲットの座標確保

ビヘイビアツリー

サービス、タスク、デコレーター等で制御を実装し、SelectorやSequenceでブラックボードのキー値を見て条件分岐をして行く事で、ツリー状に制御を構成する事ができる。

  • AI→ビヘイビアツリーで追加

  • ビヘイビアツリーを開いて、新規サービスを選択「AgroCheck」に名前変更。

  • 「AgroCheck」の変数を以下のように設定。

変数名 変数の型
TargetToFollow Blackboad Key Selector
DesireObjectTypes EObject Type Query
EnemyController 作成したAIConroller
TargetLocation Blackboad Key Selector
  • 「AgroCheck」のブループリントを以下のように設定。

f:id:yhikishima:20201101212854p:plain

f:id:yhikishima:20201101212917p:plain

f:id:yhikishima:20201101212938p:plain

  • ビヘイビアーツリーから今度は「新規タスク」を選択。名前を「RapidMoveTo」に変更。

  • 「RapidMoveTo」の変数を以下のように設定。

変数名 変数の型
TargetToFollow Blackboad Key Selector
EnemyController 作成したAIConroller
  • 「RapidMoveTo」のブループリントを以下のように設定。

f:id:yhikishima:20201101214322p:plain

  • ビヘイビアーツリーから今度は「新規デコレーター」を選択。名前を「CloseEnough」に変更。
変数名 変数の型
TargetToFollow Blackboad Key Selector
EnemyController 作成したAIConroller
AcceptableDistance float
  • 「CloseEnough」に関数のオーバーライドから「PerformConditionCheck」を追加。関数のブループリントを以下で作成。

f:id:yhikishima:20201101215941p:plain

  • ビヘイビアーツリーを以下で組み立て。

f:id:yhikishima:20201101221831p:plain

  • MultiSphereTraceForObjectsで指定するRadiusの範囲外で、自キャラクターを見失う事ができないため、「AgroCheck」のMultiSphereTraceForObjectsの次の処理を以下で修正。

f:id:yhikishima:20201101222057p:plain

以上で作成が終了。敵がプレイヤーを追ってくることがわかります。

streamable.com

各設定方法がわからず苦戦しましたが、手順がわかればなんとか。。

以下プロジェクト。

Github

github.com

参考

UE4で敵キャラクターAIを制御する | Binto-Laboratory

AIコントローラーによる追跡と攻撃 – 未来派図画工作のすすめ

【UE4】味方AIの作り方!AIとは何かを学びながら、ブループリントで味方キャラクターを実装しよう - Qiita