UE5の死亡処理について
UE5では敵や操作キャラのHPが0になると死亡処理を行いたいことが多い。
これまでの以下の記事で銃を持たせ、エイムし弾を撃ちダメージを与えられるようにしている。この記事では敵のHPが0になったら死亡するようにしていこうと思う。
④視点変更
⑤弾を撃つ
先に確認してみてほしい。
Get・SetやSequenceやBranchといった基礎的なノードがわからない場合は先に以下記事を確認してほしい。
アンリアルエンジンのノードの一覧UE5の死亡処理の目次
死亡アニメーションの準備死亡処理の実装
目次にもどる
死亡アニメーションの準備
死亡アニメーションとして、今回は以下のゾンビの無料アセットを使う(敵がオークなので本当はあまり適さないが無料なのでこれにした。他に適したアニメーションのアセットを持っているならそれを使ってOK)。
たぶんこのアセットはView in My Libraryを選択しても入らない。Downloadしよう。
.jpg)
Downloadしたファイルを解凍すると以下のようにFBXファイルが入っている。
.jpg)
このうち、FN_Manny_Zombie_Death.FBXを選択し、UE5のコンテンツドロワーの任意の場所にドラッグ&ドロップしてインポートしよう。
アニメーションシーケンスファイルとして、FN_Manny_Zombie_Death_Animがあり、倒れるアニメーションとなっている。これを死亡時のアニメーションとして使っていく。
ただし、このままオークの死亡時アニメーションとしてFN_Manny_Zombie_Death_Animを使っても再生されない。アニメーションには骨をどう動かすかのデータが入っているのだが、アニメーションデータの骨構造とスケルタルメッシュ(オーク)の骨構造が異なると上手く再生されない場合があるのだ。
その場合リターゲットという作業を行う必要がある。
FN_Manny_Zombie_Death_Animを選択して右クリックし、アニメーションをリターゲットを選択する。
.jpg)
以下のような画面が出てくるので、ターゲットスケルタルメッシュをSK_Warrior_Orcに選択し、名前でFN_Manny_Zombie_Death_Animを選択し、アニメーションをエクスポートを押す。
.jpg)
以下のような画面が出るので、任意のエクスポート場所を選びエクスポートを押す。エクスポートされたファイルの名前をFN_Orc_Death_Animにする。
.jpg)
これでオークの骨構造に合わせたアニメーションシーケンスファイルが作成できた。
FN_Orc_Death_Animを選択して右クリックし、作成する→AnimMontageを選択する。
.jpg)
アニメーションモンタージュのファイルができるのでAM_FN_Orc_Death_Animと名前をつける。
AM_FN_Orc_Death_Animを開き、アセット詳細のEnable Auto Blend outのチェックを外す。
.jpg)
ここにチェックが入っているとキャラが倒れてから立っている状態にブレンドされて戻ろうとする。それでは不自然なのでチェックを外す。
これで死亡アニメーションを使う準備ができた。
前回の記事で作成したBP_Orcについてアニメーションブループリントを作成する。
今回はサードパーソンテンプレートのアニメーションブループリントとして最初から用意されているABP_Mannyをコピーして使うことにする(場所はコンテンツドロワーのCharacters→Animationsのフォルダにある)。
.jpg)
ABP_Mannyをコピーしたファイルの名前はABP_Orcとする。自分にとってわかりやすい任意の場所に移動させよう。
.jpg)
BP_Orcを開き、コンポーネントタブでBP_Orcを選択して詳細タブを確認し、Animクラスの項目でABP_Orcを指定しコンパイルすれば完了だ。
.jpg)
死亡処理の実装
前回の記事で作成したBP_Character(操作キャラ・敵キャラの親となっているブループリントクラス)を開く。
変数を1つ作成し、型はAnimモンタージュにする(検索すれば出てくる)。変数の名前はDeathとする。

コンパイルする。
BP_Orcを開いてコンポーネントタブのBP_Orcを選択し、詳細タブのデフォルトのDeath(BP_Characterから継承された変数)にAM_FN_Orc_Death_Animを指定する。
.jpg)
これでBP_OrcのHPが0になった時の死亡アニメーションを指定することができた。
続いてBP_Characterを開きノードを追加していく。
今まではインターフェースで弾が敵のコリジョンを検知したらダメージ処理(HPからダメージを減算しHPを再度セット)が起こるようにしていた。
.jpg)
ここから以下のようにBranchで条件分岐しHPの値が0以下の場合はtrueとなり、Play Anim Montage(一時的なアニメーションの表示によく使う)の処理が行われるようにノードを追加する。
.jpg)
Play Anim Montageの入力には変数Deathを指定しており、オークがダメージを喰らいHPが0以下になると死亡アニメーションとしてAM_FN_Orc_Death_Animが再生されることになる。
続いて死亡アニメーション後にキャラを消す処理を作っていく。
Play Anim Montageの特徴はReturn Valueからアニメーションモンタージュの長さ(秒)を返すことができる点。
つまり、アニメーションモンタージュが終了するまでの時間がわかる。加えてDelayとDestroyを組み合わせることで、死亡アニメーション完了までディレイをかけ死亡キャラを消すといった処理を行える。
とはいってもアニメーション終了直後にいきなり敵が消えるのも自分は不自然に感じたので、Play Anim MontageのReturn Valueに3を加算した秒数のDelayを配置し、その後Destroyでそのアクタを削除するようにノードを配置した。
.jpg)
これで以下のように銃を撃って弾が敵に当たってHPが0になると死亡処理が行われ、倒れるアニメーションが再生されDelay経過後(アニメーションの時間+3秒)に敵が消失する。
後はBranchのfalse時(つまり攻撃が当たりダメージ処理が行われたがHPは0以下になっていない)の処理としてPlay Anim Montageでヒット時のひるみアニメーションを入れてやるといい。
次の記事ではパンチ攻撃を行えるようにしていく。
⑧パンチ攻撃