1、创建继承自AHUD名为InGameHUD的C++ class。
.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/HUD.h"
#include "Components/WidgetComponent.h"
#include "ComboWidget.h"
#include "InGameHUD.generated.h"
/**
*
*/
UCLASS()
class UITEST_API AInGameHUD : public AHUD
{
GENERATED_BODY()
public:
AInGameHUD();
virtual void DrawHUD()override;
virtual void BeginPlay()override;
virtual void Tick(float DeltaSeconds)override;
UFUNCTION()
void UpdateComboCount(int32 Value);
UFUNCTION()
void ResetCombo();
UPROPERTY(EditDefaultsOnly, Category = "Widgets")
TSubclassOf<UUserWidget> ComboWidgetClass;
private:
UComboWidget* ComboWidget;
};
.cpp
// Fill out your copyright notice in the Description page of Project Settings.
#include "InGameHUD.h"
AInGameHUD::AInGameHUD()
{
}
void AInGameHUD::BeginPlay()
{
Super::BeginPlay();
if (ComboWidgetClass)
{
ComboWidget = CreateWidget<UComboWidget>(GetWorld(), ComboWidgetClass);
if (ComboWidget)
{
ComboWidget->AddToViewport();
}
}
}
void AInGameHUD::Tick(float DeltaSeconds)
{
Super::Tick(DeltaSeconds);
}
void AInGameHUD::DrawHUD()
{
Super::DrawHUD();
}
void AInGameHUD::UpdateComboCount(int32 Value)
{
if (ComboWidget)
{
ComboWidget->UpdateComboCount(Value);
}
}
void AInGameHUD::ResetCombo()
{
if (ComboWidget)
{
ComboWidget->ResetCombo();
}
}
2、创建继承自UUserWidget名为ComboWidget的C++ class。
.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "Runtime/UMG/Public/UMG.h"
#include "ComboWidget.generated.h"
/**
*
*/
UCLASS()
class UITEST_API UComboWidget : public UUserWidget
{
GENERATED_BODY()
public:
UComboWidget(const FObjectInitializer& ObjectInitializer);
virtual void NativeConstruct()override;
void UpdateComboCount(int32 Value);
void ResetCombo();
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (BindWidget))
class UTextBlock* TXTCombo;
};
.cpp
// Fill out your copyright notice in the Description page of Project Settings.
#include "ComboWidget.h"
UComboWidget::UComboWidget(const FObjectInitializer& ObjectInitializer):Super(ObjectInitializer)
{
}
void UComboWidget::NativeConstruct()
{
Super::NativeConstruct();
}
void UComboWidget::UpdateComboCount(int32 Value)
{
if (TXTCombo && Value >1)
{
if (TXTCombo->Visibility == ESlateVisibility::Hidden)
{
TXTCombo->SetVisibility(ESlateVisibility::Visible);
}
TXTCombo->SetText(FText::FromString(FString::FromInt(Value) + "x Combo"));
}
}
void UComboWidget::ResetCombo()
{
if (TXTCombo)
{
TXTCombo->SetVisibility(ESlateVisibility::Hidden);
}
}
3、创建继承自InGameHUD名为BP_InGameHUD的蓝图。
打开蓝图并编辑。
4、创建继承ComboWidget名为BP_ComboWidget的蓝图。
编辑蓝图
5、创建继承自ThirdPersonGameMode名为BP_GameMode蓝图
编辑蓝图
6、设置World Settings