目次
はじめに
注意
UE5.0.0の現在の情報です。
今後のアップデートによりUIや機能が変更される可能性があることをあらかじめご理解ください。
前回の状態異常の続きです。

仕様
毒沼に入っている間毒状態が蓄積し、毒状態になっている間HPが減るようにします。毒沼外にいるときは毒の蓄積が減少します。
解説
①BP_ThirdPersonCharacterの編集
インターフェースのイベントを2つ実装します。


構造体を分解して状態異常のカテゴリー別に信号を分岐します。

毒状態異常用のタイマーを作成します。
End時にはタイマーをクリアします。

②BP_AbnormalStateAriaから継承した毒クラスを作成
BP_AbnormalStateAriaからサブクラスを作成します。
サブクラス、継承に関してはここで解説しています。
BP_AbnormalStateAriaを抽象クラスにします。
抽象クラスにするとこのアクタをレベル上に配置できなくなります。
クラス設定からGenerateAbstractClassにチェックをいれます。

子ブループリントクラスを作成します。
名前を、BP_PoisonAriaにします。

③BP_PoisonAriaの編集
BP_PoisonAriaを開きDS Abnormal State Infoをオーバーライドします。
継承しているのでDS Abnormal State Infoと検索すると変数を設定できます。

変数へ昇格を行いDSPoisonStateInfoと名前を付けます。

この値を詳細から設定できるように編集可能にチェックを入れます。

レベルに戻り配置していたBP_AbnormalStateAriaを削除します。
BP_PoisonAriaを3つほど配置します。

詳細から毒蓄積と毒状態のダメージ速度や量を設定します。

それぞれ設定した速度で蓄積表示が出ていたら成功です。

④BP_ThirdPersonCharacterに蓄積システムの実装
毒の最大耐性変数PoisonMaxTolerance、
現在の毒の蓄積CurrentPoison、
毒状態になったかどうかIsPoisonを作成します。
それぞれデフォルト値を300、0、falseにしておきます。

現在の蓄積量に追加の蓄積量を足します。
最大量以上に増えないようにClampしてセットします。

値がPoisonMaxToleranceを超えずに蓄積されているようになったら成功です。

⑤自然状態異常回復システムの実装
毒の自然回復速度AutoPoisonHealInterval、
毒の自然回復量AutoPoisonHealValueを作成し
0.1,1などそれぞれデフォルト値を設定します。
蓄積の時と同じようにタイマーをセットし回復するようにします。

自然回復が再び毒沼に入った時に入らないように
スタート側にPoisonHealTimerをクリアするようにノードを追加します。

実行してみましょう。
エリア外に入ったり出たりして蓄積と回復が行われているのを確認します。

⑥毒用のUIの作成
WBP_Hudに毒用の表示を追加します。
HP_Back_Barを複製して名前をPoison_Barにします。
バーの内容が分かるようにテキストを追加しておきました。
適当に位置を調整します。

この表示は毒状態になった場合のみ表示したいので、
表示非表示を切り替える関数を作成しておきます。
ビヘイビアのVisibilityからバインディングを作成します。
名前をGetPoisonbarVisibilityにします。

同様にテキスト用のバインディング関数GetPoisonTextVisibilityを作成します。

関数GetPoisonbarVisibilityを開き変数へ昇格しておきます。
名前はWBP_PoisonVisibilityです。

デフォルト値は非表示のCollapsedにします。

同じように関数GetPoisonTextVisibilityを開き変数へ昇格しておきます。
名前はWBP_PoisonTextVisibilityです。

デフォルト値は非表示のCollapsedにします。

実行してみて表示されないことを確認しましょう。

バー用のバインディングもHPバーと同様に作成します。
名前はGet_Poisonにします。

2種類の変数に昇格しておきましょう。

⑦BP_ThirdPersonCharacterからUIに変数をセット
ウィジェットの生成後に最大毒耐性をセットしておきます。

スタート側のWBP変数のセット箇所です。

エンド側のWBP変数のセット箇所です。

⑧毒状態になったらHPを減らす処理
毒状態になった瞬間の沼のダメージを蓄積するようにします。
ダメージインターバルとダメージ量を変数化します。
スタート側の最後にDoOnceを繋げてセットします。

毒状態用のタイマーを設定してキャッシュしていたダメージを与えるようにします。

全体像

復活したとき前回のウィジェットが残らないように死亡時にウィジェットを削除するようにします。

⑨毒沼に入ったら移動速度を遅くする
構造体DS_AbnormalStateInfoに移動速度の追加をします。
![]()
このキャラクターの移動速度は500.0 cm/sなので

試しに250で設定します。

スタートとエンドのタイマー設定後にMaxWalkSpeedを更新するようにします。
▼スタート


▼エンド

これで移動制限がかかるようになりました。
最後にやばそうなマテリアルを適当に作成してStaticMeshに適応して完成です。

最後に
UE4やUE5向けの記事を書いています。
皆様の応援が投稿のモチベーションになりますので
コメントやTwitterのフォローなどしていただけるとありがたいです。
それではよきゲーム開発を。