🧠 Summary
Unity와 Photon Fusion 2를 사용하여 네트워크 게임에서의 동기화 처리, 오브젝트 풀링 시스템 설계, 디자인 패턴(Singleton/Factory)에 대해 학습하였다.
📌 주요 키워드
Unity, Photon Fusion 2, Object Pooling, Singleton, Factory Pattern, ChangeDetector, SpawnManager
🔍 배운 내용 상세 정리
🕸️ Fusion 네트워크 동기화 시스템
- [Networked] 속성은 상태 권한이 있는 클라이언트만 값 변경 가능.
- 무권한 클라이언트가 값을 변경하면 이는 예측 상태로 반영되며 나중에 실제 값으로 덮어써짐.
🎯 ChangeDetector
- ChangeDetector는 네트워크 동기화된 값의 변경을 감지.
- RPC보다 정확한 타이밍으로 반응하여, 효과 처리에 적합.
- 예: 색상 변경 시 MeshRenderer 업데이트.
🚫 예외: FailedClientCantSpawn
- 상태 권한 없는 클라이언트가 Runner.Spawn() 호출 시 발생.
- 항상 StateAuthority를 가진 주체에서 Spawn 수행 필요.
🏗️ 오브젝트 풀링 & SpawnManager 설계
✅ 구조
SpawnManager (Singleton)
├── PoolManager<Item>
│ ├── ItemInstance
│ └── ...
└── PoolManager<Enemy>
├── EnemyInstance
└── ...
- PoolManager<T>는 Unity의 ObjectPool<T>를 활용.
- 생성된 오브젝트는 SpawnManager 하위로 정리되어 Hierarchy 시각화 용이.
✅ 딕셔너리 vs 해시셋
- 딕셔너리는 key-value 매핑이 가능해 타입별 오브젝트 관리에 적합.
- enum 사용 시 컴파일 안정성 증가, string 사용 시 런타임 확장성 용이.
✅ 확장성의 의미
- 런타임 시 새로운 타입을 쉽게 추가하거나 리소스를 주입할 수 있음.
- 운영 중 새 리소스를 추가하고도 풀 시스템이 대응 가능함.
🧱 디자인 패턴 정리
✔️ 싱글톤
public static GameManager Instance {
get {
if (instance == null)
instance = new GameObject("GameManager").AddComponent<GameManager>();
return instance;
}
}
- Awake에서 중복 방지 및 DontDestroyOnLoad() 처리.
- SpawnManager 역시 이 패턴 사용.
✔️ 팩토리 패턴
- 오브젝트 생성을 중앙화하고 초기화 흐름을 통합.
- 오브젝트 풀링과 함께 사용 시, 재사용 로직과 초기화를 분리 가능.
🛠️ 기타
- abstract class는 인터페이스와 MonoBehaviour 동시 상속 가능.
- Unity 기본 ObjectPool<T> 사용 가능하며, 커스터마이징 쉬움.
- PoolManager<T>의 생성자에서 오브젝트를 부모 GameObject 하위로 설정 가능.
🔄 오늘의 고민과 해결
고민해결
| string 키를 쓰는 이유? | enum은 고정되어 있어 확장성 부족, string은 런타임 등록 가능 |
| GameManager 없이 코드로 GameObject 만들 수 있나? | new GameObject() + AddComponent<T>() 방식으로 가능 |
| 풀 오브젝트들이 Hierarchy에서 안 보이면? | 풀의 부모 Transform을 SpawnManager로 지정해 시각화 가능 |
🔚 회고
- 오브젝트 풀링 구조를 계층적으로 구성하면 디버깅이 수월하고 유지보수에 용이하다는 점을 알게 됨.
- Fusion의 동기화 흐름은 예측과 실제 상태의 차이를 명확히 이해해야 함.
- 디자인 패턴을 상황에 맞게 조합해서 사용하는 감각을 익히는 중.
'[내일배움캠프 Unity 9기]' 카테고리의 다른 글
| 05/28 TIL Unity 매니저 싱글톤 설계 및 Resources.Load 문제 디버깅 (0) | 2025.05.28 |
|---|---|
| 05/27 TIL 오브젝트 풀에 관한 고찰 (0) | 2025.05.27 |
| 05/23 TIL 개인 과제 제출 및 팀프로젝트 시작 전 퓨전2 입문하기 (0) | 2025.05.23 |
| 05/22 TIL 및 개인 과제 마무리 (0) | 2025.05.22 |
| 05/21 TIL (0) | 2025.05.21 |