From 518dca0252a19113153e600c05a097d9cae5aea9 Mon Sep 17 00:00:00 2001 From: swrring Date: Thu, 20 Aug 2026 12:52:13 +0900 Subject: [PATCH] =?UTF-8?q?docs(BT13-GodDem):=20Phase=20B=20=EC=95=84?= =?UTF-8?q?=EC=9B=83=EA=B2=8C=EC=9E=84=20=EC=99=84=EB=A3=8C=20+=20EerieVil?= =?UTF-8?q?lage=20=EC=8A=A4=ED=82=AC=EC=9D=B4=EC=8B=9D=20=EC=84=A4?= =?UTF-8?q?=EA=B3=84=C2=B7=EC=B0=A9=EC=88=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Phase B 아웃게임(로비/상점/Hero) 완료 검증 기록 (GodDem 3832961) - EerieVillage 스킬 이식 설계 SOT v1 (Platformer 강결합→FX+데이터 이식·이펙터 재구현) - EerieVillage 디렉토리 등록 Co-Authored-By: Claude Fable 5 --- .claude/settings.json | 3 +- .../기획/GodDem/2026-08-20_스킬이식_설계_v1.md | 74 +++++++++++++++++++ 공유/대화로그/GodDem/2026-08-19.md | 16 +++- 3 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 공유/기획/GodDem/2026-08-20_스킬이식_설계_v1.md diff --git a/.claude/settings.json b/.claude/settings.json index c916617..abaaa2e 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -4,7 +4,8 @@ "defaultMode": "dontAsk", "additionalDirectories": [ "E:\\NerdNavis\\GodDem", - "C:\\Users\\sw\\Downloads\\Layer Lab" + "C:\\Users\\sw\\Downloads\\Layer Lab", + "E:\\EerieVillage" ], "allow": [ "Read", diff --git a/공유/기획/GodDem/2026-08-20_스킬이식_설계_v1.md b/공유/기획/GodDem/2026-08-20_스킬이식_설계_v1.md new file mode 100644 index 0000000..34a0d4b --- /dev/null +++ b/공유/기획/GodDem/2026-08-20_스킬이식_설계_v1.md @@ -0,0 +1,74 @@ +# GodDem ← EerieVillage 스킬 시스템 이식 설계 SOT v1 + +> **작성**: Fable5(총괄PM) 2026-08-20 · **PD 지시**: EerieVillage(E:\EerieVillage)의 레벨업 스킬(3종 선택) + 연출 이펙트를 GodDem SurvivalBattle에 이식 +> **위임**: 개발팀장(Opus) → C49 · 단계 분할(S1 프레임워크+대표3종 → S2 확장) + +## 0. 핵심 판정 (Explore 실측 근거) + +EerieVillage 스킬 시스템은 **Platformer 스타터킷에 강결합**(`.asmdef` 없이 단일 어셈블리, `Platformer.Mechanics.Health`·`EnemyController`·`Core.Simulation` 직접 참조). **폴더 통째 복사 = 컴파일 불가.** +→ **"자산은 그대로, 로직은 GodDem 구조로 재구현"** 방식. + +| 구분 | 처리 | 근거 | +|------|------|------| +| **데이터 클래스** `SkillDataAsset`·`ActiveSkillData`·enum(`ActiveCategory`·`ActiveTrigger`·`ProjectileTrajectory`·`RangeTier`·`AttributeTags`·`TypeTags`) | **그대로 이식** | Platformer 무의존 순수 ScriptableObject. 단 base의 Platformer using이 있으면 제거 | +| **스킬 데이터** `Assets/Resources/Skills/Active/*.asset` (ActiveSkillData 14개) | **그대로 이식** (Resources 경로 유지) | FX GUID 참조 보존 필요 | +| **FX 프리팹** (ParticleSystem, `FX_BloodSkill`·`FX_DarkSkill`·`FX_FireSkill`·`FX_Slash_Collection` 등) | **사용분 복사** (GUID 유지) | 연출 재현. .asset이 참조하는 GUID가 깨지지 않게 | +| **이펙터** `Scripts/Skills/Effectors/*` | **GodDem 재구현** | Platformer 강결합(`FindObjectsByType`·`Health.Decrement`) | +| **런타임** `ActiveSkillRuntime`·`PlayerSkillInventory`·`SkillRuntimeFactory` | **경량 재구현** | Simulation 이벤트버스 의존 제거 → 직접 호출 | +| **버림** `SkillPlaceholders`·`SkillCardPlaceholder`·`IngameChoiceSkillUI`(빈 stub)·Passive/Awakening stub(효과 없음) | 미이식 | 실런타임 미사용 | + +## 1. GodDem 어댑터 매핑 (이펙터 재구현 계약) + +| EerieVillage(Platformer) | GodDem SurvivalBattle | +|--------------------------|------------------------| +| `FindObjectsByType()` + Layer "Enemy" | `SurvivalBattleManager.Instance.Enemies` (List, `!IsDead` 필터) | +| `Health.Decrement(int)` / `DecrementBypassInvuln` | `SurvivalUnit.TakeDamage(float)` | +| `PlayerController.Facing`(Vector2) | 중앙 고정 → **가장 가까운 적 방향** 계산(`Player.transform.position` 기준) | +| `Health.IsAlive` | `!SurvivalUnit.IsDead` | +| `Simulation.Schedule()` | 직접 호출 (이벤트버스 불필요) | +| `EnemyDeath` 체인 + `ExperienceSystem` | 기존 `SurvivalBattleManager.OnEnemyDied`(골드·EXP 이미 처리) | +| 2D 물리 `Physics2D.OverlapBox/Raycast` | 그대로 (GodDem도 2D) — Layer·지면 raycast만 GodDem에 맞게 | +| FX 스폰(`Instantiate`+`ParticleSystem.Play`+`FxAutoDestroyUnscaled`) | 그대로 (풀 없이 Instantiate/Destroy) | + +## 2. 스킬 목록 (레벨업 풀 노출 10종 — 카테고리별 이펙터) + +| CardId | 스킬 | Category | 이펙터(재구현) | +|--------|------|----------|----------------| +| A02 | 파이어볼 | Projectile(Line) | 투사체 직선 → 최근접 적 방향 | +| A15 | 추적화염구 | Projectile(Homing) | 유도 투사체 | +| A13 | 천둥발 | Projectile(Arc/관통) | 관통 투사체 | +| A08 | 저주의화살 | Projectile(TargetEnemy) | 조준 투사체 + 디버프스택 | +| A05 | 학익진 | MeleeArea | 플레이어 주변 범위 | +| A12 | 정화의빛 | MeleeArea(2차판정) | 범위 + 2차 히트박스 | +| A04 | 천둥 | MeleeArea(낙뢰) | 화면 내 랜덤 적 낙뢰 | +| A_Laser | 용염레이저 | MeleeArea(레이저) | 방향 긴 박스 지속피해 | +| A06 | 독늪 | PlacementPersistent | 지면 배치 지속 장판 | +| A11 | 정령불 | Minion | 회전 방패 소환 | +| A10 | 분신 | Minion | 플레이어 복제 재발동 | + +**Phase S1 대표 3종**: A02 파이어볼(투사체) · A05 학익진(범위) · A04 천둥(낙뢰) — 카테고리 3종 커버. +**Phase S2**: 나머지 확장. + +## 3. 레벨업 연결 (기존 시스템 확장) + +- 현재 `SurvivalSkill.cs` = 스탯 버프 3종 택1. Play_UI_ChoiceSkill UI는 Phase A 완성. +- 확장: 스킬 종류를 **패시브(스탯버프, 현행)** + **액티브(발동형, 신규)** 2계층으로. 레벨업 3종 택1 풀에 액티브 스킬 혼합. +- 액티브 스킬 습득 → `SurvivalActiveSkillRunner`(신규 MonoBehaviour)가 쿨타임 관리 → 발동 시 이펙터 Trigger. +- 재픽 시 레벨업(StackLevel++) → 데미지/쿨타임 강화. +- 데미지 = `BaseDamage × Player.Attack 연동 × StackFactor` (GodDem 스케일 조정). + +## 4. 단계·위임 + +| Phase | 범위 | 검증 | +|-------|------|------| +| **S1** | 데이터클래스 이식 + FX 도입(대표3종 사용분) + 이펙터 3종(투사체/범위/낙뢰) + `SurvivalActiveSkillRunner` + 레벨업 연결 | Play — 스킬 습득 후 실제 발동·FX·적 피해·처치 | +| **S2** | 나머지 이펙터 7종(유도/관통/조준/2차판정/레이저/독늪/분신) 확장 | Play 각 스킬 | +| **S3** | 밸런스 튜닝(데미지/쿨타임 GodDem 스케일) | balance-designer | + +## 5. 주의 + +- Unity MCP 단일 인스턴스 = 개발팀장 전담. +- FX 481 프리팹 전량 복사 금지 — .asset 참조 GUID 추적해 **사용분만**(무거움 방지). 개발팀장이 각 .asset의 FX GUID를 실측해 선별. +- `ActiveSkillData` base가 Platformer using 참조 시 제거(순수 데이터화). +- EerieVillage = 우리 조직 자산(BT12-Dev 구축). 저작권 문제 없음. +- 밸런스 수치는 EerieVillage 값 이식 후 GodDem 스케일(Player.Attack 22·적 HP 60~) 대비 재조정 필요(S3). diff --git a/공유/대화로그/GodDem/2026-08-19.md b/공유/대화로그/GodDem/2026-08-19.md index 1a70d03..dab9307 100644 --- a/공유/대화로그/GodDem/2026-08-19.md +++ b/공유/대화로그/GodDem/2026-08-19.md @@ -138,8 +138,20 @@ - **개발팀장 정직보고 수용**: 폰트 계약 정정(`Resources/Fonts/ONEMobilePOP SDF`는 FontAsset 오타입 → `UGUI/Fonts/ONEMobilePOP_TMP` TMP_FontAsset 사용), 가짜 배경·미사용 노드(조이스틱·상자)·가짜 보상(젬300·상자) 숨김, 승리 트리거는 엔드리스 구조라 Stage 증가 감지로 설계(매니저 무수정). - **미세 이슈**(후속): 보상 코인 숫자 아이콘 겹침(기능 정상), SurvivalHUD.cs 파일 존치(컴포넌트만 제거), Button_Pause 무동작, 적 개별 HP바 미구현. -### 6-F-2. Phase B 아웃게임 — 위임 중 -- 로비(Lobby.prefab·PLAY→SurvivalBattle)/상점(Shop.prefab)/Hero(Equipment.prefab). 방향: SurvivalBattle에 맞는 심플 아웃게임(기존 가챠/카드/룬 메타는 데이터 불일치로 미이식, 재화만 CurrencyManager 재사용). 개발팀장(Opus) 위임 진행 중. +### 6-F-2. Phase B 아웃게임 — 완료·검증 (GodDem `3832961`) +- **신규 컨트롤러 방식**: 개발팀장(Opus)이 기존 `MainDocument.prefab`(13만 라인·nested 6331) 개조 대신 `SurvivalLobbyController.cs` 신규 — Layer Lab `Lobby/Shop/Equipment` 프리팹 3종을 전체화면 패널 Instantiate + 폰트 스왑 + 런타임 결선. 기존 대전형 컨트롤러(UGUIUIControllers·LobbyController) 비활성화(비파괴). +- **PM 직접 검증**(스크린샷 3장 실측): 로비(재화헤더·캐릭터·**플레이 버튼**·하단탭 — 원작 1_Lobby 동일) / 상점(스페셜 오퍼·데일리 딜 — 13_Shop 동일) / Hero(캐릭터·장비슬롯6·공격84/체력750·전체해제·합성·능력치 — 6_Equipment 동일). **한글 정상·콘솔 0**. +- **핵심 연결**: `SceneManager.LoadScene("SurvivalBattle")` 실전환 검증 + `CurrencyManager` 옵저버 라이브 바인딩(349.81k 실시간 갱신). EditorBuildSettings에 SurvivalBattle 씬 등록. +- **개발팀장 정직보고**: 폰트 자산 함정(`Resources/Fonts/ONEMobilePOP SDF`=TextCore FontAsset·null반환 → `UGUI/Fonts/ONEMobilePOP_TMP`=TMP_FontAsset 사용). Phase A도 동일 폴백코드 보유하나 SerializeField 할당으로 실동작(한글 정상 확인). Lobby 단독 Play 콘솔 에러 2건은 소환대전 `LobbyScene.OnEnable`(비활성화로 제거). +- **후속(S2 이후)**: 상점 구매·Hero 장착/합성 내부 로직 미결선(SurvivalBattle 영구 메타 미존재, 설계상 후속). BaseLoading→Lobby 전체부팅 검증·로비 장식크롬(Friends/Ranking 등 영문) 후속. + +## 6-G. EerieVillage 스킬 시스템 이식 — 착수 (2026-08-20) + +- **PD 지시**: EerieVillage(E:\EerieVillage) 프로젝트의 레벨업 스킬(3종 선택) + 연출 이펙트를 GodDem SurvivalBattle에 이식. "EerieVillage에 사용·구현된 스킬을 이식". +- **Explore 실측 (조사)**: EerieVillage = 우리 조직 BT12-Dev 구축 조선무협 스킬 시스템. 액티브 14종(Resources/Skills/Active, 레벨업 풀 10종: 파이어볼·천둥·학익진·독늪·저주화살·분신·정령불·정화의빛·천둥발·용염레이저) + 이펙터 13종(투사체/유도/관통/범위/낙뢰/레이저/독늪/소환/분신/상태이상) + FX 481프리팹(ParticleSystem, 혈·암흑·화염·참격). +- **핵심 판정**: 스킬 시스템이 **Platformer 스타터킷 강결합**(`.asmdef` 없음·`Health`·`EnemyController`·`Simulation` 직접참조) → **통째 복사 불가**. 방식 = **데이터클래스(ActiveSkillData 순수 SO)·스킬.asset·FX는 그대로 이식 + 이펙터는 GodDem 구조로 재구현**(적탐지=SurvivalBattleManager.Enemies·데미지=SurvivalUnit.TakeDamage·발사원=Player.transform). +- **설계 SOT**: `공유/기획/GodDem/2026-08-20_스킬이식_설계_v1.md` (§0 이식판정·§1 어댑터매핑·§2 스킬목록·§3 레벨업연결·§4 S1~S3 분할). +- **위임**: 개발팀장(Opus) Phase S1(데이터클래스+FX+이펙터 3종[파이어볼/학익진/천둥]+SurvivalActiveSkillRunner+레벨업 연결) 진행 중. S2=나머지 7종, S3=밸런스. ### 6-F-3. 도구 자동화 근본원인 규명 - PD 반복 불만("몇 번을 강조하냐"). **근본원인**: `permissions.defaultMode: dontAsk`는 **세션 시작 시점 1회 로드·고정**. 세션 도중 설정 변경은 defaultMode에 미반영 → 세션 중 처음 쓰는 도구(MCP·위임 도구)마다 프롬프트. **완전 해결 = 세션 재시작**. 조치: allow에 위임 도구(Task·SendMessage·Workflow 등) 전면 추가 + `settings.local.json` dontAsk. **PD 재시작 완료 → 이후 프롬프트 소멸 확인**.