这个比较简单,注意的是计算百分比时要变成float,否则进度条不动
class UProgressBar;
public:
// 对应蓝图自定义事件,C++可调用、蓝图也可调用
UFUNCTION(BlueprintCallable, Category = “UI”)
void UpdateExpAndLevel(float CurExp, float RequiredExp, int32 Level);
protected:
// 只绑定需要的两个控件,BindWidget要求名字和UMG蓝图内控件名完全一致
UPROPERTY(meta = (BindWidget))
UProgressBar* Bar_EXP;
UPROPERTY(meta = (BindWidget)) UTextBlock* Text_Level; #include "Components/ProgressBar.h"#include “Components/TextBlock.h”
void UMyPlayerUI::UpdateExpAndLevel(float CurExp, float RequiredExp, int32 Level)
{
// 空指针保护,防止控件没绑定崩溃
if(Bar_EXP && RequiredExp > 0.0f)
{
float Percent = CurExp / RequiredExp;
Bar_EXP->SetPercent(Percent);
}
if(Text_Level) { // 数字转文本 FText LevelText = FText::AsNumber(Level); Text_Level->SetText(LevelText); }}