[UE] Asset Editor Tool 2: Asset 접두어 넣기
언리얼에서 작업을 할때 Asset을 보기좋게 찾기 위해 접두어를 넣는 경우는 흔하다. Material의 경우 M_, Blueprint는 BP_와 같은식이다. 매번 이 과정을 하는것은 귀찮은 일이기 때문에 자동으로 접두어를 붙여주는 기능을 만들었다.
목차
1. Asset 접두어 넣기
언리얼 공식문서에서 제시한 추천 접두어 모듬
https://docs.unrealengine.com/4.27/en-US/ProductionPipelines/AssetNaming/
Recommended Asset Naming Conventions
A recommended naming convention to help organize your Assets.
docs.unrealengine.com
.Build.cs 에 "UMG", "Niagara" 추가하기
SWManager.Build.cs
더보기
using UnrealBuildTool;
public class SWManager : ModuleRules
{
public SWManager(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;
PrivateIncludePaths.AddRange(
new string[] {
System.IO.Path.GetFullPath(Target.RelativeEnginePath) + "/Source/Editor/Blutility/Private"
}
);
PublicDependencyModuleNames.AddRange(
new string[]
{
"Core", "Blutility", "EditorScriptingUtilities", "UMG", "Niagara"
// ... add other public dependencies that you statically link with here ...
}
);
PrivateDependencyModuleNames.AddRange(
new string[]
{
"CoreUObject",
"Engine",
"Slate",
"SlateCore",
// ... add private dependencies that you statically link with here ...
}
);
}
}
PublicDependencyModuleNames.AddRange()
- "UMG", "Niagara" 추가
QuickAssetAction
QuickAssetAction.h
더보기
#pragma once
#include "CoreMinimal.h"
#include "AssetActionUtility.h"
#include "Materials/Material.h"
#include "Materials/MaterialInstanceConstant.h"
#include "Particles/ParticleSystem.h"
#include "Sound/SoundCue.h"
#include "Sound/SoundWave.h"
#include "Engine/Texture.h"
#include "Blueprint/UserWidget.h"
#include "Components/SkeletalMeshComponent.h"
#include "NiagaraSystem.h"
#include "NiagaraEmitter.h"
#include "QuickAssetAction.generated.h"
/** 우클릭 AssetAction에 새로운 기능 추가하기
* - Asset 복제
* - Asset 접두어 붙이기
*/
UCLASS()
class SWMANAGER_API UQuickAssetAction : public UAssetActionUtility
{
GENERATED_BODY()
public:
UFUNCTION(CallInEditor)
void DuplicateAssets(int32 NumOfDuplicates); // Asset 복제
UFUNCTION(CallInEditor)
void AddPrefixes(); // 접두어 달기
private:
TMap<UClass*, FString>PrefixMap =
{
{UBlueprint::StaticClass(),TEXT("BP_")},
{UStaticMesh::StaticClass(),TEXT("SM_")},
{UMaterial::StaticClass(), TEXT("M_")},
{UMaterialInstanceConstant::StaticClass(),TEXT("MI_")},
{UMaterialFunctionInterface::StaticClass(), TEXT("MF_")},
{UParticleSystem::StaticClass(), TEXT("PS_")},
{USoundCue::StaticClass(), TEXT("SC_")},
{USoundWave::StaticClass(), TEXT("SW_")},
{UTexture::StaticClass(), TEXT("T_")},
{UTexture2D::StaticClass(), TEXT("T_")},
{UUserWidget::StaticClass(), TEXT("WBP_")},
{USkeletalMeshComponent::StaticClass(), TEXT("SK_")},
{UNiagaraSystem::StaticClass(), TEXT("NS_")},
{UNiagaraEmitter::StaticClass(), TEXT("NE_")}
};
};
헤더 추가
- #include "Materials/Material.h"
- #include "Materials/MaterialInstanceConstant.h"
- #include "Particles/ParticleSystem.h"
- #include "Sound/SoundCue.h"
- #include "Sound/SoundWave.h"
- #include "Engine/Texture.h"
- #include "Blueprint/UserWidget.h"
- #include "Components/SkeletalMeshComponent.h"
- #include "NiagaraSystem.h"
- #include "NiagaraEmitter.h"
함수 추가
- UFUNCTION(CallInEditor)
void AddPrefixes(); // 접두어 달기
접두어로 사용에 쓰일 TMap
- TMap의 Key는 '각각의 Asset 타입', Value는 '각각의 Asset타입의 접두어 텍스트'
- TMap<UClass*, FString>PrefixMap = {
{UBlueprint::StaticClass(),TEXT("BP_")}, ... };
QuickAssetAction.cpp
더보기
#include "AssetActions/QuickAssetAction.h"
#include "DebugHeader.h"
#include "EditorUtilityLibrary.h"
#include "EditorAssetLibrary.h"
void UQuickAssetAction::DuplicateAssets(int32 NumOfDuplicates) // Asset 복제하기
{
if (NumOfDuplicates <= 0) // 복사 개수가 0이하라면
{
// DebugHeader.h에 만든 ShowMsgDialog함수를 콜해 아래의 문구를 띄운다.
ShowMsgDialog(EAppMsgType::Ok, TEXT("Please enter a VALID number"));
return;
}
TArray<FAssetData> SelectedAssetsData = UEditorUtilityLibrary::GetSelectedAssetData();
uint32 Counter = 0;
for (const FAssetData& SelectedAssetData : SelectedAssetsData)
{
for (int32 i = 0; i < NumOfDuplicates; i++)
{
// Asset 경로, 이름짓기, 복제될 Asset의 경로
const FString SourceAssetPath = SelectedAssetData.ObjectPath.ToString();
const FString NewDuplicatedAssetName = SelectedAssetData.AssetName.ToString() + TEXT("_") + FString::FromInt(i + 1);
const FString NewPathName = FPaths::Combine(SelectedAssetData.PackagePath.ToString(), NewDuplicatedAssetName);
// SourceAssetPath경로에 있는 Asset을 NewPathName경로로 복제
if (UEditorAssetLibrary::DuplicateAsset(SourceAssetPath, NewPathName))
{
UEditorAssetLibrary::SaveAsset(NewPathName, false); // NewPathName경로에 Asset을 저장
++Counter;
}
}
}
if (Counter > 0) // 복제가 0 초과면 문구 띄우기
{
// DebugHeader.h에 만든 ShowNotifyInfo함수를 콜해 언리얼에디터 우측 하단에 아래의 문구를 띄운다.
ShowNotifyInfo(TEXT("Successfully duplicated " + FString::FromInt(Counter) + " files"));
}
}
void UQuickAssetAction::AddPrefixes() // 접두어 달기
{
TArray<UObject*>SelectedObjects = UEditorUtilityLibrary::GetSelectedAssets(); // 선택된 Asset들을 TArray변수에 다 담는다
uint32 Counter = 0;
for (UObject* SelectedObject : SelectedObjects)
{
if (false == IsValid(SelectedObject)) continue; // 선택된 Asset이 없으면 리턴
FString* PrefixFound = PrefixMap.Find(SelectedObject->GetClass()); // PrefixMap에서 알맞는 접두어를 찾아 변수에 담는다
if (nullptr == PrefixFound || PrefixFound->IsEmpty()) // PrefixFound가 없다면
{
Print(TEXT("Failed to find prefix for class ") + SelectedObject->GetClass()->GetName(), FColor::Red);
continue;
}
FString OldName = SelectedObject->GetName();
if (OldName.StartsWith(*PrefixFound))
{
Print(OldName + TEXT(" already has prefix added"), FColor::Red);
continue;
}
const FString NewNameWithPrefix = *PrefixFound + OldName; // '접두어+기존이름' 변수에 담음
UEditorUtilityLibrary::RenameAsset(SelectedObject, NewNameWithPrefix); // 선택된 Asset을 새로운 이름으로 이름 변경
++Counter; // 추후에 문구를 띄울때 몇개의 Asset들이 이름변경 됬는지 알아야하므로 기록
}
if (Counter > 0)
{
ShowNotifyInfo(TEXT("Successfully renamed " + FString::FromInt(Counter) + " assets"));
}
}
함수 정의
- void UQuickAssetAction::AddPrefixes()
실행화면
'⭐ Unreal Engine > UE Plugin - Custom Editor Tool' 카테고리의 다른 글
[UE] Slate UI 2: 제거 마법사 - 에셋 리스트 띄우기 (0) | 2023.12.01 |
---|---|
[UE] Slate UI 1: Tab 띄우기 (0) | 2023.12.01 |
[UE] ContentBrowser Menu: 사용하지 않는 에셋/빈 폴더 제거 (0) | 2023.11.25 |
[UE] Asset Editor Tool 3: 사용하지 않는 Asset만 제거하기 (0) | 2023.11.25 |
[UE] Asset Editor Tool 1: Asset 복제 기능의 Editor 만들기 (0) | 2023.11.23 |
댓글
이 글 공유하기
다른 글
-
[UE] Slate UI 1: Tab 띄우기
[UE] Slate UI 1: Tab 띄우기
2023.12.01 -
[UE] ContentBrowser Menu: 사용하지 않는 에셋/빈 폴더 제거
[UE] ContentBrowser Menu: 사용하지 않는 에셋/빈 폴더 제거
2023.11.25 -
[UE] Asset Editor Tool 3: 사용하지 않는 Asset만 제거하기
[UE] Asset Editor Tool 3: 사용하지 않는 Asset만 제거하기
2023.11.25 -
[UE] Asset Editor Tool 1: Asset 복제 기능의 Editor 만들기
[UE] Asset Editor Tool 1: Asset 복제 기능의 Editor 만들기
2023.11.23