본문 바로가기

Unity

유니티 - 싱글톤 패턴(Singleton)

반응형

싱글톤 패턴은 가장 많이 사용하는 기본 패턴이니 따로 설명이 필요 없을 것 같습니다.

바로 간편하게 적용할 수 있는 코드로 넘어가 보겠습니다.

using UnityEngine;

public class Singleton<T> : MonoBehaviour where T : MonoBehaviour {
    public static T instance {get; private set;}

    protected virtual void Awake() {
        if (instance == null) {
            instance = (T)FindObjectOfType(typeof(T));
            DontDestroyOnLoad(gameObject);
        } else {
            Destroy(gameObject);
        }
    }
}

protected virtual void Awake() -> 싱글톤으로 정의된 곳에서 Awake()를 사용해야 한다면 override 시켜 Awake()를 사용하시면 됩니다.

그 외 instance가 null 이면 제네릭 T에서 받아온 게임 오브젝트를 찾아 초기화해주며

DontDestroyOnLoad(gameObject); 게임 오브젝트가 파괴되지 않게 해 줍니다.

 

사용방법

public class GameManager : Singleton<GameManager> {
    public int testNo = 10;
    public string testName;
    
    protected override void Awake() {
        base.Awake();
        
        testName = "싱글톤 테스트";
    }
}

사용방법은 간단합니다.

Singleton<GameManager> -> 싱글톤으로 사용될 CLASS 이름을 넣어 주시면 됩니다.

Awake()를 사용할 일이 있을 경우 위 코드처럼 override 시켜 사용해 주시면 됩니다.

base.Awake() -> Awake를 사용하신다면 Singleton.cs 에서 정의된 Awake를 먼저 실행시켜 instance를 초기화 해준후

위 코드처럼 초기화시켜줄 변수들을 지정해 주시면 됩니다.

 

public class Play : MonoBehaviour {
    void Start() {
        print($"{GameManager.instance.testNo}");
        print($"{GameManager.instance.testName}");
    }
}

다른 곳에서 싱글톤 패턴으로 처리된 GameManager를 사용하실 땐 위 코드처럼 사용하시면 됩니다.

 

이상 간편하게 사용할 수 있는 싱글톤 패턴이었습니다.

 

반응형