みなさんこんにちは。
NakaRyoです。
今回は「AI活用ガイド」のPart2として、CPU(敵キャラクター)のアニメーション設定について解説します。
前回の記事ではAI制御(移動・感知など)を実装しましたが、
今回はその続編として歩行・追跡・攻撃シーンのアニメーションを加えていきます。
Part1(AI実装編)をまだご覧になっていない方は、そちらを先に確認しておくとスムーズです。
アニメーションブループリントの作成(歩行動作)
Part1で作成した「BP_Enemy」はIdle(待機)状態のまま移動しているため、
ここに歩行アニメーションを追加します。
AIフォルダ上で右クリック → アニメーション → アニメーションブループリント を選択。

スケルトンにはデフォルトの「SK_Mannequin」を指定します。

作成したファイルを「ABP_Enemy」にリネームしましょう。

アニメーションブループリント編集(Idle → Walk)
ABP_Enemy をダブルクリックして開き、AnimGraph に移動します。
グラフ上で「State Machine」を検索・追加します(アニメーション → ステートマシン → State Machine)。

追加したステートマシンを「Root State Machine」にリネーム。
Root State Machine の出力ピンを Output Pose の入力ピンへ接続。

ステートマシン内部の設定
Root State Machine をダブルクリックして内部に入ります。
右下のアセットブラウザで「MM_Idle」と検索し、グラフ上にドラッグ&ドロップ。
Entry ノードと接続します。


※MM_IdleはThirdPersonテンプレートにデフォルトで入っています
次に「MF_Unarmed_Walk_Fwd(デフォルトテンプレート内)」を同様に配置し、
MM_Idle → MF_Unarmed_Walk_Fwd をトランジション接続します。


Idle → Walk の遷移条件設定
MM_Idle → MF_Unarmed_Walk_Fwdの
トランジションマークをクリックして編集画面に入ります。

変数を2つ作成します
Speed(Float)
Walk_Target(Float) デフォルト値:10.0
ノード手順
Get SpeedとGet Walk_Targetをグラフ上に配置
Greater Equal(>=)をグラフ上に配置
Get SpeedとGreater Equal Aピンを接続
Get Walk TargetとGreater Equal Bピンを接続
Greater EqualのReturn ValueピンとResultのValueピンを接続

コンパイルして保存します。
Walk → Idle の遷移条件設定
MF_Unarmed_Walk_Fwd → MM_Idle トランジション接続

MF_Unarmed_Walk_Fwd → MM_Idle のトランジションマークを
ダブルクリックし編集画面に入ります。

ノード手順
Get SpeedとGet Walk_Targetをグラフ上に配置
Less(<)をグラフ上に配置
Get SpeedとLess Aピンを接続
Get Walk TargetとLess Bピンを接続
LessのReturn ValueピンとResultのValueピンを接続

コンパイルして保存します。
Root state machine内部のグラフ上で
MF_Unarmed_Walk_Fwdをダブルクリックし編集画面を開きます。

MF_Unarmed_Walk_Fwd編集画面で、
MF_Unarmed_Walk_Fwdをクリックし選択状態で、
詳細⇒Loop Animation欄をチェック入れTrue状態にします。

イベントグラフで移動速度を更新
ABP_Enemy のイベントグラフを開きます。
ノード設定
Try Get Pawn OwnerのReturn ValueピンとGet VelocityのTargetピンを接続
Get VelocityのReturn ValueピンとVector Length XYのAピンに接続
Vector Length XYのReturn ValueピンとSet SpeedのSpeedピンに接続
Event Blueprint Update Animationの実行ピンとSet Speedの実行ピンを接続

コンパイルして保存します。
これにより、キャラクターの移動速度に応じてアニメーションが切り替わるようになります。
BP_Enemyへのアニメーション割り当て
BP_Enemy を開き、コンポーネントの「Mesh」を選択。

詳細パネルの「Animation Mode」を Use Animation Blueprint に変更。
「Anim Class」に ABP_Enemy を指定。

コンパイルして保存します。
シミュレーション実行後、歩行アニメーションが再生されれば成功です。

CPUのプレイヤー追跡機能の追加
続いて、敵(CPU)がプレイヤーを検知・追跡する処理を追加します。
Blackboard の設定
BB_Enemy を開きます。
新規キーを作成 → 「Bool」型を選択 → 名前を FindPlayer に設定。


保存します。
キャラクターブループリントの設定(BP_Enemy)
BP_Enemy を開き、「新規コンポーネント追加」→「Pawn Sensing」を選択し追加します。


詳細パネルで以下設定をおこないます。
Sight Radius:3000
Peripheral Vision Angle:50

「イベント」カテゴリから On See Pawn の+をクリックし、イベントグラフへ追加。

On See Pawnノード構成
On See Pawnの実行ピンとCast to BP_ThirdPersonCharacterの実行ピンを接続
On See PawnのPawnピンとCast to BP_ThirdPersonCharacterのObjectピンを接続

Cast to BP_ThirdPersonCharacterの実行ピンとSet Value as Boolの実行ピンと接続
Set Value as BoolのTargetピンとGet BlackBoardのReturn Valueピンを接続
Set Value as BoolのKey NameピンとMake Literal NameのReturn Valueピンを接続
Make Literal NameのValue欄に“FindPlayer”を入力
※ここの入力は先ほどブラックボードで作成したkeynameと同一にさせてください。
Bool Valueをチェックいれる(True化)

コンパイルして保存します。
Behavior Tree(BT_Enemy)設定
条件分岐の設定
BT_Enemy を開く。
Sequence ノードを右クリック → 「デコレーター追加」→「Blackboard」を選択。


詳細パネルで以下を設定:
オブザーバーを中止:Self
Key Query:Is Not Set
Blackboard Key:FindPlayer
プレイヤー検知時の処理
先ほどの Sequence+Decorator をコピーします。

Root の下に「Selector」を追加し、Rootと接続

コピーしたBlackBoard Based ConditionとSequenceを②とし、
詳細設定でKey QueryをIs Setに変更します。


SelectorとBlackBoard Based Condition・Sequence①とBlackBoard Based Condition・Sequence②を接続します

保存します。
追跡タスクの追加
BTTask_BlueprintBase から新規タスクを作成 → 名前を「BTTask_Chase」に変更。


編集画面を開き、以下のノードを設定
BTTask_Chaseノード構成
マイブループリントの関数⇒オーバライドをクリックし、
Receive Excute AIを選択します。

Receive Excute AIの実行ピンとAI Move Toの実行ピンを接続
Receive Excute AIのControlled PawnピンとAI Move ToのPawnピンを接続
Get PlayerCharacterのReturn ValueピンとAI Move ToのTarget Actorを接続

AI Move ToのOn SuccessピンとFinish Execute①の実行ピンを接続
Finish Execute①のSuccessにチェックを入れる(True化)
AI Move ToのOn FailピンとFinish Execute②の実行ピンを接続
Finish Execute②のSuccessは空欄のまま(False化)

コンパイルして保存します。
BT_Enemy を開き、ビヘイビアツリーの編集画面で、
Sequence② の下に先ほど作成したBTTask_Chaseを追加します。

シミレーションボタンを押して、
以下のようにプレイヤーの後をCPUが追跡してくれば成功です

まとめ
今回の記事では、Unreal EngineでAIキャラクター(CPU)が
歩行・追跡アニメーションを切り替える実装手順を紹介しました。
アニメーションブループリントでのステート遷移、
Pawn Sensingを使ったプレイヤー検知、Behavior Treeとの連携による
動的制御まで、実践的なAI挙動の基礎が網羅されています。
次回は、攻撃アニメーションとダメージ処理の追加を行い、よりリアルな戦闘AIを完成させていきます。
