PART 3 · 강의 2/3

Blutility 활용

Editor Utility Blueprint, ActorActionUtility, AssetActionUtility로 에디터 워크플로우를 자동화합니다

01

Blutility 시스템 개요

Editor Utility Blueprint의 종류와 용도

Blutility는 "Blueprint Utility"의 줄임말로, 에디터에서 실행되는 블루프린트 유틸리티를 총칭합니다. UE5에서는 세 가지 주요 Blutility 타입이 있습니다.

타입 베이스 클래스 실행 방식 대상
Editor Utility Blueprint UEditorUtilityObject 우클릭 > Run 범용 에디터 스크립트
Actor Action Utility UActorActionUtility 액터 우클릭 메뉴 선택된 액터에 대한 작업
Asset Action Utility UAssetActionUtility 에셋 우클릭 메뉴 선택된 에셋에 대한 작업
CallInEditor

Blutility 함수에 CallInEditor 메타데이터를 지정하면 디테일 패널에 "Call In Editor" 버튼이 표시됩니다. 함수를 호출하기 위해 별도의 UI가 필요 없습니다.

02

Actor Action Utility

선택된 액터에 대한 일괄 처리 도구

C++ 베이스 클래스 확장

UMyActorUtility.h #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(); };
UMyActorUtility.cpp #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 필터

GetSupportedClass()를 오버라이드하면 특정 클래스의 액터에서만 우클릭 메뉴에 유틸리티 함수가 표시됩니다. 기본값은 AActor로 모든 액터에 표시됩니다.

03

Asset Action Utility

콘텐츠 브라우저 에셋에 대한 배치 처리

UMyAssetUtility.h 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(); };
UMyAssetUtility.cpp (발췌) 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_ 접두사를 자동 추가하는 유틸리티를 만들면 팀 전체의 에셋 관리가 편리해집니다.

04

블루프린트 전용 Blutility

C++ 없이 블루프린트만으로 유틸리티 구현

블루프린트 Blutility 생성 방법

  1. 콘텐츠 브라우저 > 우클릭 > Editor Utilities > Editor Utility Blueprint
  2. 부모 클래스로 ActorActionUtility 또는 AssetActionUtility 선택
  3. 블루프린트를 열고 커스텀 함수 추가
  4. 함수의 Call In Editor 옵션을 체크
유용한 블루프린트 에디터 함수 라이브러리
라이브러리 주요 함수
UEditorUtilityLibrary GetSelectedAssets, GetSelectedBlueprintClasses, RenameAsset
UEditorAssetLibrary DoesAssetExist, DuplicateAsset, DeleteAsset, LoadAsset
UEditorLevelLibrary GetSelectedLevelActors, SpawnActorFromClass, SetActorLabel
UEditorDialogLibrary ShowMessage, ShowSuppressableWarning
SUMMARY

핵심 요약

  • Blutility는 Editor Utility Blueprint, Actor Action Utility, Asset Action Utility 세 가지 타입이 있으며, 각각 범용/액터/에셋 대상 도구를 구현합니다
  • CallInEditor 메타데이터를 함수에 지정하면 디테일 패널에 실행 버튼이 자동 생성됩니다
  • GetSupportedClass를 오버라이드하여 특정 클래스에만 유틸리티가 표시되도록 필터링합니다
  • UEditorUtilityLibrary, UEditorAssetLibrary, UEditorLevelLibrary가 핵심 유틸리티 함수 라이브러리입니다
  • C++ 또는 순수 블루프린트 모두로 구현 가능하며, 네이밍 컨벤션 적용, LOD 일괄 설정 등 반복 작업 자동화에 적합합니다
PRACTICE

도전 과제

배운 내용을 직접 실습해보세요

실습 1: Actor Action Utility 생성

UActorActionUtility를 상속받는 블루프린트를 만들고, CallInEditor 함수로 '랜덤 머티리얼 적용' 기능을 구현하세요. 레벨에서 Actor를 선택하고 우클릭 > Scripted Actions 메뉴에서 함수를 실행하여 선택된 Actor에 랜덤 색상 머티리얼을 적용하세요.

실습 2: Asset Action Utility 구현

UAssetActionUtility를 상속받아 콘텐츠 브라우저에서 에셋을 우클릭했을 때 실행할 수 있는 스크립트를 만드세요. 선택된 StaticMesh의 LOD 수, 삼각형 수, 머티리얼 슬롯 수를 출력하는 '에셋 정보 보기' 기능을 구현하세요.

심화 과제: 프로젝트 표준화 Blutility 도구 세트

팀 프로젝트의 에셋 표준을 자동으로 검증하고 수정하는 Blutility 도구 세트를 구현하세요. 네이밍 컨벤션 검사(SM_, T_, M_ 접두사), 텍스처 크기 검증(POT 확인), 머티리얼 인스턴스 파라미터 검증 등을 일괄 처리하세요.