docs(map-camera): 고정 카메라 설계·구현 계획
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
50
docs/superpowers/specs/2026-06-09-map-camera-design.md
Normal file
50
docs/superpowers/specs/2026-06-09-map-camera-design.md
Normal file
@@ -0,0 +1,50 @@
|
||||
# 맵별 고정 카메라 (Map Camera Anchor) — 설계
|
||||
|
||||
> 작성: 2026-06-09 / 상태: 승인됨 / 근거: MSW CameraService/CameraComponent API + map01 현재 카메라 런타임 추출.
|
||||
|
||||
## 문제
|
||||
|
||||
맵별로 카메라 시점을 고정해 타일·배경·몬스터를 결정적 framing 안에 배치하고 싶다. 현재 카메라는
|
||||
플레이어(DefaultPlayer) 소유로 플레이어를 추적한다(플레이어 freeze로 사실상 고정이지만 플레이어/맵 의존).
|
||||
맵별로 **명시적·데이터 제어 가능한 고정 시점**이 필요하다.
|
||||
|
||||
## 추출한 현재(map01) 카메라 값 (런타임)
|
||||
- ZoomRatio **100** (min 30 / max 500), CameraOffset (0,0), ScreenOffset **(0.5, 0.655)**,
|
||||
ConfineCameraArea **true**, UseCustomBound false.
|
||||
- 플레이어 스폰 ≈ **(-5.0, -0.04)**, 카메라 가둠 영역 LB(-8.73,-1.76)~RT(7.83,4.35).
|
||||
|
||||
## 설계
|
||||
|
||||
### 구조
|
||||
- **맵별 `CameraAnchor` 엔티티**(정적): 각 맵(`/maps/mapNN/CameraAnchor`)에 추가.
|
||||
- `TransformComponent`: 위치 = framing 중심(스폰 `(-5, -0.04)`).
|
||||
- `CameraComponent`: ZoomRatio 100, ScreenOffset (0.5, 0.655), ConfineCameraArea true (= 현재 값).
|
||||
- `script.MapCamera`: 맵 로드 시 이 카메라로 전환.
|
||||
- 앵커가 움직이지 않으므로 시점 고정. 플레이어와 분리.
|
||||
- **`RootDesk/MyDesk/MapCamera.codeblock`**(신규, 1개):
|
||||
- `OnBeginPlay`(client): `_CameraService:SwitchCameraTo(self.Entity.CameraComponent)`.
|
||||
- **`data/camera.json`**(신규): 단일 카메라 설정(zoom·screenOffset·confine·anchor pos). 맵 공통값(맵들이 map01 클론)이며, 추후 맵별 오버라이드 가능 구조.
|
||||
|
||||
### 생성기
|
||||
- `tools/gen-maps.mjs`에 카메라 앵커 주입 추가: `data/camera.json` 읽어 11맵 각각에 CameraAnchor 엔티티
|
||||
(Transform+Camera+script.MapCamera) 추가. CameraComponent JSON 구조는 기존 `Global/DefaultPlayer.model`의
|
||||
CameraComponent를 복제해 값만 교체(정확한 필드 보존).
|
||||
- `MapCamera.codeblock`은 `gen-maps.mjs`(또는 별도 소함수)에서 생성. ExecSpace는 클라이언트(OnBeginPlay client).
|
||||
|
||||
### 데이터 흐름
|
||||
`data/camera.json` → `gen-maps.mjs`(앵커 주입) + `MapCamera.codeblock` 생성 → 맵 로드 시
|
||||
`OnBeginPlay`→`SwitchCameraTo` → 고정 시점. framing 안에 타일/배경/몬스터 배치(기존대로).
|
||||
|
||||
### 조정
|
||||
- 앵커는 메이커 Explorer `/maps/mapNN/CameraAnchor`에 나타나며 Scene에서 카메라 기즈모로 표시·이동 가능.
|
||||
값은 Property Editor 또는 `data/camera.json` 수정→재생성으로.
|
||||
|
||||
## 검증 (메이커 Play)
|
||||
- map01 진입 시 카메라가 CameraAnchor로 전환돼 현재와 동일 framing 고정(플레이어 이동/위치 무관).
|
||||
- (가능하면 map02 진입해 동일 framing 확인.)
|
||||
- `node tools/gen-maps.mjs` 결정적. 맵 JSON 유효. 빌드 오류 없음.
|
||||
- 앵커가 Explorer/Scene에 보이고 기즈모로 framing 확인 가능.
|
||||
|
||||
## 범위 밖 (금지)
|
||||
- 맵별 다른 줌/오프셋 튜닝(공통값부터), 카메라 연출(흔들림/줌인/블렌드), 노드별 맵 전환 로직,
|
||||
카드 UI/전투 로직 변경.
|
||||
Reference in New Issue
Block a user