BurningTimesAi/프로젝트/수상한잡화점/개발/03_Unity프로젝트_구조_v1.md

179 lines
7.6 KiB
Markdown
Raw Normal View History

# Unity 프로젝트 구조 분석 — 수상한 잡화점 (DeckBuilding)
> **작성일**: 2026-04-14
feat(BT·신설): 조직 전환 Phase 2-A — Skill/Framework rename + 조직명 치환 + 새 프로젝트 셋업 PD님 2026-04-21 지시 8개 중 ②③④⑤⑥⑦⑧ 구조 전환부 이행 (①③ 노하우 재정리는 Phase 2-B, 삭제는 Phase 2-C). ## 집행 내역 1. .claude/skills/너드나비스-코어룰/ → BurningTimes-코어룰/ (Move-Item, R096·R100) 2. 코어코드/NerdNavis.Framework/ → 코어코드/BT.Framework/ (Move-Item, R100·R073·R081) 3. sed 일괄 치환 201파일 (치환 순서: NerdNavis.Framework → BT.Framework **선행** → NerdNavis → BurningTimes → 너드나비스 → BurningTimes) - 제외: .git/·.live/·.bak_*·memory/org/audit_logs/ 4. paths.local.json.template: DISCORD_WEBHOOK 추가 + Unity/Framework __SET_PER_PC__ placeholder 5. paths.local.json 실파일 생성 (gitignore, 본 PC 실값: Unity E:/NerdNavis/EerieVillage + Discord 웹훅) 6. 프로젝트/EerieVillage/ 신설 (개발·기획·관리 + README: 기묘한 고을: 조선퇴마뎐, Unity 6000.3.13f1 LTS, 2D PlatformerMicrogame) 7. README.md clone URL NerdNavis_AiDev/BurningTimesAi.git 실 URL 정정 8. 대화로그 공유/대화로그/조직운영/2026-04-21.md 신설 9. PD 지시 로그 양팀 BT1·BT2 항목 등록 (진행중) ## NerdNavis 의도적 잔존 3종 (C5 정직성) - GIT_REMOTE URL: Gitea 조직 hierarchy NerdNavis_AiDev (PD 별도 결정 영역) - UNITY_PROJECT_ROOT 실값: E:/NerdNavis/EerieVillage (PD 지시 6번) - EerieVillage README "BT.Framework (구 NerdNavis.Framework 계승)" 이력 표기 ## 감사 pm-auditor 사전 감사 Critical 2건 (대화로그·PD 지시 로그 선등록) 정정 완료. 매니페스트: bt-phase2a. ## 보류 (Phase 2-B → 2-C 예정) - Phase 2-B: 전 에이전트 동원 수상한잡화점 시행착오 노하우 추출·조직 자산화 - Phase 2-C: 수상한잡화점 일괄 삭제 + memory/org feedback "수상한잡화점" → "이전 프로젝트" 추상화 + PD 지시 로그 초기화 + 조직공지 정리 + SKILL P17·P29 재해석 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 15:44:48 +00:00
> **조사 경로**: `D:/BurningTimes/FilGoodBandits/DeckBuilding/`
> **목적**: C11(개발자 관점) 점검을 위한 코드 구조 전수 파악
---
## 기본 정보
| 항목 | 값 |
|------|-----|
| **Unity 버전** | 6000.0.67f1 (LTS, Unity 6 최신) |
| **타겟 플랫폼** | Android(주), iOS, Windows 에디터 |
| **스크립팅 백엔드** | IL2CPP (Android) |
| **API 호환성** | .NET Standard 2.1 |
| **총 코드량** | ~300 C# 스크립트 (게임 256 + 툴 42) |
| **솔루션 프로젝트** | 13개 .csproj |
## 어셈블리 구성 (asmdef 10개)
**핵심 특징**: Assembly-CSharp(게임 로직 본체)에는 **asmdef가 없음** → 평탄한 단일 어셈블리에서 컴파일.
### ThirdParty 격리
- `PlayFab.asmdef`, `PlayFabSdkEditor.asmdef`, `PlayFabEditorExtensions.asmdef`
- `ACTk.Runtime.asmdef` (+Editor, Examples 3개) — AntiCheatToolkit
- `MCPForUnity.Runtime.asmdef` (+Editor) — Claude Code 통합 개발 도구
feat(BT·신설): 조직 전환 Phase 2-A — Skill/Framework rename + 조직명 치환 + 새 프로젝트 셋업 PD님 2026-04-21 지시 8개 중 ②③④⑤⑥⑦⑧ 구조 전환부 이행 (①③ 노하우 재정리는 Phase 2-B, 삭제는 Phase 2-C). ## 집행 내역 1. .claude/skills/너드나비스-코어룰/ → BurningTimes-코어룰/ (Move-Item, R096·R100) 2. 코어코드/NerdNavis.Framework/ → 코어코드/BT.Framework/ (Move-Item, R100·R073·R081) 3. sed 일괄 치환 201파일 (치환 순서: NerdNavis.Framework → BT.Framework **선행** → NerdNavis → BurningTimes → 너드나비스 → BurningTimes) - 제외: .git/·.live/·.bak_*·memory/org/audit_logs/ 4. paths.local.json.template: DISCORD_WEBHOOK 추가 + Unity/Framework __SET_PER_PC__ placeholder 5. paths.local.json 실파일 생성 (gitignore, 본 PC 실값: Unity E:/NerdNavis/EerieVillage + Discord 웹훅) 6. 프로젝트/EerieVillage/ 신설 (개발·기획·관리 + README: 기묘한 고을: 조선퇴마뎐, Unity 6000.3.13f1 LTS, 2D PlatformerMicrogame) 7. README.md clone URL NerdNavis_AiDev/BurningTimesAi.git 실 URL 정정 8. 대화로그 공유/대화로그/조직운영/2026-04-21.md 신설 9. PD 지시 로그 양팀 BT1·BT2 항목 등록 (진행중) ## NerdNavis 의도적 잔존 3종 (C5 정직성) - GIT_REMOTE URL: Gitea 조직 hierarchy NerdNavis_AiDev (PD 별도 결정 영역) - UNITY_PROJECT_ROOT 실값: E:/NerdNavis/EerieVillage (PD 지시 6번) - EerieVillage README "BT.Framework (구 NerdNavis.Framework 계승)" 이력 표기 ## 감사 pm-auditor 사전 감사 Critical 2건 (대화로그·PD 지시 로그 선등록) 정정 완료. 매니페스트: bt-phase2a. ## 보류 (Phase 2-B → 2-C 예정) - Phase 2-B: 전 에이전트 동원 수상한잡화점 시행착오 노하우 추출·조직 자산화 - Phase 2-C: 수상한잡화점 일괄 삭제 + memory/org feedback "수상한잡화점" → "이전 프로젝트" 추상화 + PD 지시 로그 초기화 + 조직공지 정리 + SKILL P17·P29 재해석 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 15:44:48 +00:00
### BurningTimesCore
- 외부 경로 `C:\Project\Core\BurningTimesCore\` 에서 참조 (별도 빌드/링크)
- 1375줄 규모, `DG.*` 네임스페이스 (→ `04_코어_범용성_분석_v1.md` 참조)
## Assets 폴더 구조 (Depth 1~2)
```
Assets/
├── Script/ ← 게임 로직 본체 (256개)
├── Tool/ ← 에디터 도구 (42개)
├── ResWork/
│ ├── Table/
│ │ ├── DeckBuilding.xlsm (4.8MB, SOT)
│ │ └── Export/ ← JSON 58개 + CSV
│ ├── UI_Prefab/ ← 800+ UI 프리팹
│ ├── Effect/ ← VFX (Klaus, Gabriel)
│ ├── Ingame/, MyUI/, Prefab/
│ └── UI_Animation/, UI_Image/, UI_Video/, UI_Title/, UI_Effect/
├── Res_Addr/ ← Addressable 그룹 (Ingame, MainUI, Monster, PC, ScenarioBG)
├── Scenes/ ← 7개 씬
├── ThirdParty/ ← PlayFab, GreeWebView, TMP
├── Plugins/
│ ├── CodeStage/ ← AntiCheatToolkit
│ ├── AllIn1SpriteShader/ ← UI 스프라이트 셰이더
│ ├── Android/, iOS/, tvOS/
├── Firebase/ ← 비활성 (코드에 주석처리)
├── Adaptive Performance/ ← Google/Samsung 성능 조정
└── unity-mcp/ ← Claude Code MCP
```
## Scripts 구조 (256개)
```
Assets/Script/
├── InGame/ ← 전투 시스템 핵심
│ ├── Actor/ Actor.cs / PCActor.cs / MobActor.cs
│ ├── Mgr/ EffectMgr.cs, ProjectileMgr.cs
│ ├── Stage/ IngameStageData.cs, MonsterNodeControler.cs
│ │ ├── Card/ CampItemSelectCard.cs
│ │ └── Popup/ (Gift, Treasure, Steal, Script, BuffDebuff)
│ └── Util/
├── Server/ ← PlayFab 통신
│ ├── ServerInfo.cs ★ 싱글톤, 12시간 자동 재로그인
│ ├── ServerClass.cs
│ └── FC_*, SC_* Request/Response
├── Table/Tables/ ← 자동 생성 58개 (table_cardlist.cs 등)
├── Manager/ GameManager, Title_Mgr, AddrResourceMgr, DataCheckMgr, ErrorLogHookManager
├── My/ MyCoroutine, MyValue, MyEnum, MyText, MyClass, CryptoUtil, DSUtil
├── Template/ MonoBehaviourSingletonTemplate<T>
├── UGUI/
│ ├── Title/, Lobby/ (MainMenu, Explore, Attandance, CatTrade, ETC)
│ ├── Ingame/ (ETC, Result)
│ ├── Common/ (GameUI, ItemSimpleCard, GetItem)
│ ├── Manager/ (UIAtlasMgr, uScrollViewMgr, uScrollViewArrMgr)
│ ├── BackKey/, Util/ (SafeArea, FollowTextEnd)
│ └── zTestUI/
├── Addressable/ AddrHandleBase, AddressableReleaseSelf
└── Info/ ActorInfo, ADInfo, InappInfo
```
### 네임스페이스 규칙 (중요 발견)
**대부분 네임스페이스 없음 (global)** — 예외는 `FilGoodBandits` (SafeArea.cs 1개만).
→ C11(코드 구조 직관성) 관점에서 **네임스페이스 체계 부재**. 향후 리팩토링 시 `FilGoodBandits.InGame.*`, `FilGoodBandits.UGUI.*` 등으로 정리 필요 (우선순위는 낮음 — 기능 동작에는 영향 없음).
## 씬 구성 (7개)
| 씬 | 역할 |
|---|------|
| `01_Title.unity` | 부트스트랩 (PlayFab 로그인, 데이터 로드) |
| `02_Game.unity` | 메인 (로비·스테이지·전투 통합) |
| `51_jjonga.unity` | **용도 불명** (개발 내부용 추정) |
| `96_Tool_MobScale.unity` | 몬스터 스케일 조정 |
| `97_Tool_Effect.unity` | 이펙트 테스트 |
| `98_Tool_Mob.unity` | 몬스터 디버깅 |
| `99_Tool.unity` | 범용 도구 패널 |
## 패키지 의존성 (Packages/manifest.json)
### 핵심
- `com.unity.addressables 2.8.0` — 번들 관리
- `com.unity.render-pipelines.universal 17.0.4` — URP
- `com.unity.timeline 1.8.10`
### 모바일
- `com.unity.adaptiveperformance.google.android 5.1.6`
- `com.unity.adaptiveperformance.samsung.android 5.1.0`
- `com.unity.feature.mobile 1.0.0`
### UI/기타
- `com.coffee.ui-particle 4.9.0` (GitHub)
- `com.unity.nuget.newtonsoft-json 3.2.1`
- `com.lupidan.apple-signin-unity 1.5.0` (GitHub)
### 없는 것
- **DOTween** — `DOTWEEN` define은 있으나 manifest 부재 (로컬 설치 추정)
- **Zenject/VContainer** — DI 프레임워크 없음
- **UniTask** — 비동기 유틸 없음
- **Firebase** — manifest 없음, 코드에 주석처리됨
## 아키텍처 패턴
### 싱글톤 기반
```csharp
ServerInfo.Ins // PlayFab 허브
GameManager.Ins // 추정
MonoBehaviourSingletonTemplate<T>.Ins // 범용 템플릿
```
### 액터 시스템 (전투)
```
Actor (기본)
├── PCActor (플레이어, HP/Shield/Buff/Card/Animation)
└── MobActor (몬스터, 동일 구조)
```
### 데이터 주도
```
DeckBuilding.xlsm → Export/*.json (58개)
→ Script/Table/Tables/*.cs (자동 생성 58개)
→ 게임 로직
```
## 진입 가이드 (신규 개발자용)
| 단계 | 읽을 파일 | 소요 |
|------|----------|------|
| 1. 공용 유틸 | `My/MyCoroutine.cs`, `MyEnum.cs`, `Template/MonoBehaviourSingletonTemplate.cs` | 30분 |
| 2. 데이터 구조 | `Table/Tables/*` 훑기, `Server/ServerClass.cs`, `Info/` | 1h |
| 3. 매니저 | `Server/ServerInfo.cs`, `Manager/Title_Mgr.cs` | 1h |
| 4. 전투 시스템 | `InGame/Actor/Actor.cs`, `PCActor.cs`, `MobActor.cs`, `Mgr/EffectMgr.cs` | 2h |
| 5. UI | `UGUI/Common/GameUI.cs`, `UGUI/Lobby/MainMenu/` | 1h |
| 6. 씬 통합 | `01_Title.unity`, `02_Game.unity` | 1h |
## C11 관점 판정
| 기준 | 상태 | 평가 |
|------|------|------|
| **자원 효율성** | Addressable + IL2CPP + ACTk 적용 | ✅ 양호 |
| **코드 구조 직관성** | 폴더는 명확(InGame/UGUI/Server/Manager), **네임스페이스는 부재** | 🟡 보통 |
feat(BT·신설): 조직 전환 Phase 2-A — Skill/Framework rename + 조직명 치환 + 새 프로젝트 셋업 PD님 2026-04-21 지시 8개 중 ②③④⑤⑥⑦⑧ 구조 전환부 이행 (①③ 노하우 재정리는 Phase 2-B, 삭제는 Phase 2-C). ## 집행 내역 1. .claude/skills/너드나비스-코어룰/ → BurningTimes-코어룰/ (Move-Item, R096·R100) 2. 코어코드/NerdNavis.Framework/ → 코어코드/BT.Framework/ (Move-Item, R100·R073·R081) 3. sed 일괄 치환 201파일 (치환 순서: NerdNavis.Framework → BT.Framework **선행** → NerdNavis → BurningTimes → 너드나비스 → BurningTimes) - 제외: .git/·.live/·.bak_*·memory/org/audit_logs/ 4. paths.local.json.template: DISCORD_WEBHOOK 추가 + Unity/Framework __SET_PER_PC__ placeholder 5. paths.local.json 실파일 생성 (gitignore, 본 PC 실값: Unity E:/NerdNavis/EerieVillage + Discord 웹훅) 6. 프로젝트/EerieVillage/ 신설 (개발·기획·관리 + README: 기묘한 고을: 조선퇴마뎐, Unity 6000.3.13f1 LTS, 2D PlatformerMicrogame) 7. README.md clone URL NerdNavis_AiDev/BurningTimesAi.git 실 URL 정정 8. 대화로그 공유/대화로그/조직운영/2026-04-21.md 신설 9. PD 지시 로그 양팀 BT1·BT2 항목 등록 (진행중) ## NerdNavis 의도적 잔존 3종 (C5 정직성) - GIT_REMOTE URL: Gitea 조직 hierarchy NerdNavis_AiDev (PD 별도 결정 영역) - UNITY_PROJECT_ROOT 실값: E:/NerdNavis/EerieVillage (PD 지시 6번) - EerieVillage README "BT.Framework (구 NerdNavis.Framework 계승)" 이력 표기 ## 감사 pm-auditor 사전 감사 Critical 2건 (대화로그·PD 지시 로그 선등록) 정정 완료. 매니페스트: bt-phase2a. ## 보류 (Phase 2-B → 2-C 예정) - Phase 2-B: 전 에이전트 동원 수상한잡화점 시행착오 노하우 추출·조직 자산화 - Phase 2-C: 수상한잡화점 일괄 삭제 + memory/org feedback "수상한잡화점" → "이전 프로젝트" 추상화 + PD 지시 로그 초기화 + 조직공지 정리 + SKILL P17·P29 재해석 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 15:44:48 +00:00
| **코드 범용성** | 공용 로직은 BurningTimesCore로 분리, `Assets/Script`는 프로젝트 전용 | ✅ 양호 |
## 주요 리스크 (개발실 후속 판단 필요)
1. **씬 `51_jjonga.unity`** — 용도 불명, 프로덕션 빌드 포함 여부 확인 필요
2. **네임스페이스 부재** — 클래스명 충돌 위험, 장기적 리팩토링 대상
3. **DOTween 설치 경로 불명** — manifest에 없으므로 신규 환경 구축 시 문제 가능
4. **Firebase 주석처리** — 분석/크래시 리포팅 없음, 프로덕션 런칭 전 재활성화 판단 필요
5. **51_jjonga 외 개발 내부 씬(96~99)** — 배포 빌드 씬 리스트에서 제외되어 있는지 확인 필요