싱글턴 패턴은 메모리상에 오직 하나의 인스턴스만 생성하고 그 인스턴스에 전역적인 접근을 제공하는 방식이다. 

스크립트에서 제일먼저 실행되는 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 프라퍼티로 바로 사용가능
    }

 

+ Recent posts