언리얼 엔진/언리얼 엔진 커스텀 에디터

Content Browser 확장 - 1) 폴더에 저장된 사용하지 않는 애셋 삭제

monstro 2026. 1. 25. 17:40
728x90
반응형

- 개요

Content Browser의 기능을 확장하여 폴더를 선택하고 우클릭하여 사용하지 않는 애셋을 삭제하는 기능을 추가한다

절차는 다음과 같다

  • 1) Content Browser에 관한 기능을 포함하는 ContentBrowser 모듈 로드
  • 2) 로드한 모듈에 포함된 PathViewContextMenuExtenders 멤버변수에 접근
    • 해당 멤버변수는 Content Browser의 기능에 대한 델리게이트를 모아놓은 TArray
  • 3) 새로운 델리게이트를 생성하고 해당 멤버변수에 저장
  • 4) 생성한 델리게이트에 원하는 함수를 바인드

 

 

Editor Preference - Display UI Extension Points 옵션을 설정하여

에디터에 포함된 UI의 이름이나 위치를 확인할 수 있다

해당 옵션을 설정하여 추가한 기능의 이름과 위치를 확인하도록 구성한다

 

- C++ 사이드

1) CoreManager.build.cs 파일

 

ContentBrowser 모듈을 추가하여 관련된 함수나 변수에 접근하여 사용할 수 있도록 설정한다

 

2) CoreManager 플러그인 - DebugHeader 클래스

 

DebugHeader 클래스에 namespace를 추가하고 멤버함수들에 static 키워드를 사용하여

함수의 소속을 명확히 설정하고 객체 생성없이 함수를 즉시 호출할 수 있도록 설정한다

 

3) CoreManager 플러그인 - QuickAssetActions 클래스

수정 예시

 

기존에 DebugHeader의 함수를 호출하는 코드를 위와 같이 namespace를 붙여서 호출하도록 수정한다

 

4) CoreManager 플러그인 - CoreManager 클래스

 

CoreManager 모듈 클래스를 위와 같이 수정한다

함수는 총 5개로 구성되어 있으며 각각 다음과 같다

  • InitContentBrowserMenuExtention 함수 : 최초로 호출되어 Content Browser를 확장하는 함수
  • CustomContentBrowserMenuExtender 함수 : 확장되어 추가된 Menu Entry의 위치를 설정하는 함수
  • AddContentBrowserMenuEntry 함수 : 추가된 Menu Entry의 세부 설정을 처리하는 함수
  • OnDeleteUnsuedAssetButtonClicked 함수 : 처리되는 세부 설정에서 기능을 수행하는 함수
    • FixUpRedirectors 함수 : 기능을 수행하기 이전에 저장된 애셋들의 리디렉터를 수정하는 함수

 

FolderPathsSelected 멤버변수는 지정한 폴더의 경로를 저장하는 용도로 사용한다

 

 

StatrupModule 함수에서 InitContentBrowserMenuExtention 함수를 호출하도록 설정한다

 

 

InitContentBrowserMenuExtention 함수의 로직은 위와 같다

  • ContentBrowser 모듈을 불러와 저장
  • 저장한 모듈로부터 PathViewContextMenuExtenders 멤버변수에 접근
  • CustomContentBrowserMenuExtender 함수가 바인드된 델리게이트를 추가

 

 

AddContentBrowserMenuEntry 함수의 로직은 위와 같다

  • UI를 확장하기 위한 Extender 객체를 생성
  • 생성한 Extender 객체를 설정 : 확장 지점 + 삽입 위치 + 단축키 및 명령 + 실제 UI가 그려지면서 호출할 델리게이트
  • 이후 선택한 폴더의 경로를 멤버변수에 저장하고 객체를 반환

 

 

AddContentBrowserMenuEntry 함수의 로직은 위와 같다

  • 기능의 이름 + 기능의 툴팁 + 기능의 아이콘 + 해당 기능을 눌러서 호출할 델리게이트를 설정

 

 

OnDeleteUnsuedAssetButtonClicked 함수의 로직은 위와 같다

  • FixUpRedirectors 함수를 호출하여 선택한 폴더의 애셋들의 리디렉터를 정리
  • 선택한 폴더의 애셋들을 순회하면서 다음의 로직을 진행
    • FindPackageReferencersForAsset 함수를 호출하여 해당 애셋이 사용되는지 확인
    • 사용하지 않는다면 저장
  • DeleteAssets 함수를 호출하여 저장된 사용하지 않는 애셋들을 제거

 

 

FixUpRedirectors 함수의 로직은 위와 같다

  • AssetRegistry 모듈을 불러와 GetAssets 함수를 호출하여 폴더안의 애셋들을 불러옴
  • AssetTools 모듈을 불러와 FixupReference 함수를 호출하여 해당 애셋들의 리디렉터를 수정

 

- 최종 실행 결과

CoreManager 플러그인의 Contents - NewFolder 안의 NewBlueprint1 블루프린트

 

메인 모듈의 Contents - Blueprints 안의 NewBlueprint 블루프린트

 

위 2개의 블루프린트는 현재 레벨에 배치되어 사용중이다

 

728x90
반응형