UE4ゲーム制作入門七日目

一人UE4ゲーム制作入門アドベントカレンダー七日目です。

今回は敵の死亡処理を作ります。

ステータスの作成


まずは、ステータスを作りましょう。今回は共通のステータスなので、自分の名前フォルダかコンテンツフォルダの直下に右クリックから、ブループリントカテゴリの中にある構造体を選んで作成します。

名前はST_Statusにします。

構造体の作り方

ST_Statusの中身はこれです。float変数が一つというアレな状態ですが、今後共通するステータスがある場合、ここに追加していくことになります。

ST_Statusの中身

ステータス更新用のマクロライブラリの作成


次に、このステータス構造体の中身を更新するためのマクロ群をまとめておくための、ブループリントマクロライブラリーを作ります。

使い方があってるかどうか、よくわかってないので誰か指摘ください。

コンテンツブラウザ上の自分の名前フォルダかコンテントフォルダで右クリックして、ブループリントカテゴリのブループリントマクロライブラリーを選んで作成します。

名前は、BPM_Statusです。

BlueprintMacroLibraryを作る

この中に2つマクロを作ります。

一つ目が、ダメージ処理です。名前はCalcDamageです。

ST_Statusをもらってきて、その中身のHealthだけを更新して構造体にして戻しています。もう一つのfloatは計算後の体力を返すことで、死亡判定に使えるようにしています。

CalcHealth.png

もう一つが、死亡判定です。単純に0以下なら死亡扱いになります。

名前はCheckDeathです。

CheckDeath.png

変数と関数の名前付けにもうちょいセンスが欲しいところ。

敵側のダメージ処理の実装


次は敵にダメージ処理を実装します。AnyDamageという、ApplyDamageでダメージを与えられたときに発生するイベントから、HPを更新しています。そして、HPが0以下になった場合は死亡処理を行うようにしています。

敵ダメージ処理

死亡時に呼んでいるDestroyFuncの中身はこんな感じです。死亡時アニメーションをスタートさせています。

DestroyFunc.png

アニメーションも、isDeathがtrueなら死亡アニメーションへ遷移するようにしています。赤丸で囲っているのが、先程のBP_Enemyから呼び出している、isDeath変数をtrueにする関数です。

Deathアニメーション終了時イベントを実装する1

アニメーション終了時のイベント通知を設定します。上のタイムラインで右クリックするとAdd Notify...>New Notifyで名前を入力すると、イベント通知が設定できます。僕の方の名前はEndDeathAnimです。

作ったイベント通知はドラッグして好きな時間に設定できるので、今回は一番うしろに設定します。

死亡アニメーションを設定する

こっちは先程作ったアニメーションが再生し終わったときに発生するイベントの実装です。当然死亡アニメーションが再生しきったら消えてもらいます。

Deathアニメーション終了時イベントを実装する2

弾のダメージを与える処理の実装


次に弾の方をなんとかします。まずStaticMeshのコリジョンをNoCollisionに変更します。これをなくさないとクマが地平の彼方へ飛んでいきます。

ShereCollisionはOverlapイベントで当たり判定を取ります。そして、当たったアクターに対してApplyDamageで、fDamage変数の値分ダメージを与えます。

ApplyDamageはクマの方に実装したAnyDamageに対してダメージを渡します。

そして、ダメージを与え終わったら消します。消さなければ、延々とダメージを与え続ける理不尽武装になります。ある意味面白いのでそっちが良ければDestroyActorを消してみるのもいいかもしれませんね。(今はHP1しかないから特に意味ないけど

ダメージを与える

当ててみる


こんな感じになってたらオッケーです。