https://bintololab.com/ue4-enemy-ai こちらを参考にUnrealEngineで敵AIを作ってみる。
Characterクラス
敵のキャラクター用のCharacterブループリントクラス。
ブループリント>Characterから敵のCharacterクラスを作成する
コンポーネントのMeshに敵キャラ用のMeshをセット
CharacterMovementのOrient Rotation to Movementにチェックを入れる
Pawn項目にあるAI Controller Classに以下で作成したAIControllerクラスを設定
AIController
使用するブラックボードやビヘイビアツリーの登録、ブラックボードで使用するキーに値をセットをする。
- ブループリント>検索からAIControllerを選択してAICharacterクラスを作成する
AIControllerのイベントグラフのブループリントを開いて、変数「HomeLocation」を追加。変数の型を「Name」に設定
ブループリントを以下で設定
ブラックボード
ブラックボード中に変数のようにして使用するキーを追加できる。このキーの値をビヘイビアーツリー上で参照して、条件式で分岐したり判別に使用する。ブループリントでキー名を指定して値をセットできる。
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」のブループリントを以下のように設定。
ビヘイビアーツリーから今度は「新規タスク」を選択。名前を「RapidMoveTo」に変更。
「RapidMoveTo」の変数を以下のように設定。
変数名 | 変数の型 |
---|---|
TargetToFollow | Blackboad Key Selector |
EnemyController | 作成したAIConroller |
- 「RapidMoveTo」のブループリントを以下のように設定。
- ビヘイビアーツリーから今度は「新規デコレーター」を選択。名前を「CloseEnough」に変更。
変数名 | 変数の型 |
---|---|
TargetToFollow | Blackboad Key Selector |
EnemyController | 作成したAIConroller |
AcceptableDistance | float |
- 「CloseEnough」に関数のオーバーライドから「PerformConditionCheck」を追加。関数のブループリントを以下で作成。
- ビヘイビアーツリーを以下で組み立て。
- MultiSphereTraceForObjectsで指定するRadiusの範囲外で、自キャラクターを見失う事ができないため、「AgroCheck」のMultiSphereTraceForObjectsの次の処理を以下で修正。
以上で作成が終了。敵がプレイヤーを追ってくることがわかります。
各設定方法がわからず苦戦しましたが、手順がわかればなんとか。。
以下プロジェクト。
Github
参考
UE4で敵キャラクターAIを制御する | Binto-Laboratory