UE4ゲーム制作入門二十三日

一人UE4ゲーム制作入門アドベントカレンダー二十三日目です。

今日は攻撃力やらHPを反映させました。今まではデバッグ用に攻撃力は絶対に倒せる値でやっていたので。あと、多少ゲーム性を持たせるために制限時間を実装しました。

まずPlayerのメインUIを作ります。UserInterfaceからWG_Mainの名前で新しくウィジェットを作成します。

見た目はこんな感じです。左下のプログレスバーをTransformのAngleで-90度回して縦向きにしました。あと回転の中心点のPivotをいじっています。

右上のは制限時間です。

WG_Mainのデザイナ

まず、ST_StatusにHP_MaxとAttackを追加します。HP_MaxはPlayerのHPバー用とステータスを持ってるアクターのHP初期化用に使います。

EnemyとPlayerのBeginPlayにステータスを初期化する処理を加えます。同じ処理なのでEnemyのスクショだけですが、これもマクロライブラリーにまとめたほうがよさそうですね。

HPの初期化

HPのダメージ処理部分も構造体に要素が増えたため修正を行います。HP_MaxやAttackの値をきちんと引き継ぐようにしました。

CalcDamage.png

PlayerとEnemyなどのAddDamageのDamage部分にST_Statusの攻撃力を与えるようにして、ダメージ処理関係は一通り完成です。

制限時間のほうに移ります。こちらはゲームインスタンスに制限時間をもたせ、計算できるようにしました。

GameInstance.png

BP_GameModeでこれを呼ぶ関数を実装しています。時間切れだったらResult画面へ移行するようになっています。

CalcLimitTime.png

この関数は実際にはウィジェットのTickEventで呼ばれています。戻り値はWG_Mainの変数であるLimitTimeに設定するようにしています。

WG_Mainのイベントグラフ

制限時間ですが、00:00というフォーマットで表示するために多少手間をかけています。他にやりようが思いつかないので、知っている人は教えていただけると助かります。

まず、デザイナで作った制限時間用のテキストウィジェットに設定する関数です。これはテキストウィジェットの詳細パネルのTextからバインドする関数を作成することで宣言できます。別にこちらのイベントグラフで作ってデザイナの方でバインドしても問題ありません。

getLimitTimeText.png

分と秒に分けるマクロはそれぞれこんな感じです。floatには100秒とかそういう値で入っているため、分に直さなければなりません。

getSecond.png

GetMinute.png

こちらで実際その値を、想定しているフォーマットに変換しています。実際の値が10未満なら数字は一桁部分にしか存在しないことになるため、その数字の前に0を付け足すようにしています。

checkDigit.png

HPの方は単純明快にプレイヤーから取ってきて、パーセントに変換してプログレスバーに反映しています。

getHealth.png

HealthPercent.png

実際の画面はこんな感じになります。

gamenn.png