[CommonUI] Setting Options 창 나누기

김여울·2025년 12월 4일

내일배움캠프

목록 보기
127/139

UserWidget 블루프린트

WBP_GraphicsOptions
: WBP_OptionPanel 상속 받는 UserWidget 블루프린트 만들기


ENUM C++ 파일 만들기

  • UI 그래픽 옵션 구성을 위한 DataTable Row 구조체
  • Rotator에 표시할 텍스트 (DisplayStrings)와
  • 실제 적용할 값 (Quality / Resolution / DisplayMode / Brightness) 을 함께 관리한다
  • Brightness(WBP_Slider)는 BP에서 연결

LNCoreDataType.h

// 그래픽 품질 (하, 중, 상)
UENUM(BlueprintType)
enum class EGraphicQuality : uint8
{
	Low UMETA(DisplayName="Low"),
	Medium UMETA(DisplayName="Medium"),
	High UMETA(DisplayName="High")
};

// 스크린 모드 (전체 화면, 창 모드, 테두리 없는 창 모드)
UENUM(BlueprintType)
enum class EDisplayMode : uint8
{
	Fullscreen UMETA(DisplayName="Fullscreen"),
	Windowed UMETA(DisplayName="Windowed"),
	Borderless UMETA(DisplayName="Borderless")
};

// 보이스 입력 모드 (자동 감지, 눌러서 말하기)
UENUM(BlueprintType)
enum class EVoiceMode : uint8
{
	OpenMic UMETA(DisplayName="Open Mic"),
	Toggle UMETA(DisplayName="Toggle"),
	PushToTalk UMETA(DisplayName="Push To Talk")
};

// 언어 타입
UENUM(BlueprintType)
enum class ELanguageType : uint8
{
	Korean UMETA(DisplayName="Korean"),
	English UMETA(DisplayName="English")
};

구조체 만들기

S_GraphicsConfig.h

#pragma once

#include "CoreMinimal.h"
#include "Engine/DataTable.h"
#include "Data/Core/LNCoreDataType.h"
#include "S_GraphicsConfig.generated.h"

UENUM(BlueprintType)
enum class EGraphicsOptionType : uint8
{
	Quality,
	Resolution,
	DisplayMode,
	Brightness
};

USTRUCT(BlueprintType)
struct FS_GraphicsConfig : public FTableRowBase
{
	GENERATED_BODY()
	;

public:
	// 어떤 옵션인지
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	EGraphicsOptionType OptionType;

	// UI Rotator에 보여줄 텍스트들
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TArray<FText> DisplayStrings;

	// 실제 적용할 값들
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TArray<EGraphicQuality> Qualities;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TArray<FIntPoint> Resolutions;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TArray<EDisplayMode> DisplayModes;

	// Rotator 기본 선택 인덱스
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	int32 DefaultIndex = 0;
};

DataTable 만들기

DT_GraphicsOptions
: S_GraphicsConfig 코드 상속받는 데이터 테이블

만들었던 GraphicsOption 추가하기


InitializeOptions

  1. WBP_GraphicsOption의 부모클래스 WBP_OptionPanel에 함수 추가

  2. WBP_GraphicsOptions에 부모클래스에서 만들었던 함수 추가

  3. 데이터 테이블 변수 추가하기

  4. 만들었던 데이터테이블 할당하기

  5. Expose on Spawn ☑

    WBP_OptionCycle의 TextOptionName, DafaultSelectedIndex, OptionArray을 Expose on Spawn 체크하기


Expose on Spawn

📎 [UE5] 🐣 Expose on Spawn

  1. 설명
    1) 위젯·액터·오브젝트를 생성(Create/Spawn)할 때,
    해당 변수를 생성자 파라미터처럼 외부에서 직접 설정할 수 있게 해주는 옵션
  • Blueprint에서 Create Widget / Spawn Actor 노드를 사용할 때 해당 변수가 핀(Pin) 으로 노출됨

  • Expose to Spawn이 꺼져 있으면 생성 후에 Initialize()SetXXX() 함수로 추가로 값을 넣어야 함
    → 이 변수를 생성 시점에 외부에서 세팅할 수 있도록 핀으로 노출시켜주는 옵션
    → UI 위젯을 생성할 때 초기값을 바로 주입하고 싶을 때 필수 기능

  1. 사용 목적
    1) 위젯 생성 시 구성을 외부에서 결정하고 싶을 때
    • (예) OptionRotator를 생성할 때

      • Default Index
      • 옵션 목록
      • 초기 텍스트
      • 색 테마
      • 플레이어 데이터

      등을 바로 넣고 싶을 때

    2) 객체를 생성할 때 변수를 강제로 초기화해야 할 때
    • (예) Actor Spawn 시

      • Health
      • Team ID
      • Owner
      • WeaponType

      같은 정보


스크롤박스 안에 옵션 패널들마다 복제되는 거 없애기

WBP_OptionPanel의 TextPanelName을 스크롤박스에서 꺼내기


WBP_GraphicsOptions

패딩 추가하기

새로 GraphicsOptions 추가하고 기존 것들 대체하기


WBP_GraphicsOptions 노드



TextOptionPanelName 설정은 여기에서

0개의 댓글