注意:创建C++ UserWidget类
在UE里创建用户控件(按钮名称和C++里的名称必须一样)
UserWidget.h
#pragma once
#include "CoreMinimal.h"
#include "Components/Button.h"//按钮组件
#include "Blueprint/UserWidget.h"//用户控件组件
#include "MyUserWidget.generated.h"
UCLASS()
class IBB_API UMyUserWidget : public UUserWidget
{
GENERATED_BODY()
public:
//创建开始按钮
UPROPERTY(meta = (BindWidget))
UButton* ButtonStart;
//创建退出按钮
UPROPERTY(meta = (BindWidget))
UButton* ButtonQuit;
virtual bool Initialize()override;
//函数开始按钮
UFUNCTION()
void Start();
//函数退出按钮
UFUNCTION()
void Quit();
//进度条实现
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = MyHealth)
float CurrentHealth = 100.f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = MyHealth)
float MaxHealth = 100.f;
//更新函数
void UpdataHealth();
};
UserWidget.cpp
#include "MyUserWidget.h"
bool UMyUserWidget::Initialize(){
if (!Super::Initialize()) {
return false;
}
ButtonStart->OnClicked.AddDynamic(this, &UMyUserWidget::Start);
ButtonQuit->OnClicked.AddDynamic(this, &UMyUserWidget::Quit);
return true;
}
void UMyUserWidget::Start(){
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("Start"));
UpdataHealth();
}
void UMyUserWidget::Quit(){
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("Quit"));
}
void UMyUserWidget::UpdataHealth(){
if (CurrentHealth <= 0) {
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Blue, TEXT("death"));
}
else {
CurrentHealth -= 10;
}
}
PlayerController.h
UCLASS()
class IBB_API AMyPlayerController : public APlayerController
{
GENERATED_BODY()
public:
//重写函数
virtual void BeginPlay()override;
};
PlayerController.cpp
#include "Blueprint/UserWidget.h"//用户控件组件
void AMyPlayerController::BeginPlay(){
Super::BeginPlay();
UClass* widgetClass = LoadClass<UUserWidget>(NULL, TEXT("/Script/UMGEditor.WidgetBlueprint'/Game/UMG_Widget.UMG_Widget_C'"));
UUserWidget* MyWidgetClass = nullptr;
MyWidgetClass = CreateWidget<UUserWidget>(GetWorld(), widgetClass);
MyWidgetClass->AddToViewport();
}