ai attack

【UE】AI活用ガイド|CPUアニメーション機能(攻撃編)

みなさんこんにちは。

NakaRyoです。

今回は「AI活用ガイド」Part3として、

Unreal EngineでCPU(敵キャラクター)の攻撃アニメーションを実装する方法を解説します。

この記事はPart1(AI制御編)・Part2(移動/追跡アニメーション編)の続きとなりますので、

まだご覧になっていない方はそちらを先に確認することをおすすめします。


ブループリントインターフェースの作成

まずは、AIキャラクター(CPU)が攻撃アクションを実行できるようにするための

**命令機能(インターフェース)**を作成します。

コンテンツブラウザで「AI」フォルダ上を右クリック

ブループリント → ブループリントインターフェース を選択

image

ファイル名を BP_Attack にリネーム

image

    BP_Attackを開いたら、新規関数を追加し名前を「Attack」に変更します。

    完了したらコンパイルして保存します。

    image

    攻撃タスク(BTTask)を作成

    次に、Behavior Treeから呼び出す「攻撃命令タスク」を実装します。

    BT_Enemy を開き、新規タスク → BTTask_BlueprintBase を選択

    image

    名前を「BTTask_Attack」に変更し、AIフォルダへ保存

    image

      BTTask_Attack を開き、My Blueprint → 関数(オーバーライド) → Receive Execute AI を選択します。

      以下のノード構成を設定します。

      Event Receive Execute AI ノード手順

      Event Receive Execute AIの実行ピンからノード展開し、

      クラス⇒BP Attack⇒Attack(Message)を選択し、ノード接続

      image
      image

      Event Receive Execute AIのControlled PawnピンとAttack(Message)のTargetピンを接続

      image

      Attack(Message)の実行ピンとFinish Executeの実行ピンを接続

      Finish ExecuteのSuccessをチェック(true化)

      image

      コンパイルして保存します。

      上記設定によりBehavior Treeの実行中に「Attack」関数が呼ばれ、攻撃モーションを実行する命令が送信されます。


      Behavior Tree(BT_Enemy)への追加

      BT_Enemy を開き、BlackBoard Condition・Sequence②に

      先ほど作成したBTTask_AttackとWait(1秒)を追加します。

      image

      これにより、「追跡 → 攻撃 → 一時待機」という一連のAIアクションが流れるようになります。


      BP_Enemy インターフェース実装

      BP_Enemy を開き、クラス設定 →詳細パネル⇒ インターフェース → 追加 をクリック

      「BP_Attack」を追加します。

      image
      image

        次にイベントグラフを開き、右クリックで Attackをクリック⇒“イベントを実装” を選択。

        image

        「Event Attack」ノードが追加確認後、

        以下ノード設定を行います。

        Event Attackノード手順

        新規変数を作成

        マイブループリント⇒変数⇒+ボタンを選択

        image

        変数名:Attacking
        変数型:Boolean

        image

        変数をグラフ上にドラッグ&ドロップ → Set Attacking を配置

        image

        Event Attack の実行ピン → Set Attacking の実行ピンを接続

        Set Attacking のチェックを入れて「True」に設定

        image

          コンパイルして保存します。


          アニメーションブループリントの更新

          ABP_Enemy を開き、マイブループリント⇒変数⇒+ボタンを選択し、

          新規変数を作成します。

          image

          変数名:Attacking

          変数型:Boolean

          image

          イベントグラフ内の「Event Blueprint Update Animation」

          に以下ノードを追加します。

          Event Blueprint Update Animationノード手順

          Set Speedの実行ピンとCast to BP_Enemyの実行ピンを接続

          Try Get Pawn OwnerのReturn ValueピンとCast to BP_EnemyのObjectピンを接続

          image

            Cast to BP_Enemyの実行ピンとSet Attackingの実行ピンを接続

            Cast to BP_EnemyのAs BP_EnemyピンとGet AttackingのTargetピンを接続

            Get AttackingのReturn ValueピンとSet AttackingのAttakingピンを接続

            image

            コンパイルして保存します。

            上記の設定でキャラクターの攻撃状態がアニメーションブループリントに同期されるようになります。


            Root State Machine の設定

            ABP_Enemy の「Root State Machine」タブを開きます。

            アセットブラウザで「MM_Attack_01」を検索し、グラフへドラッグ&ドロップ。

            image

            MM_IdleからMM_Attack_01をトランジション接続

            MM_Unarmed_Walk_FwdからMM_Attack_01をトランジション接続

            image

              トランジション条件設定

              Idle → Attack

              MM_IdleからMM_Attack_01の

              トランジションマークをダブルクリックし、

              ノードを以下の通りに設定します。

              image

              Get AttackingのReturn ValueピンとResultのCan Enter Transitionを接続

              image

              Walk → Attack

              MM_Unarmed_Walk_FwdからMM_Attack_01の

              トランジションマークをダブルクリックし

              以下ノード設定をおこないます。

              image

              Get AttackingのReturn ValueピンとResultのCan Enter Transitionを接続

              image

              Attack → Idle

              MM_Attack_01からMM_Idleの

              トランジションマークをダブルクリックし

              以下ノード設定をおこないます。

              image

              Get AttackingのReturn ValueピンとNot Booleanの実行ピンを接続

              Not BooleanのReturn valueピンとResultのCan Enter Transitionピンを接続

              image

              コンパイルして保存します。

              これで攻撃状態が終了した際、Idleへ戻るルールが完成します。


              攻撃終了イベント(Anim Notify)の実装

              攻撃モーションの終了をAI側に通知する仕組みを作成します。

              BP_Attack に関数追加

              マイブループリント⇒関数⇒+ボタンを選択し、新規関数を追加します。

              新規関数名:Anim_Event

              image
              image

              詳細パネルのインプット⇒+ボタンでインプットを追加します。

              インプット名:Event

              インプット型:Name

              image

              コンパイルして保存します。

              AnimNotify Blueprint を作成

              AIフォルダに移動し、

              右クリック → Blueprintクラス → AnimNotifyを選択

              image
              image

              名前を BP_AN_Enemy にリネーム

              image

              BP_AN_Enemy を開き、Received Notify をオーバーライドして

              以下ノードを作成します。

              Received Notifyノード手順

              マイブループリント⇒変数⇒+ボタンで新規変数作成

              変数名:AnimEvent

              変数型:Name

              image

              AnimEvent変数の詳細パネルでインスタンス編集可能にチェックを入れる

              image

              Received Notifyの実行ピンからノード展開し、

              Anim Event(Message)と接続します。

              image
              image

              Received NotifyのMesh CompピンとGet OwnerのTargetピンを接続

              Get OwnerのReturn ValueピンとAnim Event(Message)のTargetピンを接続

              image

              Get AnimeEvent(変数)とAnim EventのEventピンを接続

              image

              Anim Eventの実行ピンとReturn Nodeの実行ピンを接続

              image

              コンパイルして保存します。


              攻撃アニメーションへ通知を追加

              MM_Attack_01 を開きます。

              MM_Attack_01はコンテンツ内から検索するか、

              /All/Game/Characters/Mannequins/Anims/Unarmed/Attackに格納されています。

              ※ThirdPersonスターターキットがデフォルトで入っている場合

              image

              編集画面で、1のアニメーションフレームの

              最終フレーム部分を右クリック⇒”通知を追加”を選択

              image

              通知対象を BP_AN_Enemy に設定。

              image

              最終フレームに通知指定したBP_AN_Enemyを選択し、

              詳細パネルの「Anim Notify → Default → AnimEvent」に EndAttack と入力。

              image

              保存します。


                攻撃終了処理(BP_Enemy)

                BP_Enemy を開き、イベントグラフへ移動。

                マイブループリント⇒インターフェース

                → Anim_Eventを右クリック → イベントを実装 を選択

                以下のノード設定をおこないます。

                  Event Anim_Eventノード構成

                  Event Anim_Eventの実行ピンとBranchの実行ピンを接続

                  Event Anim_EventのEventピンと==(Equal)のAピンを接続

                  image

                  ==(Equal)のBピン欄に”EndAttack”と記載

                  ※注意:Bピン欄記載のEndAttackはMM_Attack_01

                  と設定したEndAttackと同一内容でないと動作しないため、

                  記載内容を合わせる必要があります。

                  MM_Attack_01の記載した内容を

                  コピー&ペーストすることをおすすめします。

                  image

                  ==(Equal)のReturn ValueピンとBranchのConditionピンを接続

                  BranchのTrueピンとSet Attackingの実行ピンを接続

                  Set AttackingのAttackingのチェックは外したままにする(False化)

                  image

                  コンパイルして保存します。

                  攻撃アニメーションが終了した際に自動で

                  「Attacking = False」となり、Idle状態へ戻る仕組みが完成します。


                  動作確認

                  シミュレーションを実行すると、以下のような挙動が確認できます:

                  aiattack

                  プレイヤーを検知後、追跡 → 攻撃モーション → 待機(再行動)

                  攻撃終了時にIdleへ自動復帰

                  この一連の流れがスムーズに動作していれば、攻撃アニメーションの実装は成功です。


                  まとめ

                  本記事では、Unreal EngineのAIキャラクターに

                  攻撃アクションを追加する手順を詳しく紹介しました。

                  ブループリントインターフェースによる攻撃命令、

                  Behavior Treeでのタスク制御、AnimNotifyによる

                  アニメーション完結通知までを組み合わせることで、

                  プレイヤーを感知して追跡・攻撃する自然なAI挙動を実現できます。

                  コメントする

                  メールアドレスが公開されることはありません。 が付いている欄は必須項目です