언리얼 엔진을 사용하다 보면 가끔 프로젝트 소스를 다른 프로젝트로 옮겨야 하는 상황이 생긴다.
Blueprint나 기본 리소스들의 경우 이주를 통해 쉽게 옮길 수 있다.
하지만 c++ 소스코드의 경우 옮기는 과정이 어렵다.
예를들어 모듈 이름 AAA라는 프로젝트 에서 모듈 이름 BBB라는 프로젝트로 소스코드를 옮겨서 빌드하면,
코드 내 클래스들의 이름은 같지만, 내부적으로는 다음과 같이 저장된다.
(옮겨지는 클래스 이름이 MyClass라고 가정)
"/Script/AAA.MyClass" -> "/Script/BBB.MyClass"
엔진 내부에서 이름이 같더라도 다른 URL로 클래스를 인식하기 때문에,
이렇게 코드를 옮겨놓은 상태에서 Contents를 옮기게 되면, c++ 소스와 연결고리가 있는 모든 파일들을 제대로 로드되지 않는다. 정확히는 c++코드가 없다고 인식하게 된다.
그러면 프로젝트를 옮길 때마다 이 망가진 연결고리를 고치기 위해 노가다를 해야 할까?
언리얼에서는 이런 상황을 대비하여 redirect라는 기능을 제공한다.
Redirect는 ProjectName\Config\DefaultEngine.ini에 어떤 클래스를 어떤 클래스로 대응시킬지 명시해 주면,
그에 맞게 소스를 참조하는 모든 리소스, 블루프린트도 redirect를 통해 로드가 가능하도록 해주는 기능이다.
위 상황을 해결하기 위한 예시를 들어보면,
ProjectName\Config\DefaultEngine.ini 에 다음과 같이 추가한다.
AAA 모듈의 MyClass를 BBB 모듈의 MyClass로 리다이렉팅한다.
[CoreRedirects]
+ClassRedirects=(OldName="/Script/AAA.MyClass",NewName="/Script/BBB.MyClass")
그러면 MyClass를 참조하는 모든 에셋을 문제없이 옮길 수 있게 된다.
추가로 한번 리다이렉트 후 저장된 에셋은 리다이렉트 명시 코드를 .ini 파일에서 제거해도 문제없이 동작한다.
그리고 주의해야 할 점은, 리다이렉트 하기 전에 이미 컨텐츠를 옮겨놓은 상태에서 에셋 저장 해버리면 망가진 상태로 저장되기 때문에 리다이렉트를 하더라도 파일이 바뀌지 않게 된다.
Struct와 Enum도 빠짐 없이 리다이렉팅 해주자.
+StructRedirects=(OldName="/Script/AAA.MyStruct",NewName="/Script/BBB.MyStruct")
+EnumRedirects=(OldName="/Script/AAA.EMyEnum",NewName="/Script/BBB.EMyEnum")
Redirect방법에 대한 예시는 다음 파일을 참고한다.
Epic Games\UE_4.25\Engine\Config BaseEngine.ini
'게임 엔진 > Unreal' 카테고리의 다른 글
[Unreal] 언리얼 안드로이드 프로젝트 Google Play에 출시하기 (0) | 2021.02.09 |
---|---|
[Unreal] 언리얼 Tick 시스템 (4) | 2021.01.20 |
[Unreal] 언리얼 메모리 관리 시스템 (Smart Pointer, GC) (5) | 2021.01.19 |
[Unreal] 언리얼 엔진 디버깅 (0) | 2021.01.12 |
[Unreal] [Example] 인공지능 에이전트 (AISense) (0) | 2021.01.10 |