언리얼 엔진에 외부 폰트를 임포트하고 C++ 코드에서 FSlateFontInfo 구조체의 값을 지정해 폰트를 변경해보았다.
0. 외부 폰트를 사용하는 경우 .ttf / .otf 파일을 콘텐츠 브라우저에 드래그 앤 드롭하여 Font Face 에셋으로 추가한다. 단 원래 글꼴 파일이 프로젝트 폴더 내에 위치시키고 Font Face 에셋 내 파일 경로 또한 프로젝트 내의 글꼴파일을 가리키고 있는지 확인한다.
1. .콘텐츠 브라우저에서 우클릭 후 UFont 에셋을 생성했다.
2. 생성된 에셋을 더블클릭해 편집화면으로 들어간 후 + 클릭하여 아래와 같이 드롭다운 메뉴에서 해당 오브젝트와 연결될 Font Face 를 선택한다.
화면에 나온 것처럼 + 버튼으로 여러가지 글꼴을 하나의 Composite Font 에 추가하여 활용할 수 있다.
3. 위젯 클래스 C++ 코드 내에서 LoadObject<UObject> 함수로 폰트 오브젝트를 로드한다.
UItemNotificationWidget::UItemNotificationWidget(const FObjectInitializer& ObjectInitializer)
: UUserWidget(ObjectInitializer)
{
//...
// LoadObject<UObject> 로 에디터에서 생성한 폰트 오브젝트 로드
RobotoItalic = LoadObject<UObject>(this, TEXT("/Game/UI/Fonts/Font_RobotoItalic.Font_RobotoItalic"));
}
4. 위에서 로드한 폰트 오브젝트로 FSlateFontInfo 구조체를 만든 후 UTextBlock 의 SetFont 함수에 인자로 넘긴다.
if (RobotoItalic)
{
ItemNotificationTitle->SetFont(FSlateFontInfo(
RobotoItalic, 24.f, NAME_None, FFontOutlineSettings(10.f, FLinearColor(1.f, 1.f, 1.f, 0.f))));
}
* FSlateFontInfo 의 여러가지 생성자 함수 중 아래와 같은 생성자를 활용했다.
FSlateFontInfo::FSlateFontInfo(
const UObject* InFontObject,
const float InSize,
const FName& InTypefaceFontName,
const FFontOutlineSettings& InOutlineSettings )
InTypefaceFontName 의 경우 특정 Typeface
5. 폰트 아웃라인에 에디터에서 머티리얼을 넣었기에 위와 같이 컬러의 alpha 값이 0으로 지정된 FFontOutlineSettings 를 만들어 인자로 넘겼다.
* FFontOutlineSettings 의 생성자
FFontOutlineSettings(int32 InOutlineSize, FLinearColor InColor = FLinearColor::Black)
: OutlineSize(InOutlineSize)
, bMiteredCorners(false)
, bSeparateFillAlpha(false)
, bApplyOutlineToDropShadows(false)
, OutlineMaterial(nullptr)
, OutlineColor(InColor)
{}
6. 아웃라인 머티리얼의 경우 아래와 같은 SetFontOutlineMaterial 함수로 지정할 수 있다.
// 생성자에서 ConstructorHelpers::FObjectFinder 활용해 머티리얼 가져오기
ConstructorHelpers::FObjectFinder<UMaterialInstance> PurpleGlowMaterialFinder(
TEXT("/Game/UI/Materials/MI_HUDGlowOutline_Purple.MI_HUDGlowOutline_Purple"));
if (PurpleGlowMaterialFinder.Succeeded())
{
PurpleGlowMaterial = PurpleGlowMaterialFinder.Object;
}
//...
// SetFontOutlineMaterial 함수 활용해 머티리얼 지정하기
if (PurpleGlowMaterial)
{
ItemNotificationTitle->SetFontOutlineMaterial(Cast<UMaterialInterface>(PurpleGlowMaterial));
}
* UMaterialInterface 은 말그대로 material 클래스들이 상속하는 인터페이스 클래스이다.
C++ 코드로 지정하는 방법을 알고 싶어서 이렇게 해보았지만, 에디터에서 클릭 몇 번으로 지정하는 것이 더 간편하다.
물론 폰트나 머티리얼의 로드/언로드 시점을 특정하고자 하는 경우 위와 같이 코드가 필요할 것이다.
'언리얼_엔진_게임개발_공부 > 프로젝트' 카테고리의 다른 글
[슈터게임] 평화롭고 건강한 우리팀의 눈물겨운 피드백 공유회 (KPT회고) (0) | 2025.03.07 |
---|---|
[슈터게임] 6. DataTable 활용한 상점 구현 (0) | 2025.03.04 |
[슈터게임] 4. UUserWidget 상속 / UWidgetTree::ConstrctWidget / BlueprintImplementableEvent 오버라이드 (0) | 2025.02.24 |
[슈터게임] 3. HUD 위젯의 이미지 교체하기 / SetBrush... (0) | 2025.02.22 |
[슈터게임] 2. UMG UUserWidget 고마운 기능들 (0) | 2025.02.20 |