1. 문제 상황
1인 개발 프로젝트의 프로토타입 검증을 위해 패키징을 진행하던 중, Development 빌드에서는 정상 작동하던 게임이 Shipping 빌드에서는 검정 화면에서 멈추는 현象이 발생했습니다.
2. 문제 해결을 위한 시도들
2.1. 안티 앨리어싱 설정 변경
TAA(Temporal Anti-Aliasing)가 문제를 일으킬 수 있다는 정보를 접하고 FXAA로 변경해봤습니다.
- 결과: 해결되지 않음
2.2. BuildData 포함
빌드된 라이팅 정보가 포함되지 않아 발생하는 문제일 가능성을 고려하여 List of Map에 BuildData를 포함시켜봤습니다.
- 결과: 해결되지 않음
2.3. GameInstanceSubsystem 생성자 수정
이전 프로젝트에서 Subsystem 생성자에서 DataTable을 참조할 때 제대로 불러오지 못하는 경우가 있었던 경험을 바탕으로, 생성자가 아닌 Initialize() 함수에서 DataTable을 로드하도록 변경했습니다.
- 결과: 해결되지 않음
2.4. GameMode 기본 클래스 명시적 지정
GameMode 생성자에서 기본 Pawn과 PlayerController 클래스를 명시적으로 지정하지 않아 캐릭터가 제대로 스폰되지 않는 것은 아닌지 의심하여 설정을 추가했습니다.
- 결과: 해결되지 않음
3. 원인 파악 및 해결
3.1. 문제의 원인
문제는 BeginPlay 호출 순서에 있었습니다.
기존 구현 구조는 다음과 같았습니다:
- PlayerController의 BeginPlay()에서 Widget 생성
- ActorComponent의 BeginPlay()에서 PlayerController의 Widget 참조
Development 빌드에서는 PlayerController의 BeginPlay가 먼저 호출되어 문제가 없었지만, Shipping 빌드에서는 ActorComponent의 BeginPlay가 먼저 호출되면서 아직 생성되지 않은 Widget을 참조하려 했고, 이것이 크래시의 원인이었습니다.
3.2. 해결 방법
PlayerController의 BeginPlay가 아닌 OnPossess에서 Widget을 생성하도록 구조를 변경했습니다.
'언리얼 엔진 > 트러블슈팅' 카테고리의 다른 글
| [언리얼엔진] C++ 인터페이스, 블루프린트에서 활용하기 (0) | 2025.08.26 |
|---|---|
| [언리얼엔진] enum타입 TArray (1) | 2025.08.01 |
| [언리얼엔진] C++ 파일 경로 문제 (0) | 2025.06.18 |
| [언리얼엔진] 3D NavMesh (Flying Navigation System) (1) | 2025.06.05 |
| [언리얼엔진] Behavior Tree 인스턴스 (1) | 2025.05.28 |