들어가기 앞서 TMI.
어제는 UI 관련, 오늘은 AudioManager를 관리하면서 Manager와 같은 관리 클래스에 대한 지식이 늘어난 거 같아 내용을 담아보겠습니다.
오늘 김영호 튜터님이 레벨업 특강 때 얘기해주셨는데 어떤 방법이던 정답은 없습니다.
하지만 주로 쓰이는 방법을 설명해주셨고 거기다가 오늘 제가 작업한 부분 또한 포함시켜 말해보겠습니다.
🎃 Manager 어떻게 만들어야할까?
매니저(Manager)는 게임 개발에서 특정 시스템이나 기능을 조율하고 관리하는 역할을 담당하는 클래스입니다.
매니저는 관리의 역할만을 수행하며, 실제 기능을 포함하지는 않는 것이 중요합니다.
참조 : 김영호 튜터님 자료
public class EnemyManager : MonoBehaviour
{
private List<Enemy> enemies = new List<Enemy>();
public void SpawnEnemy(Vector3 position)
{
var enemyPrefab = Resources.Load<GameObject>("EnemyPrefab");
var enemyInstance = Instantiate(enemyPrefab, position, Quaternion.identity);
enemies.Add(enemyInstance.GetComponent<Enemy>());
}
public void DestroyAllEnemies()
{
foreach (var enemy in enemies)
{
Destroy(enemy.gameObject);
}
enemies.Clear();
}
}
위 내용에서 볼 수 있듯이, 해당하는 데이터의 생성과 삭제를 관리합니다. 저도 이번에 보고 생각보다 매니저의 역할이 가볍다는 생각을 할 수 있었습니다. 게임에 쓰이는 리소스의 양과 매니저가 가져야하는 값에 따라 싱글톤도 어떻게 사용할지 나눌 수 있는데요.
싱글톤에 대한 정보는 아래와 같습니다.
싱글턴을 하나만 만들지, 여러 개를 만들지?
- 싱글턴 하나만 만들 때의 장점
- 전역적 접근: 싱글턴 인스턴스를 하나만 유지하면 언제 어디서든 접근할 수 있습니다.
- 상태 관리 용이: 모든 시스템이 하나의 인스턴스를 참조하므로 상태 관리가 직관적이고 간단합니다.
- 자원 절약: 하나의 인스턴스를 재사용하기 때문에 메모리 및 리소스를 절약할 수 있습니다.
- 싱글턴 여러 개를 만들 때의 장점
- 책임 분리: 각 매니저가 담당하는 책임을 분리하고, 각기 다른 시스템의 독립성을 보장할 수 있습니다.
- 유연성: 각 시스템에 대해 개별적으로 관리할 수 있어 시스템에 맞는 로직을 최적화할 수 있습니다.
- 확장성: 여러 개의 싱글턴을 사용함으로써 나중에 필요에 따라 새로운 매니저를 쉽게 추가할 수 있습니다.
주로 데이터 타입을 싱글톤하여 전역적으로 쓰면서 그 값이 사라지지 않게 하는 경우가 있고, 혹은 유틸리티와 같이 전역적으로 메서드를 사용하기 위해서도 사용합니다. 그래서 이번에 Manager 클래스도 GameManager에 전부 가져와서 Singleton에 넣는 방법을 보고 저도 그게 좋겠다는 생각을 했습니다.
싱글턴 하나로 관리하는 구조: GameManager와 하위 매니저의 역할 분리
1. 개념
- GameManager는 중앙 조율자 역할을 수행합니다.
- GameManager가 모든 작업을 처리하는 대신, 다른 매니저를 포함하여 각 매니저에 구체적인 작업을 위임합니다.
- 이 구조를 통해
- 책임 분리: 각 매니저는 자신의 역할에 집중.
- 중앙 관리: GameManager는 시스템 간의 흐름을 조율.
2. GameManager의 역할
- 시스템 초기화: 모든 매니저의 초기화 및 설정을 관리.
- 시스템 상태 확인 및 조율: 하위 매니저의 상태를 조회하고 명령을 전달.
- 전역 상태 관리: 게임의 전반적인 상태(시작, 종료, 일시정지 등)를 관리.
매니저 스크립트를 사용할 때는 데이터의 상태, 즉 생성과 삭제만 넣어보시면 책임분리도 확실하고 필요한 데이터만 관리하는 것에도 좋을듯 합니다.
'유니티 스파르타 캠프 8주차' 카테고리의 다른 글
250528 CompareTag 대신 TryGetComponent로 구별하기 (0) | 2025.05.28 |
---|---|
250526 유니티 스크립트패턴 MVC, MVVP 어떤 걸 써야할까? (1) | 2025.05.26 |