* C# Script 생성 시에는 컴포넌트 용도로 쓸 파일과 일반적인 스크립트 파일을 구분할 것
static Managers s_instance;
public static Managers Instance { get { Init(); return s_instance; } }
void Start()
{
Init();
}
static void Init()
{
if (s_instance == null)
{
GameObject go = GameObject.Find("@Managers");
if (go == null)
{
go = new GameObject { name = "@Managers" };
go.AddComponent<Managers>();
}
DontDestoryOnLoad(go);
s_instance = go.GetComponent<Managers>();
}
}
요약: GameObject에 붙어있는 Managers 컴포넌트를 static 변수에 집어넣고, 이 변수의 getter를 public으로 설정하여 다른 스크립트에서 단 하나뿐인 해당 Managers를 참고할 수 있도록 만든 것
* s_instnace: static 형식의 지역 변수(_)
* @Managers인 이유: 그냥 지우면 안 되는 필수 요소를 구별하기 위함
1. static 변수로 선언하여 유일하게 만들어준 다음, 만약 해당 변수가 null일 경우 @Managers라는 이름의 GameObject를 찾아준다
2. 만약 @Managers라는 이름의 GameObject가 없을 경우 하나 새로 만들어준 다음, Managers 컴포넌트를 붙여준다
3. DontDestroyOnLoad에 해당 GameObject를 넣고, s_instance를 해당 GameObject에 붙은 Managers 컴포넌트로 지정한다
+ 프로퍼티를 사용했기 때문에 다른 스크립트에서 s_instance를 가져올 때는
void Start()
{
Managers mg = Managers.Instance;
}
위와 같은 방식으로 가져오면 된다
'강의, 책 > [Unity] C#과 유니티로 만드는 MMORPG 게임 개발 시리즈' 카테고리의 다른 글
Section 3. Prefab - Resource Manager (0) | 2024.01.20 |
---|---|
Section 2. Transfrom - Input Manager (0) | 2024.01.16 |
Section 2. Transform - Rotate (0) | 2024.01.16 |
Section 2. Transform - Vector3 (0) | 2024.01.16 |
Section 2. Transform - Position(WASD로 플레이어 움직이기) (0) | 2024.01.16 |