반응형
싱글톤이란?
Unity 싱글톤 패턴은 특정 클래스가 게임 수명 기간 동안 하나의 인스턴스만 갖도록 하기 위해 Unity 게임 개발에서 일반적으로 사용되는 디자인 패턴이다.
이 패턴은 게임 내에서 전역적으로 액세스할 수 있어야 하는 단일 리소스나 시스템(예: 게임 매니저, 오디오 매니저 또는 게임 설정 매니저)을 관리해야 할 때 유용하다.
그치만.. 너무 남발하면 안된다.
코드
싱글톤을 제네릭으로 만들어주고
using UnityEngine;
public class Singleton<T> : MonoBehaviour where T : MonoBehaviour
{
private static T _instance;
public static T Instance
{
get
{
if (_instance == null)
{
_instance = (T)FindAnyObjectByType(typeof(T));
if (_instance == null)
{
SetupInstance();
}
}
return _instance;
}
}
public virtual void Awake()
{
RemoveDuplicates();
}
private static void SetupInstance()
{
_instance = (T)FindAnyObjectByType(typeof(T));
if (_instance == null)
{
GameObject gameObject = new GameObject();
gameObject.name = typeof(T).Name;
_instance = gameObject.AddComponent<T>();
DontDestroyOnLoad(gameObject);
}
}
private void RemoveDuplicates()
{
if (_instance == null)
{
_instance = this as T;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
}
}
싱글톤으로 만들고싶은 클래스에 이렇게 해주면된다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CharacterManager : Singleton<CharacterManager>
{
public override void Awake()
{
base.Awake();
}
}
와 진짜 지존 신기합니다용
사실 싱글톤 만드는 코드가 중복되긴 했지만 이렇게 제네릭으로 뺄 생각은 전혀 몰랐읍니다..
오늘도 하나 배웠다!
반응형
'Record > TIL' 카테고리의 다른 글
[Unity] 포톤으로 멀티 서버 만들어보기 (2) | 2024.06.25 |
---|---|
[Unity] 에디터 두개 빌드하기 (빌드없이 멀티 테스트하기) (0) | 2024.06.24 |
[Unity] 디자인패턴 (0) | 2024.06.20 |
[Unity] ScriptableObject (스크립터블 오브젝트) (0) | 2024.06.19 |
[Unity] 길건너기 게임 개발 (Feat. 길건너 친구들) (5) | 2024.06.18 |