🌡️
【UEFN】Verseで進捗管理のできるプログレスバーを表示する
やりたいこと
決められた範囲でプレイヤーが進んだ距離に応じて進捗具合を表示できるプログレスバーを表示する。今回はX座標:0.0~10000.0の範囲で変化するように作成しています。
利用する装置
- なし
コードの全体
- プログレスバーUIクラス
using { /Fortnite.com/Characters }
using { /Fortnite.com/UI }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/SpatialMath }
using { /UnrealEngine.com/Temporary/UI }
CreateProgressBarUI<public><constructor>(InPlayer : player) := progress_bar :
Player := option{player[InPlayer]}
PlayerUI := option{GetPlayerUI[player[InPlayer]]}
progress_bar := class():
var Canvas : canvas = canvas{}
StartPostionX : float = 0.0
EndPostionX : float = 10000.0
Player : ?player = false
PlayerUI : ?player_ui = false
# プログレスバーのWidgetの初期化
ProgressBar : slider_regular = slider_regular{DefaultValue := 0.0, DefaultMaxValue := 100.0, DefaultMinValue := 0.0}
# プログレスバーのUIを作成します
block:
set Canvas = canvas :
Slots := array :
canvas_slot :
Anchors := anchors{Minimum := vector2{X := 0.5, Y:= 0.0}, Maximum := vector2{X := 0.5, Y := 0.0}}
Offsets := margin{Left := -700.0, Top := 70.0, Right := 1400.0, Bottom := 50.0}
SizeToContent := false
Alignment := vector2{X := 0.0, Y := 0.0}
Widget := ProgressBar
InitUI<public>() : void =
Print("AddProgressBar")
if(InPlayerUI := PlayerUI?):
# プレイヤーにUIを追加します
InPlayerUI.AddWidget(Canvas)
UpdateUI<public>(): void =
if(InPlayer := Player?, Transform := InPlayer.GetFortCharacter[].GetTransform()):
# プレイヤーの座標から進捗具合を計算してます
var CurrentTranslationX : float = Transform.Translation.X
var ProgressValue : float = (CurrentTranslationX - StartPostionX) / (EndPostionX - StartPostionX) * 100
# プログレスバーに値をセットします。
ProgressBar.SetValue(ProgressValue)
- メインクラス
using { /Fortnite.com/Characters }
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
sample_01 := class(creative_device):
# 各プレイヤーとプログレスバーのUIをmapで管理します
var PlayerProgressBar : [player]?progress_bar = map{}
OnBegin<override>()<suspends>:void=
spawn{RegisterProgressBarUI()}
RegisterProgressBarUI()<suspends>: void =
loop:
AllPlayer : []player = GetPlayspace().GetPlayers()
for(Player : AllPlayer):
# 登録されてないプレイヤーにのみプログレスバーのUIを追加します
if(not PlayerProgressBar[Player]):
# progress_barクラスのインスタンスを作成します
var ProgressBarUI : progress_bar = CreateProgressBarUI(Player)
# プレイヤーごとにprogress_barをmapに登録
if(set PlayerProgressBar[Player] = option{ProgressBarUI}):
# プレイヤーにプログレスバーのUIを追加します
ProgressBarUI.InitUI()
# プログレスバーの値を更新します
spawn{UpdateProgressBar(Player)}
Sleep(1.0)
UpdateProgressBar(InPlayer: player)<suspends>: void =
if(ProgressBarUI := PlayerProgressBar[InPlayer]?):
loop:
ProgressBarUI.UpdateUI()
Sleep(0.1)
その他設定
なし
結果
プレイヤーがX軸方向に進むと0.0~10000.0の範囲でプログレスバーが更新されることが確認できました。
最後に
Only Upのようなゲームでも高度に合わせてプログレスバーを利用しどれだけ進んだかを表示することも可能です。利用方法はいろいろあると思いますのでslider_regularを利用してみてください。
Twitter(X)でも情報発信していくのでフォローしてね~
参考リンク
Discussion