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