C# 기초

[C#] 모노 싱글톤

입니다최원석 2023. 10. 19. 20:15

 

일반 싱글톤으로 매니저급 클래스를 만들 때 

 

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    private void Awake()
    {
        if (Instance == null)
        {
            Instance = this;
        }
    }
}

 

이런식으로 인스턴스를 만들어 다른 스크립트에서도 사용할 수 있게 하였다.

 

하지만 GameManager, SoundManager, UIManager 등등 씬에 여러개의 싱글톤이 존재할 때

위의 코드를 각각 작성해야 하는 번거로움이 생긴다.

 

이 문제를 해결해주는 방법이 모노 싱글톤을 사용하는 것이다.

아래는 제네릭을 사용하여 만든 모노 싱글톤 코드이다.

 

public class MonoSingleton<T> : MonoBehaviour where T : MonoBehaviour
{
    public static T Instance { get; private set; }

    private void Awake()
    {
        Instance = FindObjectOfType(typeof(T)) as T;
    }
}

 

모노싱글톤을 상속받아 LevelManager와 GameManager를 만들었다.

 

public class LevelManager : MonoSingleton<LevelManager>
{

}

 

public class GameManager : MonoSingleton<GameManager>
{
    public void DebugTest()
    {
        Debug.Log("Test");
    }
}

 

이런식으로 모노싱글톤을 상속받아 Instance 코드를 따로따로 작성할 필요 없이 다른 스크립트에서 매니저들에 접근할 수 있다.

 

public class Test : MonoBehaviour
{
    private void Start()
    {
        GameManager.Instance.DebugTest();
    }
}

 

(출처 - 고라니TV 게임개발 채널)