ゲーム開発備忘録

ゲームプログラマー UE4・5向けの記事を書いておりますので見ていただけるとありがたいです。

【ゼロからアンリアルエンジン5】㉜状態異常を実装しよう=完結編=

目次

 

はじめに

注意

UE5.0.0の現在の情報です。

今後のアップデートによりUIや機能が変更される可能性があることをあらかじめご理解ください。

 

前回の状態異常の続きです。

f:id:namiton:20220412143610p:plain

 

仕様

毒沼に入っている間毒状態が蓄積し、毒状態になっている間HPが減るようにします。毒沼外にいるときは毒の蓄積が減少します。

解説

①BP_ThirdPersonCharacterの編集

インターフェースのイベントを2つ実装します。

f:id:namiton:20220412111625p:plain

f:id:namiton:20220412111940p:plain


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

f:id:namiton:20220412112125p:plain

 

毒状態異常用のタイマーを作成します。

End時にはタイマーをクリアします。

f:id:namiton:20220412113140p:plain

 

②BP_AbnormalStateAriaから継承した毒クラスを作成

BP_AbnormalStateAriaからサブクラスを作成します。

サブクラス、継承に関してはここで解説しています。

namiton.hatenablog.jp

 

BP_AbnormalStateAriaを抽象クラスにします。

抽象クラスにするとこのアクタをレベル上に配置できなくなります。

クラス設定からGenerateAbstractClassにチェックをいれます。

f:id:namiton:20220412114346p:plain

 

子ブループリントクラスを作成します。

名前を、BP_PoisonAriaにします。

f:id:namiton:20220412113603p:plain

 

BP_PoisonAriaの編集

BP_PoisonAriaを開きDS Abnormal State Infoをオーバーライドします。

継承しているのでDS Abnormal State Infoと検索すると変数を設定できます。

f:id:namiton:20220412114551p:plain

 

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

f:id:namiton:20220412114641p:plain

 

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

f:id:namiton:20220412114752p:plain

 

レベルに戻り配置していたBP_AbnormalStateAriaを削除します。

BP_PoisonAriaを3つほど配置します。

f:id:namiton:20220412115614p:plain

 

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

f:id:namiton:20220412115359p:plain

 

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

f:id:namiton:20220412115640p:plain

 

④BP_ThirdPersonCharacterに蓄積システムの実装

毒の最大耐性変数PoisonMaxTolerance、

現在の毒の蓄積CurrentPoison、

毒状態になったかどうかIsPoisonを作成します。

それぞれデフォルト値を300、0、falseにしておきます。

f:id:namiton:20220412120648p:plain

 

現在の蓄積量に追加の蓄積量を足します。

最大量以上に増えないようにClampしてセットします。

f:id:namiton:20220412123826p:plain

 

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

f:id:namiton:20220412121317p:plain

 

⑤自然状態異常回復システムの実装

毒の自然回復速度AutoPoisonHealInterval、

毒の自然回復量AutoPoisonHealValueを作成し

0.1,1などそれぞれデフォルト値を設定します。

 

蓄積の時と同じようにタイマーをセットし回復するようにします。

f:id:namiton:20220412123238p:plain



自然回復が再び毒沼に入った時に入らないように

スタート側にPoisonHealTimerをクリアするようにノードを追加します。

f:id:namiton:20220412123950p:plain


実行してみましょう。

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

f:id:namiton:20220412124056p:plain

 

⑥毒用のUIの作成

WBP_Hudに毒用の表示を追加します。

HP_Back_Barを複製して名前をPoison_Barにします。

バーの内容が分かるようにテキストを追加しておきました。

 

適当に位置を調整します。

f:id:namiton:20220412125655p:plain

 

この表示は毒状態になった場合のみ表示したいので、

表示非表示を切り替える関数を作成しておきます。

ビヘイビアのVisibilityからバインディングを作成します。

名前をGetPoisonbarVisibilityにします。

f:id:namiton:20220412130340p:plain

 

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

f:id:namiton:20220412132427p:plain

 

関数GetPoisonbarVisibilityを開き変数へ昇格しておきます。

名前はWBP_PoisonVisibilityです。

f:id:namiton:20220412130748p:plain

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

f:id:namiton:20220412131907p:plain

 

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

名前はWBP_PoisonTextVisibilityです。

f:id:namiton:20220412132530p:plain

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

f:id:namiton:20220412132638p:plain

 

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

f:id:namiton:20220412131950p:plain

 

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

名前はGet_Poisonにします。

f:id:namiton:20220412130903p:plain

 

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

f:id:namiton:20220412131200p:plain

 

⑦BP_ThirdPersonCharacterからUIに変数をセット

ウィジェットの生成後に最大毒耐性をセットしておきます。

f:id:namiton:20220412131538p:plain

 

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

f:id:namiton:20220412133157p:plain

 

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

f:id:namiton:20220412133538p:plain

 

⑧毒状態になったらHPを減らす処理

毒状態になった瞬間の沼のダメージを蓄積するようにします。

ダメージインターバルとダメージ量を変数化します。

スタート側の最後にDoOnceを繋げてセットします。

f:id:namiton:20220412134054p:plain

 

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

f:id:namiton:20220412140250p:plain

 

全体像

f:id:namiton:20220412140225p:plain

 

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

f:id:namiton:20220412140344p:plain

 

⑨毒沼に入ったら移動速度を遅くする

構造体DS_AbnormalStateInfoに移動速度の追加をします。

f:id:namiton:20220412140859p:plain

このキャラクターの移動速度は500.0 cm/sなので

f:id:namiton:20220412141237p:plain

試しに250で設定します。

f:id:namiton:20220412141342p:plain


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

▼スタート

f:id:namiton:20220412141921p:plain

f:id:namiton:20220412141909p:plain

▼エンド

f:id:namiton:20220412141931p:plain


これで移動制限がかかるようになりました。



最後にやばそうなマテリアルを適当に作成してStaticMeshに適応して完成です。

f:id:namiton:20220412142728p:plain

 

最後に

UE4やUE5向けの記事を書いています。

皆様の応援が投稿のモチベーションになりますので

コメントやTwitterのフォローなどしていただけるとありがたいです。

それではよきゲーム開発を。