Skip to content Skip to sidebar Skip to footer

Il Singleton Pattern in Unity

Il Singleton Pattern è un pattern di progettazione che garantisce l’esistenza di una sola istanza di una classe e fornisce un punto di accesso globale a essa. Serve quando un sistema deve essere unico per tutta l’applicazione, come un gestore di audio, input o stato di gioco.
In Unity è spesso usato per manager globali che devono essere accessibili da qualunque script senza passare riferimenti. Il singleton semplifica l’architettura perché riduce le dipendenze esplicite tra oggetti ma va usato con attenzione perché può creare accoppiamento forte e dipendenze nascoste.

 public class MySingleton<T> : MonoBehaviour where T : Component
 {
     protected static T _instance;
     public static bool HasInstance => _instance != null;
     public static T TryGetInstance() => HasInstance ? _instance : null;

     public static T SharedInstance
     {
         get
         {
             if (_instance == null)
             {
                 _instance = FindAnyObjectByType<T>();
                 if (_instance == null)
                 {
                     GameObject obj = new GameObject();
                     obj.name = typeof(T).Name + "_AutoCreated";
                     _instance = obj.AddComponent<T>();
                 }
             }
             return _instance;
         }
     }

     protected virtual void Awake()
     {
         if (!Application.isPlaying)
         {
             return;
         }

         if (_instance != null && _instance != this)
         {
             Destroy(gameObject);
             return;
         }

         _instance = this as T;
     }

     protected virtual void OnDestroy()
     {
         if (_instance == this)
             _instance = null;
     }
 }

Copyright © Desdinova ® / PIVA 03799780162 / Non è una testata giornalistica.
Tutti i diritti riservati ai legittimi proprietari, anche ove non citati.