【UE5.6】サードパーソンテンプレートの敵AIに魔法攻撃を実装!無料アセット×ステートツリー入門解説

※本サイトはアフィリエイト広告を利用しています。

今回のテーマは、「サードパーソンテンプレートのコンバットエネミーに魔法を使わせてみた」です。

Unreal Engine 5.6で新たに導入された StateTree を活用しつつ、期間限定の無料アセットだったスペルシステムと組み合わせて、AIに魔法を使わせる方法を丁寧に解説します!


🔥 使用したアセット一覧

  • Brushify – Desert Mountains
    → 砂漠の山岳地形を高品質に構築できる環境アセット
  • Ultimate Spell System
    → 魔法の発動・管理・エフェクト演出が行えるシステム
  • Sci-Fi Troopers Collection
    → SF系キャラクター
  • UE5.6 Third Person テンプレート(Combatバリアント)
    → AI行動とコンボ攻撃などの基本戦闘システムを搭載

これらをマージしたプロジェクトをベースに、AIキャラクターに魔法攻撃を追加していきます。

Spell Systemがプロジェクト一式の提供形態なのと、既存のプロジェクトに取り込むには手順が多いので、Spell Systemのプロジェクトをベースにほかの2つのアセットを取り込みつつ、別途サードパーソンテンプレートのコンバットバリアントを作成後に移行しました。

よっしー
よっしー

🧠 敵AIの構築手順(振り返り)

1. コンバット可能な敵AIの子クラスを作成

BP_CombatEnemyを右クリックから子クラスを作成

2. メッシュの差し替え(例:メタヒューマン or トルーパー)

Meshの詳細欄からスケルタルメッシュをお好きなキャラクターに置き換えましょう
ABPのリターゲットの部分は割愛します

MetaHumanの場合は初心者だとリターゲットに苦戦するかもしれません

3. AIコントローラーの複製と差し替え

4. ステートツリーの複製とカスタマイズ

Start Logic Automatically のチェックにて、ステートツリーは自動的に起動するため、ビヘイビアツリーのときのように Run で起動する必要はありません(チェックを外してイベントから起動もできます)

ステートツリーを開いて左上のスキーマの設定を下記のように置き換えましょう


⚔ ステートツリーとは?

Unreal Engine の State Tree の概要 | Unreal Engine 5.6 ドキュメンテーション | Epic Developer Community

ものはUE5.0からありますが、UE5.6でビヘイビアツリーに代わってこれの利用が推奨されるようになり、テンプレートにもこれが利用されていました。(AIアセット作成時の並び順も入れ替えられていました)

従来のビヘイビアツリーの欠点を解消し、状態遷移ベースでAIの挙動を管理できます。(AI用と汎用の2種類あります)

[UE5] StateTreeで状態管理|株式会社ヒストリア

少し古い記事ですが、基礎はこの記事でよくわかります。

真ん中のStatesのタブのツリービューの四角がステートで、基本は上層から下層に潜っていきます。

よっしー
よっしー

状況変化時に遷移させる条件や行先を自由に定義できるところが、ビヘイビアツリーより簡単に記述できるのが好まれているようです。
ビヘイビアツリーだと優先度の高い順に採択されてしまうため、優先度が同じものが複数ある場合に、これじゃない・これじゃないという突入しない条件を管理するのが大規模になればなるほど複雑になって大変なようです。

サードパーソン コンバット のStateTree AI

動画で初歩を解説していますが、まずは真ん中のツリーを中心に確認しましょう。
子を折りたたんでいくとRootの下には4つの状態が定義されています

死亡時、メイン、浮いている(ジャンプ・落下中)、規定(何もしない)です。
体力が0になると死ぬとか、地面から浮いてるときはいつもと行動が違うのはわかりますね。

では、メインとなる「Select Behaviors at Rondam」の中をさらにみると、

攻撃、休憩、退避の3種類の行動パターンが定義されています。
この3つのうちどれを実行するかは詳細欄で「ランダム選択」となっています。

単にランダム選択だけではなくいわゆる「確変」できる仕組みもあるので予測されにくい行動をとらせることもできそうですね。

🔮 魔法攻撃の実装

1. スペルシステムコンポーネントとインターフェース、カメラをAIキャラに追加

2. SS Character Components インターフェース関数を実装
 スペルシステムコンポーネントにカメラとスケルタルメッシュを受け渡します

カメラ位置から魔法を飛ばす方向を計算しているため、顔の向きと一致するカメラが必要です。

3. スケルタルメッシュに魔法(のナイアガラ)がスポーンするソケットを取り付け

中央と左右の手に3つのソケットが必要です。

もとはSpine_04についていましたがTrooperにはSpineが3番までしかないので、3つ目につけました。

4. スペルシステムコンポーネントの詳細欄でスペルブックを設定して魔法を登録

手っ取り早くはコピペを推奨します。

5. 魔法を唱えるカスタムイベントを作成
 AI用なので拡張入力イベントではなく、カスタムイベント化しましょう

6. ステートツリーのタスク内で魔法発動処理を呼び出す

ここが本題ですね。
親ステートを右クリックからAdd State/Add Child State で子ステートを追加しますx2段階

    画面上部にUE5.6で追加された「New Task」ボタンから「State Tree Task Blueprint Base」をもとにしたタスクを作成します。

    Finish Taskをつけると紐づけたステート自体も終了させるので、同じステートほかのタスクを実行する場合は気を付けましょう

    Delayタスクで魔法発動直後に次の状態に遷移させずにしばらくその場にとどまるようにしましょう。

    デバッグをしやすくするため、親ステートにDebugTextタスクも追加しておきましょう

    よっしー
    よっしー

    Reference Actorを紐づけないとワールド原点に表示されるそうです。

    デバッグ用なのでパッケージ化後のゲーム中は表示されないはずです(未確認)。

    これで敵AIが打撃+魔法のハイブリッド戦闘を繰り出すようになります!

    🧪 動作確認とデバッグのポイント

    • ナビメッシュの範囲:移動できない場合は確認を!
    • ゲームモードとコントローラーの整合性:スペル用とコンバット用の切り替えに注意
    • 英語環境で動くコンバットAIをベースに始めること:一部バグ対策として有効

    コメント

    タイトルとURLをコピーしました