1. HUD class
: 화면에 그림을 그려주는 클래스
2. 멤버변수
무슨위젯을 그릴지 저장해야함 -> UserWidget을 가져야함
위젯, 위젯클래스 (구체적 대상은 BP에서 넣어주기위함)
위젯컨트롤러, 위젯컨트롤러 클래스 (구체적 대상은 BP에서 넣어주기위함)
3. 구현
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "AbilitySystemComponent.h"
#include "GameFramework/HUD.h"
#include "AuraHUD.generated.h"
class UAttributeSet;
class UAbilitySystemComponent;
class UOverlayWidgetController;
class UAuraUserWidget;
struct FWidgetControllerParams;
/**
*
*/
UCLASS()
class AURA_API AAuraHUD : public AHUD
{
GENERATED_BODY()
public:
UPROPERTY()
TObjectPtr<UAuraUserWidget> OverlayWidget;
protected:
virtual void BeginPlay() override;
private:
UPROPERTY(EditAnywhere)
TSubclassOf<UAuraUserWidget> OverlayWidgetClass;
//위젯생성 (OevelayWidgetClass는 BP에서 넣어준 구체적 대상이 들어감)
UPROPERTY()
TObjectPtr<UOverlayWidgetController> OverlayWidgetController;
UPROPERTY(EditAnywhere)
TSubclassOf<UOverlayWidgetController> OverlayWidgetControllerClass;
};
※ TSubClassOf => 자신과 자식들만 대입가능토록 제한!
TSubclassOf 는 UClass 유형 안전성을 제공하는 템플릿 클래스입니다. 예를 들어, 디자이너가 손상 유형을 지정할 수 있는 발사체 클래스를 생성한다고 가정해 보겠습니다. UClass 유형의 UPROPERTY를 생성하고 디자이너가 항상 UDamageType에서 파생된 클래스를 할당하기를 바랄 수도 있고, TSubclassOf 템플릿을 사용하여 선택을 강제할 수도 있습니다. 아래 샘플 코드는 차이점을 보여줍니다.
호환되지 않는 TSubclassOf 유형을 서로 할당하려고 하면 컴파일 오류가 발생합니다. 일반 UClass를 할당하려는 경우, 할당을 수행할 수 있는지 확인하기 위해 런타임 검사를 수행합니다. 런타임 검사에 실패하면 결과 값은 nullptr입니다.
/** type of damage */
UPROPERTY(EditDefaultsOnly, Category=Damage)
UClass* DamageType;
//DamageType에는 모든 UClass가 들어갈수있음!
vs
/** type of damage */
UPROPERTY(EditDefaultsOnly, Category=Damage)
TSubclassOf<UDamageType> DamageType;
//DamageType에는 UDamageType과 그 자식들만 들어갈수있음!
4. 비긴플레이
위젯을만들고, 뷰포트에 추가
무슨위젯이 대상인지는 BP에서 넣어줄것임!
5. 게임모드 HUD 바꾸기
끝.
'UE5 > UI' 카테고리의 다른 글
[UE5] UI 체력포션먹으면 마나25감소 구현 (0) | 2024.05.28 |
---|---|
[UE5] 체력변화가생길시 즉시 업데이트 구현 // 바인딩 버그?(auto vs 직접호출), 의존성점검(뷰->컨트롤러->모델) (0) | 2024.05.28 |
[UE5] 체력통에 실제값을 연결하는 방법 // .cpp.h키는법 (0) | 2024.05.28 |
[UE5] UI 체력통 만들기, 오버레이 (0) | 2024.05.27 |
[UE5] UI 에서 데이터 얻어오는법 (0) | 2024.05.27 |