[Unreal Engine 5]AIキャラクタがターゲットを攻撃してダメージを与える

Unreal Engine 5

シンプルなタワーディフェンスゲームを作る part3

攻撃処理の流れ

下図のような情報伝達をすることで、攻撃してダメージを与える振る舞いを作ります。

①攻撃するイベントのインターフェースを作成する

①ビヘイビアツリーの「攻撃する」から「BP_Enemy」の「ダメージを与える」にイベントの発行を行うためのインターフェースを作ります。

「Enemy」フォルダで右クリック→「ブループリント」→「ブループリントインターフェース」を選択することで「ブループリントインターフェース」を作成できます。ここでは「BPI_Enemy」という名称で作成します。

「BPI_Enemy」を開くと「新規関数」という関数が一つ実装されています。「新規関数」を「Attack」という名称に変更します。 

「BP_Enemy」を開きます。「クラス設定」→「実装インターフェース」→「追加」で先ほど作成した「BPI_Enemy」を選択します。

 次にイベントグラフ上で「Event Attack」を追加します。これで「BP_Enemy」の「Event Attack」を外部から呼ぶことが出来るインターフェースが出来ました。

②攻撃するイベントを発行する

 以前作成した「プレイヤを追いかけるAIキャラクタを作る」と同じ要領でビヘイビアツリー「BT_Enemy」の「新規タスク」から「BTTask_attack_target」という名称でタスクを作成します。

「BTTask_attack_target」を開き、下図のような処理を作ります。

左側の「関数」「オーバーライド」から「Event Receive Execute AI」を選択してイベントを作成します。イベントグラフ上で右クリック→Attackと検索すると「Attack(Message)」が出てくるので「Target」ピンに「Controlled Pawn」を繋ぎます。「Attack」の次に「Finish Execute」を繋ぎ「Success」にチェックを付けます。

 ビヘイビアツリー「BT_Enemy」を開きます。「Sequence」から先ほど作成した「BTTask_attack_target」を繋ぎます。ビヘイビアツリーでは左から右に処理が進むので、「BTTask_chase_target」の右に配置します。
そのままでは毎フレーム「BTTask_attack_target」が呼ばれ、攻撃ダメージが大きくなってしまうため、待機処理も加えます。「Sequence」から「wait」を検索して追加します。今回は「wait time」を0.5秒とします。これで敵ユニットがターゲットに到達してから0.5秒おきに攻撃イベントを発行するAIが出来ました。

③ダメージ情報をやり取りする

 「BP_Enemy」を開きます。①で作成した「Event Attack」から「Apply Damage」を繋ぎ、「Damaged Actor」に変数「target」(part2で作成)を繋ぎます。「Apply Damage」はデフォルトで用意されているインターフェースであり、「Damaged Actor」(ここでは「BP_headquater」)に対してダメージイベントを発行します。

「BP_headquater」を開きます。イベントグラフ上で右クリック→「Event Any damage」を追加します。下図のように試しに「print string」で「Damage」を表示すると「BP_Enemy」側で設定したダメージ10が表示されるようになります。

④ダメージを受けてHPを減らす

「BP_headquater」を開きます。左下の変数の「+」ボタンからfloat型で「health」「max_health」を追加します。「max_health」にはデフォルト値「100」としておきます。デフォルト値はコンパイルボタンを押してから変数を選択すると右の詳細パネルの一番下で設定できます。

下図のような処理を作ります。「Event BeginPlay」から「Set health」を繋ぎ「max_health」で初期化します。(これで実行時にhealthが100に初期化されます)

「Event AnyDamage」で「health」から「Damage」を引き算「subtractノード」した値を「health」にセットします。これで前回の「health」から「Damage」を引いた値が設定されるようになります。

試しに「print string」で「health」の値を表示すると、下図のように100から10ずつ引かれ、90→80→70・・・と表示されます。

AIキャラクタである敵ユニットが、ターゲット(自軍拠点)に攻撃してダメージを与える処理を実装できました。

コメント

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