目次
はじめに
FPSやTPSでよくあるダメージ表示を数字で出す方法です。
同じような解説を防ぐため、リコイルの記事をベースに解説しています。
▼この記事でできること
解説
①ダメージテキストブループリントの作成
右クリックからブループリントクラス
アクターを親としたBP_DamageTextを作ります。
作成したブループリントを開いたらコンポーネントの追加からWidgetを追加しましょう
イベントグラフに移動して画像のように組みます。
タイムラインで移動させ、終了したらDestroyActorで破壊します。
タイムラインの編集
タイムラインノードを開いて長さを0.2秒
フロートトラックを追加して名前をMoveUpとします。
0.2秒後に1になるようなキーを打ちましょう。
イベントグラフに戻りDeltaLocationに接続します。
タイムラインのキーで0~1にしているので掛け算することで値の大きさを調整できます。
②テキストウィジェットの作成
ウィジェットブループリントWBP_DamageTextを作ります。
ウィジェットを開きCustom,100、35に設定します。
パレットからTextを検索しドラッグアンドドロップで配置します。
階層からDamageTextにリネームします。
詳細からIsVariableにチェックを入れ、Textに仮で100と入力しておきます。
着弾地点と文字が被らないように少し右上に表示させるようにトランスフォームを調整します。
ウィジェットをグラフに切り替え、テキストを外部から編集しやすいようにイベントを作成します。
カスタムイベントWBP_SetDamageTextを作成してインプットにString型の変数を作ります。
変数化されているDamageTextにSetTextをすれば完了です。
③BP_DamageTextにウィジェットの適応
BP_DamageTextに戻り、Widgetの詳細から画像のようにセットアップします。
表示するテキストを変更できるようにBeginPlayを削除してカスタムイベントに変更しておきましょう。
カスタムイベントPlayDamageTextを作成してWBP_DamageTextのイベントを呼ぶようにします。この時インプットにStringを作成して接続します。
④スポーン設定
後は当たった場所にBP_DamageTextを生成するだけです。
BP_Rifleを開きます。
リコイルの記事で書いたライントレース(当たり判定)の最後に記述していきます。
※シーケンスの0は元からあるの音とモンタージュに繋がってます。
当たった場所からRandomな位置を足した場所にBP_DamageTextを生成するシンプルなノードです。
後は表示させたいStringをセットするPlayDamageTextイベントを呼べば完成です。
実行してみましょう。
当たった場所から数字が表示されていれば成功です。
タイムラインを変更することで文字の消えるまでの時間や移動方向を編集できるのでやってみてください。
これで基本的な実装は終わりです。
ここからは少し踏み込んだ実装例です。
⑤+α 当たったものに応じてテキストを変更する
的を用意してそれぞれヒット時のダメージ係数がかかるようにしましょう。
弾の威力が10の場合は、2倍なら20 、5倍なら50 、、、という感じです。
みんな大好き(強要)インターフェースを作ります。
名前はBPI_HitSystemです。
インプットにIntegerアウトプットにStringを持った関数GetDamageTextを作ります。
ヒット対象のブループリントBP_HitTargetを作ります。
StaticMeshコンポーネントを追加して
メッシュとサイズを変更します。
クラス設定からインターフェースを実装します。
インターフェースGetDamageText関数を開き変数Scaleを作成、デフォルト値を1、インスタンス編集可能にチェックを入れます。
BP_Rifleを開きインターフェースを実装しているか検証し呼び出します。
レベルにBP_HitTargetを配置し詳細からダメージ係数を自由に変更します。
実行してそれぞれ値が変化していることを確認出来たら成功です。
あとはレティクルを追加したり、着弾エフェクトを出してみたり試してみましょう!
最後に
UE4やUE5向けの記事を書いています。
皆様の応援が投稿のモチベーションになりますので
コメントやTwitterのフォローなどしていただけるとありがたいです。
それではよきゲーム開発を。