위젯
유저인터페이스 -> 위젯 블루프린트
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


'언리얼 5' 카테고리의 다른 글
| 230920 몬스터 체력바 / 인벤토리 (0) | 2023.09.20 | 
|---|---|
| 230919 StartMap - StartGameMode / StarHUD_Base | NewMap - SceneCapture2DComponent (0) | 2023.09.19 | 
| 230915 몬스터 AI - Trace, Attack ( 스스로 ) (0) | 2023.09.15 | 
| 230914 몬스터 AI - Move (0) | 2023.09.15 | 
| 230913 enum 찾기 / 카메라 진동 / 몬스터 인공지능 (0) | 2023.09.13 |