우리가 에디터의 어떠한 에셋에 대해서 '특정 작업'을 하려면 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에서 특정 알림을 낼 수 있다.
실제로 이를 통해서 사용되지 않는 에셋 삭제를 진행하면, 다음과 같이 팝업창이 발생한다.

