1. Singleton 이란?
다른 클래스에서 공통적으로 많이 접근하는 클래스가 있을 경우 (ex GameManager)
해당 클래스의 인스턴스(실체)를 하나로 유지하여 프로젝트에서 클래스의 데이터를 유지하고 객체를 단일화한다.
2. Unity에서 Singleton을 사용하는 이유
Manager류의 게임을 관리하는 오브젝트를 생성할 때
인스턴스가 하나이기 때문에 데이터를 쉽게 유지할 수 있고,
정적 선언을 하기 때문에 그 유지된 데이터를 다른 클래스에서 쉽게 접근하여 사용이 가능하다.
3. 예제
public class GameManager : MonoBehaviour
{
static GameManager _instance = null;
public static GameManager instance {
get {
if (_instance == null) {
_instance = new GameManager();
}
return _instance;
}
}
void Awake() {
if (_instance == null) {
_instance = this;
}
else if (_instance != null) {
Destroy(this.gameObject);
}
DontDestroyOnLoad(this.gameObject);
}
}
4. 이외의 방법
이외에도 MonoBehaviour를 상속받지 않고 사용하는 방법도 있다.
이 경우 하이어라키에 있는 인스턴스를 신경쓰지 않아도 되는 장점이 생긴다.
즉, 씬 이동시 인스턴스가 재생성 되는 과정을 신경쓰지 않아도 되니 Awake에서 다시 검사해주는 과정이 필요가 없다.
하지만, 말 그대로 메모리에만 존재하고 하이어라키에는 보이지 않아 인스펙터로 시각적으로 정보를 확인할 수 없다.
개발하는 입장에서 헷갈릴 수 있어 자주 사용하는 방법은 아니다.