티스토리 뷰
커스텀 에디터 첫 번째 포스팅.
에디터의 작업 유형은 2 가지이다. 에셋과 액터. 두 종류에 대한 작업으로 모두 이루어 져 있을 것이다.
AssetActionUtility 와 ActorActionUtility 의 파생클래스를 만들어서 사용하는 방식으로 커스텀 에디터를 사용할 수 있다.
먼저 UAssetActionUtility의 파생 클래스를 만든다.
그런데 AssetActionUtility.h 는 플러그인 파일에 존재하지 않기 때문에 보편적인 include로는 참조가 어렵다. 따라서 cs파일 내부에서 모듈을 추가해 주어야하고 경로또한 추가해주어야 한다.
PrivateIncludePaths.AddRange(
new string[] {
System.IO.Path.GetFullPath(Target.RelativeEnginePath) +
"/Source/Editor/Blutility/Private"
}
);
엔진의 경로를 받아온 뒤 Blutility 내부의 Private로 경로를 잡아준다.
UAssetActionUtility를 상속받는 C++ 클래스를 만들어 준다.
클래스 내부 public 함수에 UFUNCTION(CallInEditor) 매크로를 붙인다면 언리얼 에디터상에서 내가 지정한 함수를 호출할 수 있게된다.
public:
UFUNCTION(CallInEditor)
void TestFunc();
함수의 파라미터를 달리하면 에디터 상에서 알아서 input 창을 띄워준다.
UFUNCTION(CallInEditor)
void TestInputValue_intstring(int32 num1, FString& string);
int32와 FString을 받는
함수를 호출 할 시 다음과 같은 창이 뜬다.
이 기능을 토대로 기본적인 복제 기능을 만든다.
UEditorUtilityLibrary 와 UEditorAssetLibrary 에는 복제 함수가 있다. 선택된 자산 데이터를 TArray<UObject*> 으로 가져올 수 있다. UEditorAssetLibrary는 엔진->플러그인 에 존재한다. 따라서 위에서 했던것과 같이 경로까지 추가할 필요는 없으며 모듈만 추가해주면 된다.
PublicDependencyModuleNames.AddRange(
new string[]
{
"Core", "Blutility", "EditorScriptingUtilities"
}
);
UEditorAssetLibrary::DuplicateAsset 함수는 원본의 파일경로 와 복제품을 넣을 경로를 인자로 받는다.
복제를 원하는 만큼 input을 받고 for문을 돌며 이름, 경로를 설정해준다.
우선 코드는 다음과 같다.
for (const auto& SelectedAssetData : SelectedAssetsData)
{
for (int32 i = 0; i < NumOfDuplicates; i++)
{
// 원본의 경로
//const FString SourceAssetPath = SelectedAssetData.ObjectPath.ToString();
const FString SourceAssetPath = SelectedAssetData.GetSoftObjectPath().ToString();
// 복제품의 "이름 + _복제Index" 를 만들어준다.
const FString NewDuplicatedAssetName = SelectedAssetData.AssetName.ToString()
+ TEXT("_") + FString::FromInt(i+1);
// 복제한 에셋을 저장할 경로. 선택한 에셋의 패키지 경로 에 새로 만들 복제품의 이름을 달아주어야 함.
const FString NewPathName
= FPaths::Combine(SelectedAssetData.PackagePath.ToString(), NewDuplicatedAssetName);
if (UEditorAssetLibrary::DuplicateAsset(SourceAssetPath, NewPathName))
{
UEditorAssetLibrary::SaveAsset(NewPathName, false);
++Counter;
}
}
}
자산, 이름, 개체, 경로 및 패키지 경로간의 차이점을 숙지해야 한다.
A라는 에셋은 A패키지위치->A파일 라는 위치에 저장되어 있을 것이다.
그렇다면 A를 복제한 A1의 위치를 A옆에 두고자 한다면 A패키지의위치->A1파일 이 되어야 할 것이다.
만약 A1을 A패키지위치->A파일 으로 한다면 원본이 사라지게 될 것이다. (UEditorAssetLibrary::DuplicateAsset 함수 내부적으로 nullptr을 리턴할수도) 이 차이를 잘 구분하자!!
성공적으로 복제했다면 저장해준다. 함수는 UEditorAssetLibrary::SaveAsset.
추가적으로 언리얼 5.1 로 넘어오면서 (강의는 5.03인데 ObjectPath를 사용..) ObjectPath를 사용하지 않는다고 한다. 대신 GetSoftObjectPath() 함수를 사용하자.
위의 기능으로 블루프린트를 5개를 한번에 복제한 결과.
'Unreal > Custom Editor' 카테고리의 다른 글
[UE 5.1] Custom Slate Widget 02 (0) | 2023.09.12 |
---|---|
[UE 5.1] Custom Slate Widget 01 (0) | 2023.09.06 |
[UE 5.1] Folder & Asset Delete , World Partition (0) | 2023.08.23 |
[UE 5.1] ContentBrowser 메뉴 추가 (0) | 2023.08.22 |
[UE 5.1]Custom Editor - Asset Remove (0) | 2023.08.18 |
- Total
- Today
- Yesterday
- BFS
- Ue
- 디자인 패턴
- 탐욕법
- 개인공부
- 완전탐색
- Heap
- 고득점 Kit
- level3
- DFS
- Unreal 5.1
- 데디케이티드
- 채팅서버
- 정렬
- FPS
- IMGUI
- C++
- LV3
- 고득점kit
- 너비우선탐색
- 재귀
- 힙
- 스택/큐
- greedy
- 해시
- 프로그래머스
- sort
- LV2
- UE5
- 누적합
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |