Editor Utility Widget
UMG 기반의 에디터 도구 위젯으로 블루프린트만으로 강력한 에디터 확장을 만듭니다
Editor Utility Widget이란?
C++ 없이 블루프린트로 에디터 도구 만들기
Editor Utility Widget(EUW)은 UMG(Unreal Motion Graphics) 위젯 시스템을 활용하여 에디터에서 동작하는 도구 패널을 만드는 시스템입니다. 블루프린트로 완전한 에디터 도구를 제작할 수 있습니다.
| 특성 | Editor Utility Widget | C++ Slate 도구 |
|---|---|---|
| 언어 | 블루프린트 + UMG | C++ + Slate |
| 제작 속도 | 매우 빠름 | 느림 |
| 비주얼 디자인 | UMG Designer 지원 | 코드로만 구성 |
| 성능 | 보통 | 높음 |
| 도킹 | 에디터 탭으로 도킹 가능 | 에디터 탭으로 도킹 가능 |
| 배포 | 콘텐츠 에셋 | 모듈 코드 |
EUW의 C++ 베이스 클래스는 UEditorUtilityWidget입니다. UUserWidget을 상속하며 에디터 전용 기능이 추가되어 있습니다. Blutility 플러그인(기본 활성화)에 포함됩니다.
EUW 생성 및 기본 구성
단계별 Editor Utility Widget 제작 가이드
Step 1: 에셋 생성
콘텐츠 브라우저에서 우클릭 > Editor Utilities > Editor Utility Widget을 선택합니다.
Step 2: UMG 디자이너에서 UI 구성
생성된 에셋을 더블클릭하면 UMG Designer가 열립니다. 일반 UMG 위젯 제작과 동일한 방식으로 UI를 구성합니다.
- Button — 작업 실행 트리거
- Text Block — 상태 표시, 라벨
- Editable Text / Text Box — 사용자 입력
- Check Box — 옵션 토글
- Combo Box — 드롭다운 선택
- List View — 에셋/액터 목록 표시
- Progress Bar — 배치 작업 진행률
- Details View — UObject 프로퍼티 자동 노출
Step 3: 블루프린트 로직 작성
Graph 탭에서 버튼 클릭 이벤트, 커스텀 함수, 에디터 유틸리티 노드를 활용하여 도구 로직을 구현합니다.
Step 4: 위젯 실행
콘텐츠 브라우저에서 EUW 에셋을 우클릭 > Run Editor Utility Widget을 선택하면 도킹 가능한 탭으로 열립니다.
Editor Utility Widget은 에디터에서만 동작합니다. 패키징된 게임에는 포함되지 않으며, 게임 런타임에서 접근할 수 없습니다.
핵심 에디터 유틸리티 노드
EUW 블루프린트에서 사용하는 에디터 전용 기능
| 카테고리 | 노드/함수 | 기능 |
|---|---|---|
| 에셋 | Get Selected Assets |
콘텐츠 브라우저에서 선택된 에셋 목록 |
| 에셋 | Get All Assets of Class |
특정 클래스의 모든 에셋 검색 |
| 액터 | Get Selected Level Actors |
뷰포트에서 선택된 액터 목록 |
| 액터 | Get All Level Actors |
현재 레벨의 모든 액터 |
| 에디터 | Editor Utility Subsystem |
에디터 전반 유틸리티 접근 |
| 에디터 | Begin Transaction |
Undo/Redo 트랜잭션 시작 |
| 파일 | Open File Dialog |
파일 선택 다이얼로그 |
| 파일 | Save Asset |
에셋 저장 |
에셋 일괄 처리 예시 (블루프린트 의사 코드)
// 버튼 클릭 이벤트
OnButtonClicked:
// 1. 선택된 에셋 가져오기
SelectedAssets = GetSelectedAssets()
// 2. 트랜잭션 시작 (Undo 지원)
BeginTransaction("Batch Rename")
// 3. 각 에셋에 대해 처리
for each Asset in SelectedAssets:
OldName = Asset.GetName()
NewName = Prefix + OldName + Suffix
RenameAsset(Asset, NewName)
// 4. 트랜잭션 종료
EndTransaction()
// 5. 결과 표시
StatusText = Format("{0}개 에셋 이름 변경 완료",
SelectedAssets.Num)
C++에서 EUW 제어하기
코드에서 Editor Utility Widget을 프로그래밍 방식으로 열기
#include "EditorUtilitySubsystem.h"
#include "EditorUtilityWidgetBlueprint.h"
void OpenEditorUtilityWidget()
{
// 에셋 경로로 EUW 블루프린트 로드
UEditorUtilityWidgetBlueprint* WidgetBP =
LoadObject<UEditorUtilityWidgetBlueprint>(
nullptr,
TEXT("/Game/EditorTools/EUW_MyTool"));
if (WidgetBP)
{
// 에디터 유틸리티 서브시스템으로 위젯 열기
UEditorUtilitySubsystem* Subsystem =
GEditor->GetEditorSubsystem<
UEditorUtilitySubsystem>();
if (Subsystem)
{
Subsystem->SpawnAndRegisterTab(WidgetBP);
}
}
}
// 이미 열린 위젯 인스턴스 찾기
UEditorUtilitySubsystem* Subsystem =
GEditor->GetEditorSubsystem<UEditorUtilitySubsystem>();
if (Subsystem)
{
UEditorUtilityWidget* Widget =
Subsystem->FindUtilityWidgetFromBlueprint(WidgetBP);
if (Widget)
{
// 위젯 인스턴스에 접근 가능
}
}
프로젝트 설정의 Editor Startup Map과 init_unreal.py를 활용하면 에디터 시작 시 EUW를 자동으로 실행할 수 있습니다. Part 04에서 Python 스크립팅과 함께 다룹니다.
핵심 요약
- Editor Utility Widget은 블루프린트 + UMG로 에디터 도구를 빠르게 제작하는 가장 접근성 높은 방법입니다
- 콘텐츠 브라우저에서
Editor Utilities > Editor Utility Widget으로 생성하고,Run Editor Utility Widget으로 실행합니다 - GetSelectedAssets, GetSelectedLevelActors, BeginTransaction 등 에디터 전용 노드로 도구 로직을 구현합니다
- C++에서 UEditorUtilitySubsystem의
SpawnAndRegisterTab으로 프로그래밍 방식의 EUW 실행이 가능합니다 - EUW는 에디터 전용이며, 패키징된 빌드에는 포함되지 않습니다
도전 과제
배운 내용을 직접 실습해보세요
에디터에서 Editor Utility Widget 블루프린트를 생성하세요. 버튼과 텍스트를 배치하고, 버튼 클릭 시 현재 선택된 Actor의 이름과 위치를 텍스트로 표시하는 간단한 인스펙터 위젯을 만드세요. Run Editor Utility Widget으로 실행하세요.
Editor Utility Widget에서 EditorUtilityLibrary::GetSelectedAssets()로 선택된 에셋을 가져오고, 일괄 이름 변경(접두사/접미사 추가), 일괄 프로퍼티 수정 기능을 구현하세요. ListView로 에셋 목록을 표시하세요.
레벨의 품질을 검증하는 대시보드 Editor Utility Widget을 구현하세요. Lightmap 해상도 검사, 충돌 체크, LOD 설정 검증, 텍스처 크기 분석 등의 검증 규칙을 실행하고 결과를 리스트로 표시하며, 문제 Actor 클릭 시 뷰포트에서 포커스하는 기능을 포함하세요.