シンプルなタワーディフェンスゲームを作る 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」を取得し「敵ユニット」が倒されている状態にあるかをチェックし、倒されている状態ではない「敵ユニット」だけを攻撃対象の候補として残します。
ここまで作って実行すると、冒頭の動画のような動きになります。
コメント