부트캠프

싱글톤 패턴으로 게임 매니저 만들기

noyyo 2023. 7. 26. 21:24
public class GameManager : MonoBehaviour
{
    // 싱글톤 패턴을 사용하기 위한 인스턴스 변수
    private static GameManager _instance;
    // 인스턴스에 접근하기 위한 프로퍼티
    public static GameManager Instance
    {
        get {
            // 인스턴스가 없는 경우에 접근하려 하면 인스턴스를 할당해준다.
            if(!_instance)
            {
                _instance = FindObjectOfType(typeof(GameManager)) as GameManager;

                if (_instance == null)
                    Debug.Log("no Singleton obj");
            }
            return _instance;
        }
    }

    private void Awake()
    {
        if (_instance == null)
        {
            _instance = this;
        }
        // 인스턴스가 존재하는 경우 새로생기는 인스턴스를 삭제한다.
        else if (_instance != this)
        {
            Destroy(gameObject);
        }
        // 아래의 함수를 사용하여 씬이 전환되더라도 선언되었던 인스턴스가 파괴되지 않는다.
        DontDestroyOnLoad(gameObject);
    }
    
    // 출처 : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=os2dr&logNo=221536778783

싱글톤 패턴으로 게임 매니저를 구현한 코드다.

프로퍼티를 이용해서 get을 통해 인스턴스가 없다면 생성하고 있다면 돌려주도록 하고 set은 불가능하게 한다.

Awake 함수에서는 인스턴스가 없으면 할당하고 있다면 새로 생성되는 인스턴스를 삭제하도록 한다.

프로퍼티에서 get을 통해서 생성되도록 했는데 Awake에서도 체크하는 이유는 GameManager객체가 생성되면서 Awake에 진입할 수도 있고 GameManager가 생성되기 전에 다른 객체에서 GameManager를 찾게 되면 프로퍼티를 통해 생성될 수도 있기 때문이다.

'부트캠프' 카테고리의 다른 글

유니티 특수 폴더 이름  (0) 2023.07.31
충돌감지  (0) 2023.07.27
Unity TextMeshPro  (0) 2023.07.25
정규표현식  (0) 2023.07.24
C# ref, out, in, 박싱과 언박싱  (0) 2023.07.19