<aside> 📌
<aside> 💡 목차
</aside>
<aside>
AHUD 클래스를 상속하여 구현Widget Blueprint란?
Widget Blueprint 생성 경로
Content Browser에서 Contents 하위에 UI 폴더를 만들고, 그 하위에 또 Widget 폴더를 만듭니다.
Widget 폴더에서 우클릭하고 User Interface - Widget Blueprint를 선택하고 부모 클래스로 User Widget을 선택해줍니다. 그리고 WBP_HUD 라는 이름으로 생성합니다.

Widget Blueprint 열기
마우스로 드래그 앤 드롭하여 원하는 위치에 배치할 수 있습니다. Details 패널에서 해당 요소의 크기, 색상, 폰트, 정렬 방식 등을 원하는 대로 수정할 수 있습니다.
우선, Palette에서 Panel 중 Canvas Panel을 찾아서 클릭합니다. Canvas Panel은 모든 UI 요소를 포함할 수 있는 “큰 도화지” 같은 역할을 합니다. UI 요소들을 자유롭게 배치할 수 있는 가장 기본적인 레이아웃 패널이기도 합니다.
Canvas Panel을 드래그 앤 드랍하여 Designer Tab에 끌어다 놓습니다. 그러면 왼쪽 아래 Hierarchy 탭을 보면 Canvas Panel이 가장 루트로 생성된 것을 확인할 수 있습니다.

오른쪽 상단에 보면, Screen Size를 결정할 수 있는 부분이 있는데 여기서 가장 대중적인 화면 크기인 1920 x 1080 (16:9) 사이즈로 설정하기 위해서 21.5-24” monitor를 선택해줍니다.

다음으로 Palette에서 Common 리스트 중에서 Text를 선택 → Canvas Panel 위로 드래그 앤 드롭합니다. 각각 하나는 왼쪽과 오른쪽 양 여페 배치합니다. 저는 Size X는 300, Size Y는 100으로 설정하였습니다만, 위치나 크기는 여러분들이 원하는 위치에 놓기를 바랍니다.

폰트 스타일은 Details 창에서 수정할 수 있습니다.

텍스트는 언제든지 바뀔 수 있도록, 기본 예시로 “Score: 60”, “Level 1”, “Time: 60” 처럼 초기 값을 넣어 두세요. 이후 C++에서 점수나 시간이 바뀔 때마다 실시간 반영할 수 있습니다. 지금은 글씨가 화면상에 출력이 안될 수도 있으니, 일단 이렇게 컴파일하고 저장합니다.
.ttf나 .otf 폰트 파일을 선택하면, 언리얼 엔진 내로 임포트가 진행됩니다.<aside>
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/PlayerController.h"
#include "SpartaPlayerController.generated.h"
class UInputMappingContext;
class UInputAction;
UCLASS()
class SPARTAPROJECT_API ASpartaPlayerController : public APlayerController
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Input")
UInputMappingContext* SpartaInputMappingContext;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Input")
UInputAction* SpartaMoveAction;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Input")
UInputAction* SpartaJumpAction;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Input")
UInputAction* SpartaLookAction;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Input")
UInputAction* SpartaSprintAction;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Input")
UInputAction* SpartaPickUpAction;
// UMG 위젯 클래스를 에디터에서 할당받을 변수
**UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "UI")
TSubclassOf<UUserWidget> HUDWidgetClass;**
protected:
virtual void BeginPlay() override;
};
#include "SpartaPlayerController.h"
#include "EnhancedInputSubsystems.h"
#include "EnhancedInputComponent.h"
**#include "Blueprint/UserWidget.h"** // 헤더 추가
ASpartaPlayerController::ASpartaPlayerController()
: InputMappingContext(nullptr),
MoveAction(nullptr),
JumpAction(nullptr),
LookAction(nullptr),
SprintAction(nullptr)
{
}
void ASpartaPlayerController::BeginPlay()
{
Super::BeginPlay();
if (ULocalPlayer* LocalPlayer = GetLocalPlayer())
{
if (UEnhancedInputLocalPlayerSubsystem* Subsystem =
LocalPlayer->GetSubsystem<UEnhancedInputLocalPlayerSubsystem>())
{
if (InputMappingContext)
{
Subsystem->AddMappingContext(InputMappingContext, 0);
}
}
}
// HUD 위젯 생성 및 표시
**if (HUDWidgetClass)
{
UUserWidget* HUDWidget = CreateWidget<UUserWidget>(this, HUDWidgetClass);
if (HUDWidget)
{
HUDWidget->AddToViewport();
}
}**
}
SpartaPlayerController에 HUD Widget 표시 로직을 넣어줍니다. 우선 ASpartaPlayerController.h에 TSubclassOf<UUserWidget> 변수를 선언해 둡니다.partaPlayerController.cpp의 BeginPlay()에, EnhancedInput 설정 직후 HUD 생성 로직을 이어서 작성합니다.using UnrealBuildTool;
public class SpartaProject : ModuleRules
{
public SpartaProject(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
PublicDependencyModuleNames.AddRange(
new string[] {
"Core",
"CoreUObject",
"Engine",
"InputCore",
"EnhancedInput",
"UMG" // UMG 모듈 추가
}
);
PrivateDependencyModuleNames.AddRange(new string[] { });
}
}
CreateWidget이 작동하려면 UMG 모듈이 빌드 설정에 추가되어 있어야 합니다. SpartaProject.Build.cs 라는 코드를 열어줍니다. 그리고 아래와 같이 “UMG” 모듈을 추가해봅니다.빌드하고 언리얼 에디터 상에서 HUDWidgetClass에는 우리가 생성한 Widget Bluprint인 WBP_HUD를 할당해야 합니다. 게임 실행 전에 BP_SpartaPlayerController의 디폴트 블루프린트 혹은 게임 모드 설정에서 HUDWidgetClass에 WBP_HUD를 지정해주세요.

뷰포트 크기 설정
에디터 상단의 Play 드롭다운 메뉴를 클릭하고 Advanced Settings를 선택합니다.

게임 뷰포트 세팅을 HUD와 동일하게 1920x1080 사이즈로 수정해줍니다.

Play 드롭다운 메뉴에서 Selected Viewport 대신 New Editor Window를 선택합니다. 이 옵션은 플레이 중에 새 창에서 지정된 크기로 뷰포트를 띄웁니다.

플레이를 눌러보면 다음과 같이 우리가 만든 UI가 보이는 것을 확인할 수 있습니다. </aside>
<aside>
</aside>
<aside>
</aside>
Copyright ⓒ TeamSparta All rights reserved.