シンプルなタワーディフェンスゲームを作る part2
part1でプレイヤを追いかけるAIを作りました。これを改造してタワーディフェンスゲームにおける自軍の拠点に向かって進むAIを作ります。
ターゲット(自軍拠点)を作る
タワーディフェンスにおける自軍拠点ということで、「headquater」という名称でフォルダを作っておきます。
まずは外観を作ります。ビューポートで「モデリングモード」→「作成」→「Cylinder」で円柱を作成します。作成した部品はpart1と同様「SM_headquater」として「headquater」フォルダに移動しておきます。
自軍拠点は「Actor」クラスを継承したブループリントで作成します。ブループリントを作成し「BP_headquater」とし、先ほど作成した「SM_headquater」をビューポートにドラッグアンドドロップします(下図)。
敵ユニットAIの追従対象を設定する
「BP_Enemy」を開きます。イベントグラフで「Event BeginPlay」に「Get All Actors Of Class」を繋げます。「Get All Actors Of Class」を使うことでレベル内に存在する指定したClassを配列型で全て取得することが出来ます。今回「BP_headquater」はレベルに1つのみ置く想定なので「Out Actors」から「get(a copy)」で配列の0番目を取得します。
次に「get(a copy)」の出力ピンで右クリック→「変数へ昇格」を選択します。
作った変数を「target」という名称します。左下の変数の項目に追加されるので、追加された変数をイベントグラフにドラッグアンドドロップし、「set target」を下図のように配置します。
次に、「Enemy/Task」フォルダに置いている「BTTask_chase_target」を開きます。
前回はプレイヤに追従させるために「AI Move To」の「Target Actor」ピンには「Get Player Controller」を繋いでいましたが、今回は下図のように繋ぎます。
「Event Receive Execute AI」の「Controlled Pawn」から「Cast To BP_Enemy」を繋ぎ、その出力ピン「As BP_Enemy」から「get target」を繋ぎ、その出力ピン「target」を「AI Move To」の「Target Actor」ピンに繋ぎます。
こうすることで「BP_Enemy」が所持している「target」(自軍拠点を示すオブジェクト)を参照することが出来ます。
「BP_headquater」は大きさがあるので、オブジェクト同士が衝突し続けていつまでも目的地に到達しないので「AI Move To」の「Acceptance Radius」を50に設定しておきます。(「BP_Enemy」が「BP_headquater」の50cm以内に到達すると「BTTask_chase_target」の処理が完了します)
※「AI Move To」から繋ぐ「Finish Execute」は「On Success」「On Fail」から繋いでください。
次に「BP_headquater」をレベル上に配置します(下図)。
実行すると「BP_Enemy」が移動し「BP_headquater」の50cm以内に到達すると停止します(下図)。
おまけ:外観に色を付ける
オブジェクトが複数になったので、分かりやすいよう色を付けておきます。
「Enemy」フォルダで右クリック→「マテリアル」を選択します。名称は「M_Enemy」とします。
マテリアル「M_Enemy」を開き下図のように設定します。「Constant3Vector」を作成し、1つ目の出力ピン「M_Enemy」のベースカラーに接続します。「Constant3Vector」の左下の正方形をダブルクリックすることで色を設定できます。今回は赤色に設定しました。設定が終わったら左上の「適用」を押しておきます。
「SM_Enemy」を開き、詳細パネルの「マテリアルスロット」に先ほど作成した「M_Enemy」を割り当てます(下図)。
同様に「M_headquater」を作成し「headquater」フォルダ内の「SM_headquater」に割り当てます。ビューポート上で確認すると下図のようになります。
コメント