권장 디렉토리 구조
D:\\Github\\ToyboxNightmare\\
├─ .git/
├─ External/
│ └─ GameFramework/ ← 외부 C# 프레임워크 (별도 .csproj)
│ ├─ .git/ ← (옵션) Git 서브모듈로 관리 가능
│ ├─ GameFramework.csproj
│ ├─ Runtime/
│ └─ ... (소스 코드)
├─ Assets/
│ ├─ Plugins/
│ │ ├─ GameFramework.dll ← 빌드된 DLL (자동 복사)
│ │ └─ GameFramework.pdb ← Debug 빌드 시에만
│ ├─ Scripts/ ← 게임 로직 (DLL 참조)
│ └─ ...
├─ Packages/
│ └─ manifest.json ← Unity.SharpZipLib 등록
└─ ProjectSettings/
이 구조의 장점
1. Assets 외부 배치의 핵심 이점
External/ 폴더를 컴파일 대상에서 제외한다unsafe 코드, 고급 C# 문법 사용 시 Unity 설정과 무관하게 자유롭게 개발할 수 있다.csproj 파일 기반으로 Visual Studio의 모든 기능(리팩토링, 분석, NuGet 등)을 완전히 활용할 수 있다2. 빌드 산출물만 Unity로 전달
3. Git 서브모듈 활용 (선택적)
# GameFramework를 별도 저장소로 관리하는 경우
git submodule add [<https://github.com/yourname/GameFramework.git>](<https://github.com/yourname/GameFramework.git>) External/GameFramework
피해야 할 안티패턴
| 구조 | 문제점 |
|---|---|
Assets/GameFramework/ (소스 직접 배치) |
Unity의 제한된 C# 컴파일러 사용, unsafe/고급 기능 제약, asmdef 복잡도 증가 |
| Plugins에 의존성 DLL 중복 복사 | SharpZipLib 등 Unity 패키지와 충돌 (중복 타입 정의 오류) |
| Debug/Release DLL 혼재 | 런타임 동작 불일치, 디버깅 혼란 |