TPS 개발 : 패키징 빌드 이슈 모음
모듈 의존성, MSVC 버전, 리다이렉트 중복, 데이터 로드 실패까지 — 첫 패키징 시도에서 만난 빌드 이슈 모음
TPS 개발 - 패키징 빌드 이슈 모음
에디터에서는 멀쩡하던 프로젝트를 실제로 패키징하려니 문제가 줄줄이 튀어나왔다. 겪은 순서대로 정리한다.
1. 의존성 순서 문제로 모듈 삭제
빌드 중 모듈 의존성 순서 문제가 발생해서, 아래 모듈들을 정리(삭제)해야 했다.
1
2
3
4
5
UnrealEd
PropertyEditor
ToolMenus
LevelEditor
WorkspaceMenuStructure
전부 에디터 전용 모듈이다. 패키징(Shipping/Runtime) 빌드에는 필요 없는데 의존성에 걸려 있었던 것들이다.
2. GoogleSheetLoader의 에디터 의존도
CSV 파서로 쓰던 GoogleSheetLoader 플러그인이 에디터 전용으로 만들어져 있어서 다른 모듈들의 의존도가 높았다.
빌드 버전에서 이용 불가능한 헤더들을 #if WITH_EDITOR로 감싸서 빼내면, 에디터 의존도를 런타임 코드에서 분리할 수 있다.
1
2
3
#if WITH_EDITOR
// 에디터 전용 CSV 로드 로직
#endif
에셋 매니저 쪽에서도 에디터 전용으로 뺀 구글 시트 데이터를 참조하고 있어서, 이 부분도 함께 정리가 필요했다.
3. MSVC 컴파일러 버전 문제
언리얼 5.7 버전부터는 MSVC v143, 14.44 버전이 필요하다.
%APPDATA%\Unreal Engine\UnrealBuildTool\BuildConfiguration.xml에서 빌드 툴 버전을 지정한다.
1
2
3
4
5
6
7
<?xml version="1.0" encoding="utf-8" ?>
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
<WindowsPlatform>
<Compiler>VisualStudio2022</Compiler>
<CompilerVersion>14.44.35207</CompilerVersion>
</WindowsPlatform>
</Configuration>
%USERPROFILE%\Documents\Unreal Engine\UnrealBuildTool\BuildConfiguration.xml에도 동일한 설정이 필요하다.
함정 — 설정해도 다른 버전을 잡는다
config를 위처럼 설정해도, UBT가 14.44를 지정해주지 않고 14.38을 계속 잡아버렸다. 결국 14.38 버전을 아예 삭제해서 강제로 14.44만 남게 만들어 해결했다.
4. 패키징 시도 — 리다이렉트 중복 데이터
빌드가 완료되고 언리얼에서 패키징을 시도하니, 이번엔 리다이렉트에서 중복 데이터가 발견됐다.
1
2
+PrimaryAssetTypesToScan=(PrimaryAssetType="NKMInitPrimaryDataAsset", AssetBaseClass=".../NKMInitPrimaryDataAsset", Directories=(Path="/Game/NetKarma/Data"), ...)
+PrimaryAssetTypesToScan=(PrimaryAssetType="GoogleSheetConfig", AssetBaseClass=".../GoogleSheetConfig", Directories=(Path="/Game/NetKarma/Data"), ...)
→ 프라이머리 데이터 에셋은 테스트용으로 만든 개별 경로였다.
1
2
+ClassRedirects=(OldName="/Script/NetKarmaGame.MyClass", NewName="/Script/NetKarmaGame.NKMInitPrimaryDataAsset")
+ClassRedirects=(OldName="/Script/NetKarmaGame.MyClass", NewName="/Script/NetKarmaGame.UNKMLoadingViewModel")
→ 이 역시 테스트 단계에서 만든 개별 경로가 남아있던 것. 정리 대상이었다.
5. 데이터가 제대로 로드되지 않는 이슈
마지막으로, 패키징된 빌드에서 데이터가 제대로 로드되지 않는 문제가 남았다. 세 가지를 함께 적용해서 해결했다.
- 데이터 에셋에 명시적으로 경로 작성
- 패키징 설정을 Always Cook으로 변경
- 모듈 타입을 Editor에서 Runtime으로 변경
에디터에서만 로드되던 경로 해석이나 모듈 로딩 방식이, 패키징된 빌드에서는 다르게 동작한다는 걸 이번에 제대로 겪었다.
오늘 정리
- 에디터 전용 모듈(UnrealEd, PropertyEditor 등)은 의존성에서 제거
GoogleSheetLoader처럼 에디터 전용 플러그인은#if WITH_EDITOR로 런타임과 분리- UE 5.7+는 MSVC v143 14.44 필요, BuildConfiguration.xml 지정해도 안 먹히면 구버전 컴파일러 자체를 삭제
- 리다이렉트/PrimaryAssetTypesToScan에 남은 테스트용 항목은 반드시 정리
- 데이터 미로딩 이슈는 명시적 경로 + Always Cook + Runtime 모듈 전환 세 가지로 해결
에디터 빌드는 관대하지만, 패키징 빌드는 모든 걸 명시적으로 요구한다는 걸 이번에 확실히 배웠다.