우리가 에디터의 어떠한 에셋에 대해서 '특정 작업'을 하려면 EditorAssetLibrary와 EditorUtilityLibrary의 도움을 받을 수 있다.
예를 들어, 우리가 클릭한 어떠한 에셋을 가져오려면
UEditorUtilityLibrary::GetSelectedAssets();
를 사용하면 된다.
이를 통해, 사용이 되지 않는 에셋에 대해서 삭제도 진행할 수 있다.
void UQuickAssetAction::RemoveUnusedAssets()
{
TArray<FAssetData> SelectedAssetsData = UEditorUtilityLibrary::GetSelectedAssetData();
TArray<FAssetData> UnusedAssetsData;
//FixUpRedirectors();
for (const FAssetData& SelectedAsset : SelectedAssetsData)
{
TArray<FString> AssetReferencers = UEditorAssetLibrary::FindPackageReferencersForAsset(SelectedAsset.ObjectPath.ToString());
if (AssetReferencers.Num() == 0)
{
UnusedAssetsData.Add(SelectedAsset);
}
}
if (UnusedAssetsData.Num() == 0)
{
ShowMessageDialog(EAppMsgType::Ok, TEXT("No unused asset found among selected assets"), false);
return;
}
const int32 NumOfAssetsDeleted = ObjectTools::DeleteAssets(UnusedAssetsData);
if (NumOfAssetsDeleted == 0) return;
ShowNotifyInfo(TEXT("Succesfully deleted ") + FString::FromInt(NumOfAssetsDeleted) + TEXT(" unused Assets"));
}
이를 사용하면 Level에 배치되지 않았거나 reference가 없는 '클릭된' 모든 오브젝트를 삭제한다.
그냥 삭제하기에는 알림 기능이 없으므로, Editor의 힘을 빌려 ObjectTool에서 특정 알림을 낼 수 있다.
실제로 이를 통해서 사용되지 않는 에셋 삭제를 진행하면, 다음과 같이 팝업창이 발생한다.
'UnrealEngine > Editor' 카테고리의 다른 글
[Unreal Editor] 4. Custom Tab (0) | 2024.01.16 |
---|---|
[Unreal Editor] 2. Asset Action Utility (1) | 2023.12.26 |
[Unreal Editor] 1. Plugins (1) | 2023.12.14 |