Managers의 역할은 각 매니저들을 하나로 묶어서 관리하면서
각 매니저들이 Managers의 Monobehaviour을 사용하여 기능을 수행하게끔 하기 위함이다.
기존에는 각 매니저마다 싱글톤과 MonoBehaviour을 달아줬었는데
그렇게 할 필요가 없다면서 교수님께서 알려주신 원 싱글턴 매니저즈 형식으로 시스템을 바꾸려고 한다.
기본적인 코드는 이러하다
코드
public class Managers : MonoBehaviour
{
private static Managers instance;
public static Managers Instance
{
get
{
Init();
return instance;
}
}
private static void Init()
{
if(!instance)
{
GameObject go = GameObject.Find("@Managers");
if(!go)
{
go = new GameObject { name = "@Managers" };
go.AddComponent<Managers>();
}
DontDestroyOnLoad(go);
instance = go.GetComponent<Managers>();
}
}
//매니저를 추가할 자리
}
먼저 Init
함수로 Managers를 호출할 때 씬 안에 Managers가 있는지 체크한 후에 없다면
새로운 게임 오브젝트를 만들고 그 게임 오브젝트에 Managers 스크립트를 달아준 후
instance 자리에 넣어준다.
이렇게 하면 매번 귀찮게 씬 마다 새로운 스크립드를 안 넣지 않아도 자동으로 생성 되기 때문에 번거롭지 않고 편하다는 장점이 있다.
앞으로 이 매니저를 채워가는 작업을 할 것이다.
매니저를 추가하는 방법
private ResourceManager _resource = new ResourceManager();
이런 식으로 매니저를 만들면 Managers안에 Init으로 만들어질 instance를 위해 넣으면 된다.
매니저 프로퍼티 추가
public static ResourceManager Resource { get { return Instance?._resource; } }
이렇게 전역 프로퍼티로 만들게 되면 굳이 매번
'Managers.Instance.(매니저 변수명)' 할 필요 없이 그냥
Managers.(매니저 프로퍼티명) 으로 바로 instance 접근 단계를 스킵할 수 있다.
System - Managers는 여기까지!