Exit-or-die — 던전 출구·시작계단 스냅샷
1. 주요 변경사항
DungeonGenerator에 방 타입별 출구 생성 허용, 시작계단 생성 허용 플래그가 추가됐다. 출구와 시작계단 프리팹도 인스펙터 참조로 받도록 확장됐다.- 방 타일 중심과 실제 타일 오브젝트를 추적하는
tileObjects맵이 추가됐다. 이후 바닥 제거와 소형 타일 보충에 사용된다. - 출구는 허용된 방의 내부 타일 중 하나에 1회 생성되고, 시작계단은 내부 3x1 스트립을 찾은 뒤 바닥을 교체하는 방식으로 생성된다.
- Exit 계열 프리팹과
DefaultNetworkPrefabs.asset,Sample.unity가 함께 변경됐다. 기능 추가와 씬 편집 노이즈가 섞여 리뷰 난도가 높아졌다.
2. 코드 품질 리뷰
이번 변경은 “출구와 시작 위치를 던전 생성 결과에 붙인다”는 기능 목표가 분명하다. RoomConfig에 생성 가능 여부를 두고, 후보 방을 필터링한 뒤 1회만 스폰하는 흐름 자체는 방향이 좋다. 특히 tileObjects를 별도로 들고 가서 바닥 제거 대상과 실제 GameObject를 연결한 점은 이전보다 구현 가능성이 높아진 부분이다.
다만 DungeonGenerator가 너무 많은 책임을 떠안았다. 현재 한 클래스가 방 생성, 후보 탐색, 출구 보정, 시작계단 배치, 바닥 제거, 소형 타일 재생성, 네트워크 스폰까지 모두 처리한다. 이 상태로 다음 기능이 붙으면 디버깅 비용이 급격히 증가한다. ApplyExitTileTypeOffset의 사분면별 보정값도 경험적 패치에 가깝다. 타일 크기와 프리팹 피벗이 바뀌면 다시 깨질 가능성이 높으므로, 프리팹 소켓 또는 bounds 기반 규칙으로 바꾸는 편이 맞다.
가장 위험한 부분은 시작계단 방향 규약이다. GetStartStairsPlacements는 X축 3칸을 찾을 때 Quaternion.identity를 반환하지만, ApplyStartStairsFloorReplacement는 identity를 Vector3.forward, 즉 Z축 길이로 해석한다. 결과적으로 유효한 위치를 찾고도 다른 방향의 바닥을 제거할 수 있다. 이는 “가끔 계단 주변 바닥이 비거나 겹치는” 런타임 버그로 나타날 가능성이 높다. 배치 계산을 순수 함수로 분리하고 X/Z 케이스를 테스트로 고정해야 한다.
네트워킹 관점에서도 경고 수준이다. 이 클래스는 NetworkBehaviour이고 새 프리팹에는 NetworkObject가 붙어 있다. 그런데 랜덤 선택, 바닥 제거, Destroy/Despawn 호출이 서버 전용 경로라는 보장이 diff에서 보이지 않는다. NGO에서는 던전 구조의 권위를 서버가 가져야 한다. 생성 코루틴 입구에서 IsServer를 명시하고, 클라이언트는 서버가 스폰한 NetworkObject만 관찰하도록 정리해야 한다. 또한 일부 Lock 계단 프리팹은 루트와 자식에 NetworkObject가 함께 있는 형태로 보인다. 네트워크 프리팹은 루트 NetworkObject 1개를 기준으로 설계하는 것이 안전하다.
3. 진행도 평가
기능 진척은 있다. 탈출구와 시작계단이 던전 생성 결과에 붙기 시작했고, 방 타입별 허용 플래그도 생겼다. 그러나 이번 전진은 검증 가능한 설계보다 씬 편집과 경험적 보정에 의존하고 있다. 특히 네트워크 생성물과 랜덤 배치가 결합됐기 때문에, 싱글플레이에서 맞아 보여도 멀티플레이에서 불일치가 날 수 있다.
진행도는 약 38%로 본다. 핵심 루프를 구성하는 조각은 늘고 있지만, 문서·테스트·네트워크 권한 모델이 따라오지 못했다. 지금 바로 하루 정도 투자해 던전 생성 책임과 서버 권한 경계를 정리하지 않으면 이후 수정 비용이 크게 오른다.
4. 다음 권장사항
- 던전 생성과 출구·시작계단 배치를 서버 권한 경로로 제한한다. 클라이언트 랜덤 생성은 금지해야 한다.
- 시작계단 X/Z 방향 규약을 통일한다. identity가 어느 축을 의미하는지 코드와 테스트로 고정해야 한다.
- Exit 계단 프리팹의 중첩
NetworkObject를 루트 1개 구조로 정리한다. NGO 스폰 오류를 먼저 제거해야 한다. - 던전 배치 계산을 순수 함수로 분리한다. 방 크기, 타일 크기, 회전별 케이스 테스트가 필요하다.
Sample.unity의 디버그 루트명과 언팩된 프리팹 변경을 정리한다. 기능 변경과 씬 노이즈를 분리해야 한다.- 출구와 시작계단 배치 규칙을 문서에 수치로 남긴다. “왜 이 오프셋인가”가 설명돼야 한다.
5. 문서화 상태
design 점수는 4점이다. 컨셉 문서는 존재하는 것으로 보이나, 이번 던전 출구·시작계단 규칙이 플레이 경험 목표와 어떻게 연결되는지 갱신되지 않았다.
technical 점수는 2점이다. 네트워크 권한, 던전 생성 데이터 흐름, 프리팹 등록 규칙이 문서화되지 않았다. 신규 개발자가 지금 구조를 문서만 보고 이해하기 어렵다.
spec 점수는 2점이다. 출구 배치 가능 방, 시작계단 3x1 조건, 타일 교체 기준, 금지 방 타입 같은 테스트 가능한 사양이 없다. 현재는 코드와 씬을 열어 추론해야 하는 상태다.
6. Backlog
- 시작계단 방향 규약과 바닥 교체 기준이 코드 안에서 어긋남. 배치 성공 후 다른 축을 지우는 버그로 이어질 수 있다.
NetworkObject중첩 프리팹 구조가 NGO 스폰 안정성을 위협함. 루트 기준으로 단순화해야 한다.- 네트워크 이동 권한과 클라이언트 예측·보정 정책이 문서화되지 않음. 멀티플레이 디버깅 기준이 없다.
- 문서가 컨셉 중심이며 테스트 가능한 수치·상태 사양이 부족함. 구현 검증표로 쓰기 어렵다.
- Unity Recovery 씬이 저장소에 포함된 상태로 보인다. 변경 노이즈와 머지 충돌 비용을 만든다.
- Input System과 구 InputManager가 함께 남아 입력 정책이 애매하다.
- 대량 에셋과 예제 파일이 제품 코드와 섞여 리뷰·빌드 비용을 늘린다.
Deungeon폴더명 오탈자가 계속 사용된다. 새 Exit 에셋도 같은 경로에 추가됐다.