[Unreal Engine 5]一定のダメージを受けたら倒されるキャラクタを作る

Unreal Engine 5

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

こちらのようなシンプルなタワーディフェンスゲームを作っています。本記事では下の動画のように、攻撃を受け続けてHPが無くなった「敵ユニット」が消える機能を作ります。
また動画には「敵ユニット」の上部に現在のHPを示すバーが付いていますが、こちらの実装は次の記事で紹介します。

「敵ユニット」にHPの情報を作る

まず「敵ユニット」にHP情報と倒された状態を示す変数を作ります。
「BP_enemy」を開きます。Float型で「health」「max_health」boolean型で「is_dead」​変数を作ります。「max_health」はデフォルト値を100にしておきます。
「Event BeginPlay」で「health」に「max_health」の値を代入して初期化します。

HPが0になったら倒される処理を作る

次に「敵ユニット」が攻撃を受けてHPが0になったら倒される処理を作ります。part3と同じ要領で「Event AnyDamage」に受けたダメージの分だけ「health」から減算する処理を作ります。次に「health」が0以下かどうかを判定します。
0以下である場合は以下の処理を順に繋げます。

  • 「Set is_dead」で「is_dead」をTrueにする。
    後述の「砲台タワー」が倒された「敵ユニット」を攻撃しないため
  • 「Character Movement」をtargetに「Disable Movement」
    「敵ユニット」自身が消えるまでの間に移動しないようにするため
  • 「Delay」(Duration = 1.0)
    将来的にこの時間の間に倒されたアニメーションをつけるため
  • 「Destroy Actor」
    「敵ユニット」自身を消す

「砲台タワー」にHPが0の「敵ユニット」を攻撃しない処理を作る

HPが0になって消えようとしている「敵ユニット」を攻撃対象に選択しないようにします。part5で作った「攻撃対象を選択する」処理に「敵ユニット」が倒されている状態なのかどうかの判断を加えます。
「BP_tower」を開きます。「Event Tick」から繋がる、下図の「攻撃対象を選択する」処理に取得した「BP_enemy」から「get is_dead」で「is_dead」を取得し「敵ユニット」が倒されている状態にあるかをチェックし、倒されている状態ではない「敵ユニット」だけを攻撃対象の候補として残します。

ここまで作って実行すると、冒頭の動画のような動きになります。

コメント

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