--- type: 템플릿_구조_분석 scope: Unity_프로젝트_실측 author: 개발팀장 date: 2026-04-23 version: v0.1 project: EerieVillage (기묘한 고을 : 조선퇴마뎐 / EerieVillage: Joseon Exorcist) phase: BT5-Dev 3단계 (템플릿 선행 분석) unity_version: 6000.3.13f1 LTS template_base: Unity 2D PlatformerMicrogame data_source: E:/EerieVillage/ Read·Glob 실측 (PC 독립 경로는 paths.local.json 참조) status: 초기 분석 — Phase 구현 착수 전 기준 문서 --- # 01. 템플릿 구조 분석 ## 1. 디렉토리 구조 (Assets/ 하위) ``` E:/EerieVillage/ ├── Assets/ │ ├── Audio/ (BGM·SFX 리소스) │ ├── Character/ │ │ ├── Animations/ (Animator Controller·Clip) │ │ └── Sprites/ (15종 PNG — 후술 §4) │ ├── Documentation/ (템플릿 문서) │ ├── Editor/ │ │ ├── GitAutoSync/ (BT5-Dev C안 자동 sync 구조, 2026-04-23 PD 배치) │ │ └── PatrolPathEditor.cs (적 순찰 경로 에디터) │ ├── Environment/ │ │ ├── Sprites/ │ │ └── Tiles/ │ ├── Mod Assets/ (템플릿 모드 예시 — EerieVillage 제거 대상) │ ├── Prefabs/ (Button · CinemachineConfiner · Enemy · Player · TilePalette · UI Canvas) │ ├── Rendering/ (URP 관련) │ ├── Scenes/ │ │ └── SampleScene.unity + SampleSceneSettings.lighting (단일 씬) │ ├── Scripts/ (36개 C#, 6 폴더 — 후술 §3) │ ├── Settings/ (URP·Input Actions) │ ├── TextMesh Pro/ │ ├── Tiles/ │ └── Tutorials/ (템플릿 튜토리얼 리소스) ├── Library/ (.gitignore 대상) ├── Logs/ (.gitignore 대상) ├── Packages/ │ └── manifest.json (Unity 패키지 의존성 — 후술 §2) ├── ProjectSettings/ (InputManager·Physics2D·Graphics 등) ├── Temp/ (.gitignore 대상) └── UserSettings/ (.gitignore 대상) ``` ### 1-1. Scripts 폴더 구조 (네임스페이스 분할 직관적) | 폴더 | 네임스페이스 | 역할 | |---|---|---| | `Core/` | `Platformer.Core` | 이벤트 시뮬레이션 엔진 (Simulation·Event·HeapQueue·Fuzzy) | | `Gameplay/` | `Platformer.Gameplay` | 게임플레이 이벤트 정의 (PlayerSpawn·PlayerDeath·EnemyDeath 등 12종) | | `Mechanics/` | `Platformer.Mechanics` | 물리·제어·컨트롤러 (PlayerController·EnemyController·Health·KinematicObject 등 13종) | | `Model/` | `Platformer.Model` | 게임 상태 모델 (PlatformerModel — virtualCamera·player·spawnPoint·jumpModifier) | | `UI/` | `Platformer.UI` | 메뉴·게임플레이 UI 토글 (MainUIController·MetaGameController) | | `View/` | — | 시각 효과 (AnimatedTile·ParallaxLayer) | ## 2. Packages/manifest.json — 주요 패키지 14종 | 패키지 | 버전 | 용도·EerieVillage 활용 | |---|---|---| | `com.unity.cinemachine` | **3.1.5** | 가상 카메라 — 플레이어 follow + 보스룸 고정 전환 (기획 05 §3-2) | | `com.unity.feature.2d` | 2.0.2 | 2D 툴킷 (Tilemap·SpriteShape·Animation2D) | | `com.unity.inputsystem` | **1.19.0** | 신 Input System — 마우스 좌클릭 공격 추가 진입점 | | `com.unity.render-pipelines.universal` | **17.3.0** | URP 렌더링 — 2D 라이팅·Post-processing | | `com.unity.timeline` | 1.8.12 | 컷씬·보스 연출 여지 | | `com.unity.ugui` | 2.0.0 | UI Toolkit (Canvas 기반 메뉴) | | `com.unity.visualscripting` | 1.9.11 | 비주얼 스크립팅 (미사용 — 제거 검토 대상) | | `com.coplaydev.unity-mcp` | main | **Unity MCP** (BT4 도입 완결) — 에이전트 Unity 직접 편집 | | `com.unity.test-framework` | 1.6.0 | Test Runner — QA 자동화 기반 | | `com.unity.feature.development` | 1.0.2 | 개발 도구 (Profiler·Debugger) | | `com.unity.connect.share`·`learn.iet-framework`·`multiplayer.center` | — | 미사용 — **제거 검토** (빌드 크기 절감) | ## 3. 주요 Scene — SampleScene.unity - **단일 씬**: 마을·전투 분리 없음 (EerieVillage 코어 루프는 씬 전환 구조 필요 — 개발 03 문서 P1 항목) - **Scene Hierarchy 계층** (Unity MCP로 추가 실측 가능하나 본 선행 분석에서는 스크립트 참조로 역산): - `GameController` — `Simulation.Tick()` 호출 + `PlatformerModel` 직렬화 소유 - `PlayerController` — 플레이어 GameObject (Rigidbody2D Kinematic + Collider2D + Animator + SpriteRenderer + AudioSource + Health) - `CinemachineCamera` (virtualCamera) — PlatformerModel.virtualCamera 참조 - `SpawnPoint` Transform — 리스폰 좌표 - `EnemyController` × N — PatrolPath 순찰 - `VictoryZone`·`DeathZone` 트리거 콜라이더 - UI Canvas (MainUIController·MetaGameController·gamePlayCanvasii 배열) ## 4. Character 스프라이트 리소스 (Assets/Character/Sprites/) | 캐릭터 | 스프라이트 | 용도 | |---|---|---| | **Player 시리즈 (5종)** | PlayerIdle·PlayerRun·PlayerJump·PlayerLand·PlayerHurt·PlayerDeath·PlayerSpawn·PlayerVictory·PlayerTestGirl | 기본 플레이어 애니메이션 + 테스트 대체 스프라이트 | | **Enemy (4종)** | EnemyIdle·EnemyRun·EnemyHurt·EnemyDeath | 일반 적 상태 4종 | | **Mr.Alien** | Mr.Alien.png | 템플릿 고유 캐릭터 (EerieVillage 교체 대상 — 조선 퇴마사 스프라이트 신규 필요) | | **Token** | TokenSpin·TokenCollected | 수집 토큰 (기획 전환 검토 — 영혼·부적 등 재테마화) | - **해상도·프레임 수 실측 보류**: Unity MCP로 Sprite 확인하여 Phase 2 이상에서 아트 교체 기획 수립 시 검증 - **기획팀 `narrative-designer` Phase 3-B 산출과 결합하여 조선·퇴마 세계관 스프라이트 전량 교체 예정** ## 5. ProjectSettings 주요 설정 (실측 기반 요약) | 파일 | 확인 결과 | |---|---| | `ProjectVersion.txt` | Unity 6000.3.13f1 LTS (PD 지시 일치) | | `InputManager.asset` | 레거시 Input — 실제는 Input System 신 패키지 사용 (`Settings/` 하위 InputActions asset 추정) | | `Physics2DSettings.asset` | 2D 중력·레이어 매트릭스 (템플릿 기본값 — Phase 3-B 튠 대상) | | `URPProjectSettings.asset` | URP 17.3.0 기본 설정 + 2D Lit Shader | | `QualitySettings.asset` | 모바일 프로파일 미확정 — C11 "자원 효율성" 관점 Phase 2 튠 대상 | | `TagManager.asset` | 레이어·태그 — Player·Enemy·Ground 등 표준 템플릿 태그 사용 추정 | | `GraphicsSettings.asset` | URP Asset 참조 | ## 6. 특기 사항 (개발팀 관점) 1. **독자 이벤트 시뮬레이터**: `Simulation.Schedule()` 기반 discrete event 패턴. Unity 표준 `UnityEvent`·Observer 미사용. **EerieVillage 카드 효과·사망 분기·레벨업 이벤트를 이 시스템 위에 얹을 수 있음** (코드 범용성 C11 긍정) 2. **Kinematic 물리**: `KinematicObject.PerformMovement`에서 `body.Cast` + `shellRadius`로 정밀 충돌 처리. 플랫포머 정밀 제어의 표준 패턴 — **EerieVillage 계승 권장** 3. **Health 기본값 1**: 기획 코어 룰 7 "라이프 1"과 이미 정합. 추가 수정 불요. 단 `maxHP=1` 상태에서 **i-frame 로직 부재** → P0 구현 필요 (개발 03 §3-1) 4. **단일 씬 한계**: 마을·전투 분리를 위해 **씬 분할 or 상태 기반 영역 전환** 설계 필수 (개발 03 §2-1) 5. **공격 입력 부재**: InputActions에 `Player/Attack` 액션 신규 정의 필요 (개발 03 §3-1) ## 7. 변경 이력 | 일시 | 변경 | 사유 | 기안 | |---|---|---|---| | 2026-04-23 | v0.1 템플릿 실측 분석 작성 | BT5-Dev 3단계 선행 분석 | 개발팀장 | ## 8. 참조 문서 - **기획**: `프로젝트/EerieVillage/기획/01·02·03·04·05_*.md` - **개발 후속**: `02_스크립트_분석.md`·`03_게임_제작_준비.md` - **BT.Framework**: `코어코드/BT.Framework/` (P29-3 활용 검토)