게임매니저나 다른 매니저는 오직 한 개의 인스턴스만으로 충분하지만, 작업을 진행하다 보면 나도 모르게 여러개의 인스턴스를 생성하는 경우가 생길 수 있다.
이를 방지하기 위하여 단 하나의 인스턴스만을 사용하도록 설계하는 것을 싱글톤 패턴이라 한다.
싱글톤 패턴은 오직 한 개의 클래스 인스턴스만을 갖도록 보장하고, 이에 대한 전역적인 접근점을 제공한다.
public class Managers : MonoBehaviour
{
static Managers s_instance;
public static Managers Instance { get { Init(); return s_instance; } } // 외부에서 Instance를 호출하는 순간 Init()함수도 호출됨
// Start is called before the first frame update
void Start()
{
Init();
}
// Update is called once per frame
void Update()
{
}
// 정적 변수 s_instance를 초기화 하는 함수
static void Init()
{
if (s_instance == null)
{
GameObject go = GameObject.Find("@Managers");
if (go == null)
{
go = new GameObject { name = "@Managers" };
go.AddComponent<Managers>();
}
DontDestroyOnLoad(go);
s_instance = go.GetComponent<Managers>();
}
}
}
public class Player : MonoBehaviour
{
void Start()
{
Managers mg = Managers.Instance;
}
void Update()
{
}
}
위와 같이 Managers와 Player 스크립트를 작성하였다.
이후 Player 스크립트를 MainCamera에 넣고 게임을 실행해 보았다.
[실행 전]
[실행 후]
매니저 오브젝트가 생성되었고, Managers 스크립트가 붙어 있음을 확인하였다.