Blutility 활용
Editor Utility Blueprint, ActorActionUtility, AssetActionUtility로 에디터 워크플로우를 자동화합니다
Blutility 시스템 개요
Editor Utility Blueprint의 종류와 용도
Blutility는 "Blueprint Utility"의 줄임말로, 에디터에서 실행되는 블루프린트 유틸리티를 총칭합니다. UE5에서는 세 가지 주요 Blutility 타입이 있습니다.
| 타입 | 베이스 클래스 | 실행 방식 | 대상 |
|---|---|---|---|
| Editor Utility Blueprint | UEditorUtilityObject |
우클릭 > Run | 범용 에디터 스크립트 |
| Actor Action Utility | UActorActionUtility |
액터 우클릭 메뉴 | 선택된 액터에 대한 작업 |
| Asset Action Utility | UAssetActionUtility |
에셋 우클릭 메뉴 | 선택된 에셋에 대한 작업 |
Blutility 함수에 CallInEditor 메타데이터를 지정하면 디테일 패널에 "Call In Editor" 버튼이 표시됩니다. 함수를 호출하기 위해 별도의 UI가 필요 없습니다.
Actor Action Utility
선택된 액터에 대한 일괄 처리 도구
C++ 베이스 클래스 확장
#pragma once
#include "CoreMinimal.h"
#include "ActorActionUtility.h"
#include "UMyActorUtility.generated.h"
UCLASS()
class UMyActorUtility : public UActorActionUtility
{
GENERATED_BODY()
public:
// 지원하는 액터 클래스 필터
virtual UClass* GetSupportedClass() const override
{
return AStaticMeshActor::StaticClass();
}
// CallInEditor 함수 - 디테일 패널에 버튼 표시
UFUNCTION(CallInEditor, Category = "My Tools")
void AlignToFloor();
UFUNCTION(CallInEditor, Category = "My Tools")
void RandomizeRotation();
UFUNCTION(CallInEditor, Category = "My Tools")
void SetMobilityToStatic();
};
#include "UMyActorUtility.h"
#include "Engine/StaticMeshActor.h"
void UMyActorUtility::AlignToFloor()
{
// 선택된 액터를 바닥에 정렬
TArray<AActor*> SelectedActors;
GEditor->GetSelectedActors()->GetSelectedObjects(
SelectedActors);
for (AActor* Actor : SelectedActors)
{
if (!Actor) continue;
FHitResult Hit;
FVector Start = Actor->GetActorLocation();
FVector End = Start - FVector(0, 0, 10000);
if (Actor->GetWorld()->LineTraceSingleByChannel(
Hit, Start, End, ECC_WorldStatic))
{
Actor->SetActorLocation(Hit.Location);
}
}
}
void UMyActorUtility::RandomizeRotation()
{
TArray<AActor*> SelectedActors;
GEditor->GetSelectedActors()->GetSelectedObjects(
SelectedActors);
for (AActor* Actor : SelectedActors)
{
if (!Actor) continue;
FRotator RandomRot(
0,
FMath::RandRange(0.0f, 360.0f),
0);
Actor->SetActorRotation(RandomRot);
}
}
GetSupportedClass()를 오버라이드하면 특정 클래스의 액터에서만 우클릭 메뉴에 유틸리티 함수가 표시됩니다. 기본값은 AActor로 모든 액터에 표시됩니다.
Asset Action Utility
콘텐츠 브라우저 에셋에 대한 배치 처리
UCLASS()
class UMyAssetUtility : public UAssetActionUtility
{
GENERATED_BODY()
public:
virtual UClass* GetSupportedClass() const override
{
return UStaticMesh::StaticClass();
}
UFUNCTION(CallInEditor, Category = "Mesh Tools")
void SetupCollision();
UFUNCTION(CallInEditor, Category = "Mesh Tools")
void BatchSetLODSettings();
UFUNCTION(CallInEditor, Category = "Naming")
void AddPrefix();
};
void UMyAssetUtility::AddPrefix()
{
TArray<UObject*> SelectedAssets =
GetSelectedAssetsOfClass(UStaticMesh::StaticClass());
for (UObject* Asset : SelectedAssets)
{
FString OldName = Asset->GetName();
if (!OldName.StartsWith(TEXT("SM_")))
{
FString NewName = FString::Printf(
TEXT("SM_%s"), *OldName);
UEditorUtilityLibrary::RenameAsset(
Asset, NewName);
}
}
}
Asset Action Utility의 대표적 활용은 네이밍 컨벤션 적용입니다. Static Mesh에는 SM_, Material에는 M_, Texture에는 T_ 접두사를 자동 추가하는 유틸리티를 만들면 팀 전체의 에셋 관리가 편리해집니다.
블루프린트 전용 Blutility
C++ 없이 블루프린트만으로 유틸리티 구현
블루프린트 Blutility 생성 방법
- 콘텐츠 브라우저 >
우클릭 > Editor Utilities > Editor Utility Blueprint - 부모 클래스로
ActorActionUtility또는AssetActionUtility선택 - 블루프린트를 열고 커스텀 함수 추가
- 함수의 Call In Editor 옵션을 체크
| 라이브러리 | 주요 함수 |
|---|---|
UEditorUtilityLibrary |
GetSelectedAssets, GetSelectedBlueprintClasses, RenameAsset |
UEditorAssetLibrary |
DoesAssetExist, DuplicateAsset, DeleteAsset, LoadAsset |
UEditorLevelLibrary |
GetSelectedLevelActors, SpawnActorFromClass, SetActorLabel |
UEditorDialogLibrary |
ShowMessage, ShowSuppressableWarning |
핵심 요약
- Blutility는 Editor Utility Blueprint, Actor Action Utility, Asset Action Utility 세 가지 타입이 있으며, 각각 범용/액터/에셋 대상 도구를 구현합니다
- CallInEditor 메타데이터를 함수에 지정하면 디테일 패널에 실행 버튼이 자동 생성됩니다
- GetSupportedClass를 오버라이드하여 특정 클래스에만 유틸리티가 표시되도록 필터링합니다
- UEditorUtilityLibrary, UEditorAssetLibrary, UEditorLevelLibrary가 핵심 유틸리티 함수 라이브러리입니다
- C++ 또는 순수 블루프린트 모두로 구현 가능하며, 네이밍 컨벤션 적용, LOD 일괄 설정 등 반복 작업 자동화에 적합합니다
도전 과제
배운 내용을 직접 실습해보세요
UActorActionUtility를 상속받는 블루프린트를 만들고, CallInEditor 함수로 '랜덤 머티리얼 적용' 기능을 구현하세요. 레벨에서 Actor를 선택하고 우클릭 > Scripted Actions 메뉴에서 함수를 실행하여 선택된 Actor에 랜덤 색상 머티리얼을 적용하세요.
UAssetActionUtility를 상속받아 콘텐츠 브라우저에서 에셋을 우클릭했을 때 실행할 수 있는 스크립트를 만드세요. 선택된 StaticMesh의 LOD 수, 삼각형 수, 머티리얼 슬롯 수를 출력하는 '에셋 정보 보기' 기능을 구현하세요.
팀 프로젝트의 에셋 표준을 자동으로 검증하고 수정하는 Blutility 도구 세트를 구현하세요. 네이밍 컨벤션 검사(SM_, T_, M_ 접두사), 텍스처 크기 검증(POT 확인), 머티리얼 인스턴스 파라미터 검증 등을 일괄 처리하세요.