Exit-or-die — 던전 생성 안정화 스냅샷
1. 주요 변경사항
DungeonGenerator가 단일 타일 연쇄 생성에서 방 청사진 기반 생성으로 크게 바뀌었다.- 방 위치를 2유닛 그리드에 스냅하고, 방 간 충돌을 분리한 뒤 복도를 연결하는 흐름이 추가됐다.
Game.unity에는corridorPrefab,roomBlueprints,roomCountToSpawn설정이 새로 직렬화됐다.Sample.unity에는 던전 프리팹 배치가 다수 추가·이동됐다.Assets/_Recovery아래 자동 복구 씬 6개와 메타 파일이 커밋에 포함됐다. 이는 즉시 정리 대상이다.
2. 코드 품질 리뷰
이번 변경은 목표가 분명하다. “방 위에 복도 생성 제거”, “복도 위치를 방 타일과 맞춤”이라는 커밋 메시지와 실제 코드 방향이 일치한다. SnapPositionToSmallGrid, SnapPositionToSmallTileCenter, IsInsideAnyRoom처럼 좌표 보정과 방 판정을 메서드로 분리한 점은 이전보다 낫다. 던전 생성이 단순 랜덤 배치에서 방 단위 구조로 이동한 것은 올바른 전진이다.
다만 현재 구현은 아직 안정화 단계라고 보기 어렵다. GenerateDungeonFlow가 방 선택, 분리, 실제 생성, 네트워크 스폰, 복도 연결까지 모두 직접 조율한다. 생성 알고리즘·Unity 오브젝트 생성·NGO 스폰 책임이 한 클래스에 섞여 있어 버그가 발생하면 원인 분리가 어렵다. 특히 roomBlueprints[Random.Range(...)], GetPrefab(size)는 빈 배열이나 미설정 참조에 대한 방어가 없다. 인스펙터 설정 하나가 빠지면 런타임에서 바로 터진다.
RoomConfig bp = roomBlueprints[Random.Range(0, roomBlueprints.Count)];
GameObject GetPrefab(int size) => ...
더 위험한 부분은 네트워크 오브젝트 처리다. 방 부모 오브젝트와 복도 그룹을 런타임에 만들고 NetworkObject를 붙여 즉시 Spawn()한다. 이후 자식 타일을 생성해 SetParent한다. NGO에서는 스폰된 NetworkObject의 부모 관계 동기화와 자식 NetworkObject 처리 순서가 민감하다. 현재 구조는 호스트에서는 우연히 보이더라도 클라이언트 입장에서 부모·좌표·스폰 순서가 어긋날 여지가 있다.
3. 진행도 평가
진행도는 약 34%로 본다. 던전 생성 기능은 방향성이 생겼고 방/복도 생성이라는 핵심 축에 실제 구현이 들어갔다. 그러나 플레이 가능한 품질로 보려면 아직 재현성, 충돌 검증, 네트워크 동기화 검증, 씬 정리가 부족하다.
이번 커밋 3개는 모두 수정성 커밋이며, 순수 기능 확장보다는 생성 결과를 맞추는 시행착오에 가깝다. 이는 나쁘지 않지만, 이제부터는 눈으로 맞추는 단계에서 벗어나야 한다. 던전 생성은 랜덤성이 크므로 자동 검증 없이 계속 수정하면 같은 문제가 반복된다.
4. 다음 권장사항
DungeonGenerator결과를 자동 검증해야 한다. 방 겹침, 복도 중복, 방 내부 복도 생성 여부를 로그가 아니라 테스트 기준으로 판정해야 한다.Assets/_Recovery는 즉시 제거하거나.gitignore정책을 세워야 한다. 복구 씬은 리뷰 비용만 늘리고 실제 제품 상태를 흐린다.- 방 청사진은 씬 직렬화가 아니라
ScriptableObject나 별도 데이터로 분리하는 편이 좋다. - 네트워크 스폰과 부모 설정 순서를 재검토해야 한다. 서버 권위 생성 구조를 명시하고 클라이언트 재현성을 확인해야 한다.
- 던전 생성 규칙을 문서화해야 한다. 타일 크기, 방 간 최소 간격, 복도 연결 성공 조건이 필요하다.
5. 문서화 상태
design 점수는 4점이다. 프로젝트 컨셉 문서는 있는 것으로 보이나, 이번 변경의 핵심인 던전 구조가 어떤 플레이 경험을 만들기 위한 것인지 연결 설명이 부족하다.
technical 점수는 2점이다. 네트워크 권한 모델, 런타임 생성 오브젝트의 스폰 정책, 던전 생성 데이터 흐름을 신규 개발자가 문서만 보고 이해하기 어렵다.
spec 점수는 2점이다. 방 크기, 복도 폭, 좌표 그리드, 생성 실패 조건, 테스트 체크리스트가 사양으로 고정되어 있지 않다. 현재는 코드가 사실상의 사양인데, 랜덤 생성 시스템에서 이는 위험하다.
6. Backlog
- 네트워크 이동 권한과 클라이언트 예측·보정 정책 문서화는 아직 해결되지 않았다.
- Input System과 구 InputManager 병존 문제도 이번 변경 범위에서 정리되지 않았다.
- 대량 에셋과 예제 파일 혼재 문제는 유지된다. 여기에
_Recovery까지 추가되어 저장소 위생은 더 나빠졌다. - 문서는 여전히 테스트 가능한 수치·상태 사양이 부족하다.
Assets/asset/Models/Deungeon폴더명 오탈자는 계속 남아 있다.Assets/_Recovery는 새로 생긴 고위험 백로그다. 제품 씬과 자동 복구 씬을 같은 변경으로 리뷰하게 만들면 실제 변경 의도를 흐린다.