반응형
싱글톤 패턴은 가장 많이 사용하는 기본 패턴이니 따로 설명이 필요 없을 것 같습니다.
바로 간편하게 적용할 수 있는 코드로 넘어가 보겠습니다.
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를 사용하실 땐 위 코드처럼 사용하시면 됩니다.
이상 간편하게 사용할 수 있는 싱글톤 패턴이었습니다.
반응형
'Unity' 카테고리의 다른 글
유니티 - 오브젝트 풀링(Object pooling) (9) | 2024.07.09 |
---|---|
유니티 (Unity) - 파일 데이터 비동기 방식으로 읽어 오기 (0) | 2024.07.09 |
유니티 - 커스텀 에디터 (Custom Editor) (0) | 2024.07.09 |
유니티 - CustomEditor 활용 (Inspector 꾸미기) (0) | 2024.07.09 |
유니티 (Unity) - 게임에 다중 언어 (Localization) 적용하기 (4) | 2024.07.09 |