본문으로 바로가기

[Unreal Editor] 3. EditorAssetLibrary, EditorUtilityLibrary

category UnrealEngine/Editor 2024. 1. 9. 12:35

우리가 에디터의 어떠한 에셋에 대해서 '특정 작업'을 하려면 EditorAssetLibraryEditorUtilityLibrary의 도움을 받을 수 있다.

 

예를 들어, 우리가 클릭한 어떠한 에셋을 가져오려면 

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