retr0의 유니티 게임 에센스 강의를 듣고 정리한다.
21년도에 처음으로 유니티를 접했던 강의인데, 완강하지 못하고 흐지부지 되어서 다시 보기 시작했다.
public class GameManager : MonoBehaviour {
public static GameManager gm;
}
void Awake()
{
gm = this;
}
~중략~
}
public class GameManager : MonoBehaviour {
private static GameManager gm;
public static GameManager GetInstance()
{
if(instance == null)
{
//하나씩 찾는건 부하 발생 가능하므로 보통은 Awake 시점에 할당
instance = FindObjectOfType<GameManager>();
if(instance == null)
{
GameObject container = new GameObject("GameManager");
instance = container.AddComponent<GameManager>();
}
}
return instance;
}
void Start()
{
if(instance != null)
{
if(instance != this) //두개 이상인 경우 safety check
{
Destroy(gameObject);
}
}
}
~중략~
}
static으로 선언한 뒤, Awake 시점에서 gm을 할당해주면 해당 스크립트에 접근하는 각 객체에서 별도로 인스펙터 드래그&드랍 레퍼런스 없이 gm 변수를 통해 접근 가능해진다.