ai aichach

【UE】AI活用ガイド|CPU自動歩行

みなさんこんにちは。

NakaRyoです。

今回はゲーム開発に必須機能であるCPUアクションについてお伝えします。

本記事では、AI Controller、Blackboard、Behavior Tree、AI Perception を連携させて、

ランダムに移動させていきます。

UEのAI/BehaviorTreeの基本

Unreal EngineのAI機能でよく使用されるのは以下の4つになります。

AI Controller

Pawn(キャラクター)に「思考」を与えるクラス。動作命令や判断ロジックを担当します。

ブループリントクラス⇒AIControllerで設定可能

image

Blackboard(ブラックボード)

AI が保持する変数ストレージ。「ターゲット位置」「攻撃状態」などを格納して、Behavior Tree に値を渡します。

AIメニュ⇒ブラックボード

image

Behavior Tree(ビヘイビアツリー)

NPC 行動のフロー制御ツール。ノード構造でタスク選択や条件判断を行います。

・主なタスク内容

 Composite(Selector / Sequence)

 Task(行動ノード)

 Decorator(条件付き判断)

 Service(定期処理)

AIメニュー⇒ビヘイビアツリー

image

AI Perception

視覚や聴覚による感知システム。感知結果を Blackboard に反映し、BT の動作条件に使うことができます。

たとえば一般的な挙動例として、以下のようなフローを設計できます

「プレイヤーを発見 → 追跡 → 攻撃/近づけなければ離脱 → 見失ったらパトロール再開」など。

AI Controller⇒コンポーネント追加⇒AI Perception(AI知覚コンポーネント)

image

実装準備

Behavior Treeの導入に入る前に、環境設定をおこなっていきます。

プロジェクト設定

プロジェクトはゲーム⇒サードパーソンを選択

プロジェクト設定は以下の通りに設定します。

image

プロジェクト画面を開いたら、

“ファイル⇒新規レベル⇒基本⇒作成”の順番でステージを作成します。

image
image

任意のフォルダにレベルを保存します。

image

AI Controller Blueprint の作成

Blueprintフォルダ上で

+追加⇒ブループリントクラス⇒AI Controllerを選択

image
image

名前を「BP_EnemyAIController」とします。

image

Blackboard の準備

1.BlackBoradの作成

新規フォルダを作成し、名前をAIとします。

フォルダ上から、「+追加」→「AI」→「Blackboard」を選択

名前を「BB_Enemy」とします。

image
image

BehaviorTreeの準備

先ほど作成したAIフォルダ上で、「+追加」→「AI」→「BehaviorTree」を選択

名前を「BT_Enemy」とします。

image
image

BT_Enemyを開いたら、Blackboard Asset に先ほど作成した「BB_Enemy」を紐付けます。

image

NavMesh Bounds Volume の配置

BP_Enemyが実際に移動できるように、マップ上でナビメッシュを定義します。

レベルエディタ上で「+追加」→「ボリューム」→「Nav Mesh Bounds Volume」を選択し、

マップ全体をカバーするように配置します。

image
image
image

レベルエディタ上でPキー

もしくはメインメニュー「ビルド」→「Build Paths(ナビゲーション)」をクリックし、

緑色のメッシュが出ていればOKです。

image

AI 用キャラクター Blueprint の準備

1.新規キャラクター Blueprint を作成(例:BP_Enemy)

 コンテンツフォルダに新たに”Blueprint”のフォルダを作成

 作成したフォルダから右クリック⇒ブループリントクラスを選択

image

 ブループリントクラス⇒キャラクターを選択

image

名前はわかりやすく「BP_Enemy」とします。

2.BP_Enemyの設定

Mesh編集

BP_Enemy を開き、コンポーネント⇒Meshを選択

image

Meshの詳細画面でSkeltalMeshAssetのアセット選択モードをクリックし、

デフォルトで入っているSKM_Manny_Simpleを選択します

image
image

こちらが初期状態になります。

CapsuleComponentの中にメッシュを入り込ませるのと、

ArrowComponentの矢印方向に合わせる編集をおこないます

image

Mesh⇒トランスフォーム

位置:0.0/0.0/-90

回転:0.0/0.0/-90

以下の通りになっていれば成功です。

image

CharacterMovement 編集

Componentsタブ内で CharacterMovement コンポーネントを選択。

image

詳細画面で移動速度を設定します。

Max Walk Speed:300

image

3.AI Controllerとの紐づけ

BP_Enemy の「詳細」パネルから、AI Controller Classを検索し、

先ほど作成したBP_EnemyAIControllerを指定します。

image

AI実装

ここからは、実際にAI機能を実装する手順に移行します。

AI Controller設定

敵キャラクターがゲーム開始時に自動でBehavior Treeを起動実装

先ほど作成したBP_EnemyAIControllerを開き、イベントグラフタブを選択します。

グラフ画面で以下ノードを設定します。

Event Begin Play⇒Run Behavior Tree⇒BTAssetをBT_Enemyに指定

image

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

BehaviorTree(ビヘイビアツリー)の設定

ビヘイビアツリー側の設定をおこないます。

タスク設定

BT_Enemyを開き、新規タスク⇒BTTask_BlueprintBaseをクリックします。

image

保存する箇所とファイル名を記載します。

保存場所はAIフォルダへ、ファイル名をBTTask_Patrolにします。

保存します。

image

BTTask_Patrolのノード実装

BTTask_Patrolをクリックし、イベントグラフを開いたら、

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

ノード設定手順

関数のオーバライドをクリックし、Event Receive Execute AIを選択

image

Event Receive Execute AIの実行ピンとAI Move Toの実行ピンを接続

Event Receive Execute AIのControlled PawnピンとAI Move ToのPawnピンを接続

Event Receive Execute AIのControlled PawnピンとGet Actor LocationのTargetピンを接続

Get Actor LocationのReturn ValueピンとGet Random Reachable Point in RadiusのOriginピンを接続

Get Random Reachable Point in RadiusのRadius値を300に設定

Get Random Reachable Point in RadiusのRandom LocationピンとAI Move ToのDestinationピンを接続

image

AI Move ToのOn SuccessピンとFinish Executeピンを接続

Finish ExecuteのSuccess欄にチェックを入れる

image

AI Move ToのOn FailピンとFinish Executeピンを接続

Finish ExecuteのSuccess欄はチェック無し(False状態)にする

image

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

ビヘイビアツリー設定

BT_Enemyのツリー編集画面を開きます。

Root⇒Sequence⇒BTTask_Patrol(先ほど作成したタスク)⇒Wait(1.00s)

の順番に繋げていきます。

image

保存します。

動作確認

ここまでで、実装作業は終了です。

実際にCPUが動くかをチェックしていきます。

作成した新規レベルMAPを開きます。

BP_EnemyをPlayer Satat付近に配置し、シミレーションを押します。

image

以下の通りにCPUがランダムに移動していれば完成です。

aijidou

まとめ

今回は、Unreal EngineのAI機能を使って、CPUのランダム歩行を実装しました。

CPU実装の基本編となりますので、参考になれば幸いです。

最後まで御覧いただきましてありがとうございました。

コメントする

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