<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.