# 타일맵 레벨 디자인 가이드

## 🎮 개요

이제 코드 기반 LevelGenerator 대신 **Unity Tilemap**을 사용하여 직접 레벨을 디자인합니다.

**장점:**
- ✅ 비주얼 에디터로 직관적인 작업
- ✅ 즉시 결과 확인 가능
- ✅ 세밀한 타일 단위 제어
- ✅ 빠른 반복 작업

---

## 📋 Unity 에디터 설정

### 1단계: Tilemap 구조 생성

#### Stage 씬 열기 (예: Stage1.unity)

1. **기존 LevelGenerator 제거**:
   - Hierarchy에서 LevelGenerator GameObject 삭제

2. **Grid 생성**:
   - Hierarchy 우클릭 → 2D Object → Tilemap → Rectangular
   - 이름: `Grid`

3. **마스크별 Tilemap 레이어 생성**:
   
   Grid 우클릭 → 2D Object → Tilemap → Rectangular (3번 반복)
   
   - 이름 변경:
     - `BlackMask_Tilemap` (검은 가면에만 보임)
     - `WhiteMask_Tilemap` (흰 가면에만 보임)
     - `Both_Tilemap` (항상 보임)

**최종 구조:**
```
Stage1
├── Grid
│   ├── BlackMask_Tilemap
│   ├── WhiteMask_Tilemap
│   └── Both_Tilemap
├── Player
├── Goal
└── Main Camera
```

---

### 2단계: Tilemap 컴포넌트 설정

각 Tilemap마다 다음 설정:

#### BlackMask_Tilemap 설정

1. **TilemapMaskObject 컴포넌트 추가**:
   - Add Component → `TilemapMaskObject`
   - **Visibility**: `Black Only`
   - **Black Mask Color**: 흰색 (R:255, G:255, B:255)
   - **White Mask Color**: 검은색 (R:0, G:0, B:0)

2. **Tilemap Collider 2D 추가**:
   - Add Component → `Tilemap Collider 2D`

3. **Composite Collider 2D 추가** (최적화):
   - Add Component → `Composite Collider 2D`
   - Tilemap Collider 2D → **Used By Composite**: ✓

4. **Rigidbody 2D 설정** (자동 추가됨):
   - **Body Type**: Static

#### WhiteMask_Tilemap 설정

위와 동일하게 설정, 단:
- **Visibility**: `White Only`

#### Both_Tilemap 설정

위와 동일하게 설정, 단:
- **Visibility**: `Both`

---

### 3단계: Tile Palette 설정

1. **Tile Palette 창 열기**:
   - Window → 2D → Tile Palette

2. **Palette 선택**:
   - Dropdown에서 `PlatformerPalette` 선택
   - (없다면 Create New Palette)

3. **타일 추가** (필요시):
   - Assets/IndieMarc/PlatformerDemo/Tilemap/Black/ 폴더에서
   - 타일 이미지를 Palette로 드래그

---

### 4단계: 레벨 디자인하기

#### 타일 배치 방법

1. **Tile Palette에서 타일 선택**:
   - 브러시 도구 (B)
   - 지우개 도구 (D)
   - 채우기 도구 (G)

2. **Hierarchy에서 Tilemap 선택**:
   - 예: BlackMask_Tilemap

3. **Scene 뷰에서 타일 배치**:
   - 클릭하여 타일 배치
   - Shift + 드래그로 연속 배치

#### 레벨 디자인 원칙

**Stage 1 (튜토리얼):**
- 시작 플랫폼: `Both_Tilemap`에 배치
- 첫 번째 갭: `WhiteMask_Tilemap`에 다리 배치
- 두 번째 갭: `BlackMask_Tilemap`에 다리 배치
- 골 플랫폼: `Both_Tilemap`에 배치

**Stage 2 (중급):**
- 더 큰 갭
- 작은 플랫폼
- 빠른 마스크 전환 필요

**Stage 3 (고급):**
- 매우 큰 갭
- 타이밍이 중요한 점프
- 복잡한 마스크 전환 패턴

---

### 5단계: Player와 Goal 배치

1. **Player 위치 조정**:
   - Hierarchy에서 Player 선택
   - Transform → Position 설정
   - 시작 플랫폼 위에 배치

2. **Goal 위치 조정**:
   - Hierarchy에서 Goal 선택
   - 마지막 플랫폼에 배치

---

## 🎨 타일 종류 및 사용법

### 기본 타일
- **tile-flat-top**: 평평한 상단 (가장 많이 사용)
- **tile-flat-bottom**: 평평한 하단
- **tile-flat-left/right**: 측면

### 코너 타일
- **tile-corner-left**: 왼쪽 코너
- **tile-corner-right**: 오른쪽 코너
- **tile-corner-left-down**: 왼쪽 아래 코너
- **tile-corner-right-down**: 오른쪽 아래 코너

### 경사 타일
- **tile-slide-left**: 왼쪽 경사
- **tile-slide-right**: 오른쪽 경사

---

## 🎮 테스트하기

1. **Play 모드 실행**

2. **확인 사항**:
   - ✓ Player가 플랫폼 위에서 시작
   - ✓ Shift 키로 마스크 전환
   - ✓ 마스크에 따라 플랫폼 표시/숨김
   - ✓ 충돌 감지 정상 작동
   - ✓ Goal 도달 시 다음 스테이지로 이동

---

## 🐛 문제 해결

### 타일이 안 보인다면?
- Tilemap Renderer가 활성화되어 있는지 확인
- Sorting Layer 설정 확인
- Camera의 Culling Mask 확인

### 충돌이 안 된다면?
- Tilemap Collider 2D 추가 확인
- Composite Collider 2D 설정 확인
- Rigidbody 2D가 Static인지 확인

### 마스크 전환이 안 된다면?
- TilemapMaskObject 컴포넌트 확인
- Visibility 설정 확인
- MaskManager가 씬에 있는지 확인

### 타일이 깨져 보인다면?
- 타일 이미지의 Filter Mode: Point (no filter)
- Compression: None
- Pixels Per Unit: 16 (기본값)

---

## 💡 팁

### 효율적인 작업
- **Grid Snap**: Edit → Grid and Snap Settings
- **단축키**: B (브러시), D (지우개), G (채우기)
- **복사/붙여넣기**: Ctrl+C, Ctrl+V

### 레벨 디자인 팁
- **시작은 쉽게**: 플레이어가 메카닉을 배울 시간 제공
- **점진적 난이도**: 한 번에 하나의 새로운 요소만 추가
- **시각적 힌트**: 플레이어가 어디로 가야 할지 명확하게
- **테스트 자주**: 작은 변경마다 플레이 테스트

---

## 🎉 완성!

이제 코드 없이 비주얼 에디터로 레벨을 디자인할 수 있습니다!

**다음 단계:**
- Stage 1, 2, 3 타일맵으로 디자인
- 각 스테이지 테스트 및 밸런싱
- 추가 타일 에셋 제작 (필요시)
