학습 동기
DontDestroyOnLoad를 적용한 GameManager, ResourcePool 등이 씬 전환 이후 중복 생성되어 실행 중인 게임 오브젝트가 2개가 되는 문제가 발생했다. 싱글톤 패턴을 통해 중복 생성을 방지하려 했지만, Unity 특유의 씬 초기화 타이밍 이슈로 인해 중복 생성이 발생한 것으로 판단되었고, 이를 해결하는 안정적인 구조를 고민하게 되었다.
학습 내용
Awake() 단계에서 instance == null을 조건으로 현재 인스턴스를 할당하고, 이미 인스턴스가 존재한다면 중복 오브젝트는 즉시 Destroy(gameObject) 처리하는 구조로 정리하였다. 또한 FindObjectsOfType<T>().Length > 1를 이용해 더 명확히 중복 여부를 판단하도록 보완하였다.
기존 구조에서는 DontDestroyOnLoad가 붙은 오브젝트가 씬 전환 시 자동으로 생성되면서 중복되는 상황이 발생했는데, 이를 방지하기 위해 씬 진입 전에 필요한 매니저 오브젝트가 존재하는지 체크하고, 없을 경우에만 생성하도록 구성하는 방식으로 개선을 진행했다.
To-do
- Singleton을 통합 관리하는 BootstrapScene 구성 여부 검토
- DontDestroyOnLoad와 Addressable 간 충돌 방지 구조 정립
- 각 Singleton의 초기화 순서를 명확히 하기 위한 InitManager 구현 고려
- GameManager가 모든 초기화를 담당하는 구조 → 역할 분산 고려
주의점
싱글톤 패턴은 매우 직관적이고 편리하지만, Unity 환경에서는 DontDestroyOnLoad와 결합될 때 예기치 않은 중복 생성이나 순서 문제로 이어질 수 있다.
'Unity > Unity 개발' 카테고리의 다른 글
| Node.js 기반 게임 API 서버 설계 (0) | 2025.06.12 |
|---|---|
| Photon Networking (1) | 2025.06.12 |
| 마이닝 애니메이션 트러블슈팅 (1) | 2025.06.04 |
| 인벤토리 UI 연동 및 Timeline 연출 구현 (1) | 2025.06.04 |
| 스테이지 기반 자원 리스폰 시스템 설계 (0) | 2025.06.04 |