AIキャラクターと戦う機能を作る part3
こちらのようなAIキャラクターと戦う機能を作っています。本記事では下の動画のように、キャラクターにpawn sensingを使って視界を持たせ、視界に入ったプレイヤーを追いかけるようにする機能を作ります。
基本設計
「Pawn Sensing」という機能を使うことで、視界を設定し、その視界にPawnが入っているかどうかを知ることができます。
「Pawn Sensing」でプレイヤーを発見したら、ブラックボードの変数に発見したというフラグを立てておき、ビヘイビアツリーでフラグが立っていればプレイヤーを追いかけ、立っていなければ歩き回るという条件分岐を作ります。
ブラックボードに変数を作る
「BB_battle_ai」を開きます。
「新規キー」を押して新規キーを追加し、boolean型の「find_player」という名称にします。
Pawn Sensingを設定する
「BP_battle_ai」を開きます。
左上のコンポーネントパネルの追加から、pawn sensingを検索して追加します。
「pawn sensing」を選択して視界を設定していきます。
右の詳細パネルで、見える距離「Sight Radius」を2000、周辺視野角「Peripheral Vision Angle」を60に設定しておきます。
「pawn sensing」のイベント欄の「On See Pawn」を選択します。
すると「On See Pawn(PawnSensing)」がイベントグラフに追加されます。
「On See Pawn(PawnSensing)」はPawnが視界に入ったときに呼ばれるイベントです。
「On See Pawn(PawnSensing)」の続きに以下のようにノードを追加します。
こうすることで、プレイヤーが視界内に入ったとき、先ほど作成したブラックボードの変数「find_player」がTrueになります。
ビヘイビアツリーに条件分岐を作る
「BT_battle_ai」を開きます。
「Sequence」を右クリック→デコレーターを追加から「Blackboard」を選択します。
追加したデコレーターに以下の設定をしていきます。
「オブザーバーを中止」を「Self」に設定します。
「Key Query」を「Is Not Set」に設定します。
「Blackboard Key」を「find_player」に設定します。
次に、先ほど作成したデコレーター付きの「Sequence」をコピー&ペーストして右に置きます。
ペーストしたほうのデコレーターの「Key Query」を「Is Set」に設定します。
さらに、「Selector」を追加して、「Selector」からそれぞれの「Sequence」に繋ぎます。
これで「find_player」がFalseの時は左の「Sequence」で歩き回り、Trueの時は右の「Sequence」で、この後作るプレイヤーを追いかける処理に入ります。
プレイヤーを追いかけるタスクを作る
新規タスクから「BTTask_BlueprintBase」を選択して、新しいタスクを作ります。名称は「BTTask_chase_player」としておきます。
「BTTask_chase_player」を開きます。
左の「マイブループリント」「関数」オーバーライドから「Receive Execute AI」を選択して、「Event Receive Execute AI」を追加します。
「Event Receive Execute AI」の続きに以下のようにノードを追加します。
「BT_battle_ai」を開きます。
先ほど作成した「BTTask_chase_player」を右の「Sequence」に繋ぎます。
ここまで実装して、冒頭の動画のようにプレイヤーを発見したらプレイヤーを追いかけるキャラクターを作ることが出来ます。
コメント