Unity 6 기반 게임 클라이언트 아키텍처 학습용 베이스 구조
이 레포지토리는 Unity 프로젝트가 커질 때 발생하는 구조적 문제를 해결하기 위한
Managers 아키텍처 패턴을 학습하기 위한 특강용 베이스 구조입니다.
"왜 이런 구조가 필요한가?"를 이해하는 것이 목표입니다.
@Managers (GameObject, DontDestroyOnLoad)
└── Managers.cs ← 단일 진입점 싱글톤
SubManagers (Plain C# Class, ISubManager)
├── ResourceManager ← 리소스 로드 / Instantiate / Destroy 래핑
├── PoolManager ← 오브젝트 풀링, 재사용 객체 관리
├── AudioManager ← BGM / SFX 재생 및 정지
├── DataManager ← 게임 데이터 저장 / 로드
└── UIManager ← UI 생성, Popup 스택 관리
외부에서는 항상 이렇게 접근합니다.
Managers.Audio.Play("Sounds/Attack");
Managers.UI.ShowPopupUI<UI_GameOver>();
Managers.Resource.Instantiate("Prefabs/Monster");
Managers.Pool.Pop(monsterPrefab);Assets/
├── Scenes/
│ └── TestScene.unity
├── Resources/
│ ├── EventSystem.prefab
│ └── UI/
│ ├── UI_TestScene.prefab
│ └── UI_TestPopup.prefab
└── Scripts/
├── Core/
│ ├── Define.cs
│ ├── ISubManager.cs
│ └── Managers.cs
├── Managers/
│ ├── AudioManager.cs
│ ├── DataManager.cs
│ ├── PoolManager.cs
│ ├── ResourceManager.cs
│ └── UIManager.cs
├── Pool/
│ └── Poolable.cs
├── Scenes/
│ ├── BaseScene.cs
│ └── GameScene.cs
└── UI/
├── UI_Base.cs
├── UI_Popup.cs
├── UI_Scene.cs
└── Test/
├── UI_TestPopup.cs
├── UI_TestScene.cs
└── UITest.cs
| 브랜치 | 설명 |
|---|---|
main |
완성된 구조, 바로 실행 가능 |
starter |
학습자는 starter 브랜치를 Fork 떠서 직접 SubManager를 구현해보는 것을 권장합니다.
1. 우측 상단 Fork 버튼 클릭
2. ❌starter 브랜치로 전환
3. ❌TODO 주석을 따라 SubManager 구현
4. main 브랜치와 비교하며 확인
요구사항
- Unity 6 이상
- Universal Render Pipeline (URP)
실행 방법
1. 레포지토리 Clone 또는 Fork
2. Unity 6에서 프로젝트 열기
3. TestScene 실행
4. 키 입력으로 테스트
- 1 키: Popup UI 열기
- 2 키: Popup UI 닫기
이 구조를 이해하기 위한 선수지식 학습 순서입니다.
| 순서 | 주제 |
|---|---|
| 01 | 메모리 영역 이해하기 (static / Stack / Heap / GC) |
| 02 | Object와 Instance (class / new / 참조) |
| 03 | MonoBehaviour와 Unity 생명주기 |
| 04 | static과 Singleton |
| 05 | Managers 구조와 책임 분리 |
이 구조는 정답이 아닙니다. 프로젝트가 커질수록 아래 한계가 드러납니다.
- 모든 코드가
Managers를 직접 참조 → 전역 의존성 증가 - 초기화 순서가 꼬이면 NullReferenceException 발생
- God Object 문제: Managers가 너무 많은 것을 알게 됨
다음 단계로 나아가기 위한 키워드:
| 키워드 | 해결하는 문제 |
|---|---|
Addressables |
Resources.Load 한계 극복 |
UniTask |
Coroutine 복잡성 해결 |
VContainer |
전역 의존성 / God Object 해결 |
R3 |
이벤트 / 데이터 흐름 개선 |
MIT License — 자유롭게 활용하세요.