싱글턴 패턴은 메모리상에 오직 하나의 인스턴스만 생성하고 그 인스턴스에 전역적인 접근을 제공하는 방식이다.
스크립트에서 제일먼저 실행되는 Awake()함수에서 GameManager를 static키워드로 정적 메모리영역에 올려두고 다른 스크립트에서 바로 접근할 수 있게 구현하는 방식이다.
그리고 자신이 아니라면 지우고 다른씬으로 넘어가도 삭제되지 않게 DontDestroyOnLoad()명령을 실행해 놓는다.
public static GameManager instance = null;
private void Awake() {
if (instance == null) {
instance = this; //싱글턴지정
} else if (instance != this){ //싱글턴검사
Destroy(this.gameObject);
}
DontDestroyOnLoad(this.gameObject); //다른씬으로 넘어가도 삭제하지 않고 유지함
}
이제 PlayerCtrl에서 검색이나 연결없이 GameManager 컴포넌트의 프라퍼티로 바로 사용가능하다.
void PlayerDie() {
//MONSTER 태그를 가진 모든 게임오브젝트를 찾아옴
/*
GameObject[] monsters = GameObject.FindGameObjectsWithTag("MONSTER");
foreach(GameObject monster in monsters) { //모든 오브젝트를 순차적으로 불러옴
monster.SendMessage("OnPlayerDie", SendMessageOptions.DontRequireReceiver);
}
*/
OnPlayerDie(); //주인공 사망 이벤트 호출(발생)
//GameObject.Find("GameMgr").GetComponent<GameManager>().IsGameOver = true; //적 생산 멈춤
GameManager.instance.IsGameOver= true; // IsGameOver 프라퍼티로 바로 사용가능
}
'유니티게임강좌 > 게임매니저' 카테고리의 다른 글
[게임매니저] 오브젝트 풀링 (1) | 2023.03.17 |
---|---|
[게임매니저] 적 캐릭터의 출현로직 (0) | 2023.03.16 |