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

7.6 KiB

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<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)

없는 것

  • DOTweenDOTWEEN define은 있으나 manifest 부재 (로컬 설치 추정)
  • Zenject/VContainer — DI 프레임워크 없음
  • UniTask — 비동기 유틸 없음
  • Firebase — manifest 없음, 코드에 주석처리됨

아키텍처 패턴

싱글톤 기반

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), 네임스페이스는 부재 🟡 보통
코드 범용성 공용 로직은 NerdNavisCore로 분리, Assets/Script는 프로젝트 전용 양호

주요 리스크 (개발실 후속 판단 필요)

  1. 51_jjonga.unity — 용도 불명, 프로덕션 빌드 포함 여부 확인 필요
  2. 네임스페이스 부재 — 클래스명 충돌 위험, 장기적 리팩토링 대상
  3. DOTween 설치 경로 불명 — manifest에 없으므로 신규 환경 구축 시 문제 가능
  4. Firebase 주석처리 — 분석/크래시 리포팅 없음, 프로덕션 런칭 전 재활성화 판단 필요
  5. 51_jjonga 외 개발 내부 씬(96~99) — 배포 빌드 씬 리스트에서 제외되어 있는지 확인 필요