TagManager
January 8, 2026 · View on GitHub
Questa cartella contiene un semplice sistema di gestione dei tag utilizzabile nei progetti Unity.
GameTag
GameTag è uno ScriptableObject derivato da ItemAssetBase e rappresenta un identificatore di tag. Può essere creato dal menu Game Utils/Tag/Tag e sfrutta l'ID univoco fornito dalla classe UniqueID.
TagManager
TagManager è una classe serializzabile che mantiene un dizionario di tag e informazioni (SerializedDictionary<string, TagInfo>), dove TagInfo contiene il nome e il valore intero associato al tag. Permette di assegnare e leggere rapidamente lo stato dei tag.
Metodi principali
SetTagValue(GameTag tag, int value)/SetTagValue(GameTag tag, bool value)– imposta il valore associato al tag e ne registra anche il nome.int GetTagValue(GameTag tag)– restituisce il valore numerico del tag (0 se assente).bool HasTag(GameTag tag)– verifica se un tag è presente e con valore maggiore di zero.Dictionary<string, TagInfo> GetMap()– ottiene l'intero dizionario di tag e relative informazioni.TryGetValue(string tag, out TagInfo info)– recupera le informazioni del tag tramite la stringaID.Clear()– rimuove tutte le associazioni registrate.HasAny(params GameTag[] tags)– verifica se almeno uno dei tag specificati è presente.HasAll(params GameTag[] tags)– verifica se tutti i tag specificati sono presenti.List<GameTag> Intersection(params GameTag[] tags)– restituisce l'intersezione tra i tag presenti e quelli passati.List<GameTag> Union(params GameTag[] tags)– restituisce l'unione tra i tag presenti e quelli passati.
Sono inoltre disponibili versioni statiche degli stessi metodi che accettano un'interfaccia ITaggable e consentono di effettuare queste operazioni direttamente sulle liste di tag.
ITaggable espone inoltre dei metodi di utilità per interrogare i tag direttamente sugli oggetti che implementano l'interfaccia:
GetTags()– restituisce la lista dei tag (mainull).HasAnyTag(...)– verifica se almeno un tag è presente (overload perGameTag,List<GameTag>e stringheID).HasAllTag(...)– verifica se tutti i tag sono presenti (overload perGameTag,List<GameTag>e stringheID).
GameTagManager
GameTagManager eredita da GenericDataManager e carica automaticamente tutti gli asset GameTag presenti nel percorso configurato. In OnPostAwake costruisce due dizionari per ricerche rapide:
- per ID (
TryGetTag(string id, out GameTag tag)eGetAll()), - per tipo concreto del tag (
TryGetTag<T>()/GetTag<T>()).
Questo permette di ottenere rapidamente un tag senza doverlo referenziare manualmente nel codice o nelle scene.
Esempio d'uso:
void Awake()
{
// Recupero per ID
if (GameTagManager.Instance.TryGetTag("poison", out var poisonTag))
{
Debug.Log(poisonTag.InternalName);
}
// Recupero per tipo concreto
var fireTag = GameTagManager.Instance.GetTag<FireTag>();
}
Esempio di utilizzo
public class Example : MonoBehaviour
{
[SerializeField] private GameTag jumpTag;
private TagManager tags = new TagManager();
void Start()
{
tags.SetTagValue(jumpTag, true);
if (tags.HasTag(jumpTag))
{
Debug.Log("Può saltare!");
}
}
}