# Unity 프로젝트 구조 분석 — 수상한 잡화점 (DeckBuilding) > **작성일**: 2026-04-14 > **조사 경로**: `D:/NerdNavis/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 통합 개발 도구 ### NerdNavisCore - 외부 경로 `C:\Project\Core\NerdNavisCore\` 에서 참조 (별도 빌드/링크) - 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 ├── 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.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), **네임스페이스는 부재** | 🟡 보통 | | **코드 범용성** | 공용 로직은 NerdNavisCore로 분리, `Assets/Script`는 프로젝트 전용 | ✅ 양호 | ## 주요 리스크 (개발실 후속 판단 필요) 1. **씬 `51_jjonga.unity`** — 용도 불명, 프로덕션 빌드 포함 여부 확인 필요 2. **네임스페이스 부재** — 클래스명 충돌 위험, 장기적 리팩토링 대상 3. **DOTween 설치 경로 불명** — manifest에 없으므로 신규 환경 구축 시 문제 가능 4. **Firebase 주석처리** — 분석/크래시 리포팅 없음, 프로덕션 런칭 전 재활성화 판단 필요 5. **51_jjonga 외 개발 내부 씬(96~99)** — 배포 빌드 씬 리스트에서 제외되어 있는지 확인 필요