2022.10.18 개인 학습 - 유니티(Unity)에서 사용가능한 5가지 싱글톤
using UnityEngine;
public class SingletonPattern
{
private SingletonPattern() { }
private static SingletonPattern instance = null;
public static SingletonPattern GetInstance()
{
if (instance == null)
{
instance = new SingletonPattern();
}
return instance;
}
public void Use()
{
Debug.Log("Singleton");
}
}
SingletonPattern.GetInstance().Use();
using UnityEngine;
public class SingletonPattern_Mono : MonoBehaviour
{
private SingletonPattern_Mono() { }
private static SingletonPattern_Mono instance = null;
public static SingletonPattern_Mono GetInstance()
{
if (instance == null)
{
instance = FindObjectOfType(SingletonPattern_Mono);
DontDestroyOnLoad(_instance.gameObject);
}
return instance;
}
public void Awake()
{
instance = this;
}
public void Use()
{
Debug.Log("MonoBehaviourSingleton");
}
}
SingletonPattern_Mono.GetInstance().Use();
using UnityEngine;
public class SingletonPattern_Property
{
private SingletonPattern_Property() { }
private static SingletonPattern_Property instance = null;
public static SingletonPattern_Property Instance
{
get
{
if (instance == null)
instance = new SingletonPattern_Property();
return instance;
}
private set
{
instance = value;
}
}
public void Use()
{
Debug.Log("PropertySingleton");
}
}
SingletonPattern_Property.Instance.Use();
using System;
public class SingletonPattern_NonMono<T> where T : class
{
private static T instance = null;
public static T Instnace
{
get
{
if (instance == null)
{
instance = Activator.CreateInstance(typeof(T)) as T;
}
return instance;
}
}
}
using UnityEngine;
public class ItemManager : SingletonPattern_NonMono<ItemManager>
{
public void Use()
{
Debug.Log("NonMonoSingleton");
}
}
ItemManager.Instnace.Use();
using UnityEngine;
public class SingletonPattern_Mono<T> : MonoBehaviour where T : MonoBehaviour
{
private static T instance = null;
public static T Insatnce
{
get
{
instance = FindObjectOfType(typeof(T)) as T;
if (instance == null)
{
instance = new GameObject(typeof(T).ToString(), typeof(T)).AddComponent<T>();
}
return instance;
}
}
}
using UnityEngine;
public class SkillManager : SingletonPattern_Mono<SkillManager>
{
public void Use()
{
Debug.Log("MonoSingleton");
}
}
SkillManager.Insatnce.Use();