@Managers 게임오브젝트는 씬 상에 눈에 보이지 않는다.
그러나 매우 중요한 역할을 한다.
씬을 실행하면 DonDestroyOnLoad 안에 매니저 오브젝트로 싱글톤이 생성된다.
이 매니저가 프로젝트가 진행되면서 발생하는
다른 게임오브젝트에서 Manager에 간다하게 접근해보자.
씬이 플레이 되면 자동적으로 실행되는 Start 함수에
static으로 선언되어 전역에서 사용될 수 있는 Instance를 가져오면
Manager 와 상호작용하는 싱글턴 패턴이 만들어진다.
Code
public class Managers : MonoBehaviour
{
//static으로 전역에서 유일성 보장된 instance
static Managers s_Instance;
public static Managers Instance { get { return s_Instance; } } // 유일한 매니저를 가지고 오는 프로퍼티
private void Start()
{
init();
}
// 전역으로 되어있는 유일한 인스턴스를 가져오자.
static void init()
{
// 인스턴스가 비어있다면
if (Instance == null)
{
// 게임오브젝트의 이름을 통해서 접근
GameObject go = GameObject.Find("@Managers");
// go 라는
if( go == null)
{
// 싱글톤 -> 하나의 Manager만을 가지고 싶다 -> 자기자신을 인스턴드에 할당
go = new GameObject { name = "@Managers" };
go.AddComponent<Managers>();
}
// 왠만하여서는(심지어 씬이동시에도) 삭제되지 않음
DontDestroyOnLoad(go);
// Intance에 유일한 Manager Script 장착.
s_Instance = go.GetComponent<Managers>();
}
}
}