UE4ゲーム制作入門七日目
一人UE4ゲーム制作入門アドベントカレンダー七日目です。
今回は敵の死亡処理を作ります。
ステータスの作成
まずは、ステータスを作りましょう。今回は共通のステータスなので、自分の名前フォルダかコンテンツフォルダの直下に右クリックから、ブループリントカテゴリの中にある構造体を選んで作成します。
名前はST_Statusにします。
ST_Statusの中身はこれです。float変数が一つというアレな状態ですが、今後共通するステータスがある場合、ここに追加していくことになります。
ステータス更新用のマクロライブラリの作成
次に、このステータス構造体の中身を更新するためのマクロ群をまとめておくための、ブループリントマクロライブラリーを作ります。
使い方があってるかどうか、よくわかってないので誰か指摘ください。
コンテンツブラウザ上の自分の名前フォルダかコンテントフォルダで右クリックして、ブループリントカテゴリのブループリントマクロライブラリーを選んで作成します。
名前は、BPM_Statusです。
この中に2つマクロを作ります。
一つ目が、ダメージ処理です。名前はCalcDamageです。
ST_Statusをもらってきて、その中身のHealthだけを更新して構造体にして戻しています。もう一つのfloatは計算後の体力を返すことで、死亡判定に使えるようにしています。
もう一つが、死亡判定です。単純に0以下なら死亡扱いになります。
名前はCheckDeathです。
変数と関数の名前付けにもうちょいセンスが欲しいところ。
敵側のダメージ処理の実装
次は敵にダメージ処理を実装します。AnyDamageという、ApplyDamageでダメージを与えられたときに発生するイベントから、HPを更新しています。そして、HPが0以下になった場合は死亡処理を行うようにしています。
死亡時に呼んでいるDestroyFuncの中身はこんな感じです。死亡時アニメーションをスタートさせています。
アニメーションも、isDeathがtrueなら死亡アニメーションへ遷移するようにしています。赤丸で囲っているのが、先程のBP_Enemyから呼び出している、isDeath変数をtrueにする関数です。
アニメーション終了時のイベント通知を設定します。上のタイムラインで右クリックするとAdd Notify...>New Notifyで名前を入力すると、イベント通知が設定できます。僕の方の名前はEndDeathAnimです。
作ったイベント通知はドラッグして好きな時間に設定できるので、今回は一番うしろに設定します。
こっちは先程作ったアニメーションが再生し終わったときに発生するイベントの実装です。当然死亡アニメーションが再生しきったら消えてもらいます。
弾のダメージを与える処理の実装
次に弾の方をなんとかします。まずStaticMeshのコリジョンをNoCollisionに変更します。これをなくさないとクマが地平の彼方へ飛んでいきます。
ShereCollisionはOverlapイベントで当たり判定を取ります。そして、当たったアクターに対してApplyDamageで、fDamage変数の値分ダメージを与えます。
ApplyDamageはクマの方に実装したAnyDamageに対してダメージを渡します。
そして、ダメージを与え終わったら消します。消さなければ、延々とダメージを与え続ける理不尽武装になります。ある意味面白いのでそっちが良ければDestroyActorを消してみるのもいいかもしれませんね。(今はHP1しかないから特に意味ないけど
当ててみる
— 故・白鳥隆士@一人UE4アドカレ (@shiratori1221) 2016年12月5日
こんな感じになってたらオッケーです。