AHUD和UUserWidget的使用【UE4】【C++】

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值