일반 싱글톤으로 매니저급 클래스를 만들 때
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 게임개발 채널)
'C# 기초' 카테고리의 다른 글
[C#] Collections (0) | 2023.10.24 |
---|---|
[C#] ref, in, out 참조에 의한 호출 (0) | 2023.10.23 |
[C#] 값 형식과 참조 형식 (1) | 2023.10.23 |
[C#] 일반화 프로그래밍 (제네릭/Generic) (1) | 2023.10.20 |
[C#] get set 프로퍼티 (1) | 2023.10.10 |