언리얼 5

230918 위젯

슬뷔 2023. 9. 18. 11:14

위젯

유저인터페이스 -> 위젯 블루프린트

 

MainHUD 생성

스케일 박스 -> 크기박스 -> 캠버스 패널 ( 자식이 여러 개 들어갈 수 있다 )

Beginplay -> 위젯 생성 -> MainHUD 선택 -> Add to ViewPort 

 

MainHUD 에 넣을 PlayerInfo 생성

스케일 박스 -> 크기박스 -> 캠버스 패널 -> 버튼 1개 생성

크기박스 -> ( 화면크기  옆에 custom ) 800 * 300

PlayerImg  캠버스 패널 -> 이미지 ( 크기 300 * 300 )

앵커 설정

프로그래스바

 

 

userwidget 을 상속 받은 MainHUD_Base.h / MainHUD_Base.cpp 생성 -> MainHUD 가 상속 받음

모듈추가 "UMG" 

public class Unreal_3th : ModuleRules
{
	public Unreal_3th(ReadOnlyTargetRules Target) : base(Target)
	{
		PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
	
		PublicDependencyModuleNames.AddRange(new string[] { 
			, "UMG"
		});
}
#include "../Header/global.h"
#include "Blueprint/UserWidget.h"

#include "CoreMinimal.h"
#include "PlayerInfo_Base.h"
#include "MainHUD_Base.generated.h"

UCLASS()
class UNREAL_3TH_API UMainHUD_Base : public UUserWidget
{
	GENERATED_BODY()

private:
	UPlayerInfo_Base* m_PlayerInfo;




public:
	void SetPlayerHPRatio(float _Ratio);

public:
	virtual void NativeConstruct() override;
	virtual void NativeTick(const FGeometry& _geo, float _DT) override;
};
#include "MainHUD_Base.h"

void UMainHUD_Base::NativeConstruct()
{
	Super::NativeConstruct();

	m_PlayerInfo = Cast<UPlayerInfo_Base>(GetWidgetFromName(FName("PlayerInfo")));
	if (!IsValid(m_PlayerInfo))
	{
		LOG(LogTemp, Error, TEXT("PlayerInfo 못 찾음"));
	}
}

void UMainHUD_Base::NativeTick(const FGeometry& _geo, float _DT)
{
	Super::NativeTick(_geo, _DT);


}

void UMainHUD_Base::SetPlayerHPRatio(float _Ratio)
{
	m_PlayerInfo->SetHPBarRatio(_Ratio);
}

userwidget 을 상속 받은 PlayerInfo_Base.h / PlayerInfo.cpp 생성 -> PlayerInfo 가 상속 받음

#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "PlayerInfo_Base.generated.h"

UCLASS()
class UNREAL_3TH_API UPlayerInfo_Base : public UUserWidget
{
	GENERATED_BODY()
private:
	class UImage* m_Image;
	class UProgressBar* m_HPBar;
	class UProgressBar* m_MPBar;


public:
	void SetHPBarRatio(float _ratio);


public:
	virtual void NativeConstruct() override;
	virtual void NativeTick(const FGeometry& _geo, float _DT) override;
};
#include "PlayerInfo_Base.h"

#include "Components/Image.h"
#include "Components/ProgressBar.h"


void UPlayerInfo_Base::NativeConstruct()
{
	Super::NativeConstruct();

	m_Image = Cast<UImage>(GetWidgetFromName(FName("PlayerImg")));
	m_HPBar = Cast<UProgressBar>(GetWidgetFromName(FName("HPBar")));
	m_MPBar = Cast<UProgressBar>(GetWidgetFromName(FName("MPBar")));
}

void UPlayerInfo_Base::NativeTick(const FGeometry& _geo, float _DT)
{
	Super::NativeTick(_geo, _DT);

}

void UPlayerInfo_Base::SetHPBarRatio(float _ratio)
{
	m_HPBar->SetPercent(_ratio);
}

AUnreal_3thGameModeBase 에 GetMainHUD 생성

class UNREAL_3TH_API AUnreal_3thGameModeBase : public AGameModeBase
{
	GENERATED_BODY()

private:
	TSubclassOf<UUserWidget>	m_MainHudClass;
	class UMainHUD_Base* m_MainHUD;

public:
	class UMainHUD_Base* GetMainHUD() { return m_MainHUD; }
}

Character_Base -> BeginPlayer 에 HUD 설정

void ACharacter_Base::BeginPlay()
{
	Super::BeginPlay();

	// HUD 체력 설정
	AUnreal_3thGameModeBase* GameMode = Cast<AUnreal_3thGameModeBase>(UGameplayStatics::GetGameMode(GetWorld()));
	GameMode->GetMainHUD()->SetPlayerHPRatio(0.1f);

}

 

결과물

 


StartMap 생성

gamemodebase 상속 -> StartGameMode