루멘(Lumen) 이슈 정리
1. 쉬핑 패키징에서 루멘이 플레이어를 못 따라옴
- 증상: PIE는 정상, 쉬핑 빌드에서 특정 구역에서 거의 못 따라옴 (적 AI도 특정 구역 동일)
- 원인: 레벨 RecastNavMesh의
Runtime Generation이 Static이었음.
- 프로젝트는
bGenerateNavigationOnlyAroundNavigationInvokers=True (플레이어 인보커 주변만 런타임 네비메시 생성) 사용.
- 이 방식은 RuntimeGeneration = Dynamic이어야 동작. Static이면 런타임 생성이 안 돼 네비메시 구멍 →
MoveToActor 실패 → 루멘은 2초마다 텔레포트 복구로만 붙음.
- PIE는 에디터가 네비메시를 항상 갖고 있어 문제가 가려졌던 것.
- 수정: RecastNavMesh Runtime Generation = Static → Dynamic
- 레벨에 배치된 RecastNavMesh 액터가 있으면 그 액터 Details에서 변경 후 레벨 저장
- 없으면 Project Settings ▸ Navigation Mesh ▸ Runtime Generation = Dynamic (DefaultEngine.ini에 반영)
- 검증: Development 설정으로 패키징 → 콘솔
show Navigation → 죽었던 구역에 네비메시 생성되는지 확인
- 주의: 네비메시는 플레이어 인보커 30m 버블 + NavMeshBoundsVolume 커버 구역에만 생성됨 (bounds 없는 구역은 Dynamic이어도 안 됨)
2. 특정 선 너머로 가면 루멘이 사라짐 (에디터 + 쉬핑 공통)
- 증상: 플레이어가 특정 선을 넘으면 루멘이 사라지고, 돌아오면 다시 생김
- 원인: 루멘(BP_LumenCharacter)이 P_Level_WP에 직접 배치된 액터이고 World Partition Spatially Loaded 상태.
- WP는 배치 액터를 edit-time 위치의 셀에 귀속 → 런타임에 이동해도 셀이 안 바뀜.
- 플레이어가 그 원본 셀의 스트리밍 범위를 벗어나면 셀 언로드 = 루멘 디스폰. 돌아오면 재로딩 = 재생성.
- WP 스트리밍은 PIE에서도 돌기 때문에 에디터에서도 재현됨 (쉬핑 전용 아님).
- 수정: P_Level_WP에서 배치된 BP_LumenCharacter 선택 → Details ▸ World Partition ▸
Is Spatially Loaded 체크 해제 → 레벨 저장
- (대안: 배치 대신 GameMode/PlayerController에서 런타임 스폰 → 자동 always-loaded)
- 같이 확인: 루멘이 리전별로 켜졌다 꺼지는 Data Layer에 할당돼 있지 않은지 (있으면 always-loaded 레이어로 이동)