Crea oggetti con script in Unity
ScriptableObject in Unity è un tipo speciale di classe che consente la creazione di oggetti riutilizzabili basati sui dati. Viene comunemente utilizzato per archiviare e gestire dati di gioco, configurazioni e impostazioni, ma può anche essere utilizzato per una varietà di scopi, come la gestione delle impostazioni di gioco, la creazione di sistemi basati sui dati, la definizione delle abilità dei personaggi, l'archiviazione di dialogo o informazioni sulla ricerca, ecc. Fornisce un modo flessibile ed efficiente per organizzare e gestire i dati in Unity progetti.
Il vantaggio principale di ScriptableObjects è che forniscono un modo per creare contenitori di dati che possono essere facilmente condivisi e riutilizzati in più istanze di script. Possono essere considerati come "blueprints" per la creazione di istanze di un tipo di dati specifico. È possibile creare più istanze di uno ScriptableObject e modificarne i dati in modo indipendente.
Crea un oggetto Scriptable
ScriptableObject può essere creato nell'editor Unity e salvato come asset nel progetto. A differenza degli script MonoBehaviour, ScriptableObject non è collegato a GameObject nella scena ma può essere referenziato e utilizzato da altri script.
Per creare uno ScriptableObject, procedi nel seguente modo:
- Nell'editor Unity, fai clic con il pulsante destro del mouse nella finestra Progetto e vai a "Create -> C# ScriptableObject".
- Assegnagli un nome significativo e apri lo script nell'editor di codice preferito.
Definizione della classe ScriptableObject:
- Nello script ereditare dalla classe ScriptableObject.
- Definire campi pubblici o proprietà per rappresentare i dati da archiviare in ScriptableObject.
using UnityEngine;
[CreateAssetMenu(fileName = "NewData", menuName = "MyGame/ScriptableObject")]
public class MyScriptableObject : ScriptableObject
{
public string dataName;
public int dataValue;
}
Nell'esempio precedente, definiamo una classe ScriptableObject con due campi pubblici: 'dataName (string)' e 'dataValue (int)'.
Personalizzazione di ScriptableObject nell'Inspector:
- Utilizza attributi come '[SerializeField]' per esporre campi specifici all'Unity Inspector per la modifica mantenendo quei campi inaccessibili dallo script che lo farà usa quello ScriptableObject.
using UnityEngine;
[CreateAssetMenu(fileName = "NewData", menuName = "MyGame/ScriptableObject")]
public class MyScriptableObject : ScriptableObject
{
[SerializeField]
private string dataName;
[SerializeField]
private int dataValue;
}
Creazione di istanze di ScriptableObjects:
- Nell'editor Unity, fai clic con il pulsante destro del mouse nella finestra Progetto e seleziona "Create" per creare un'istanza di ScriptableObject.
- Personalizza i dati dell'istanza creata nell'Inspector.
Accesso ai dati ScriptableObject da altri script:
- Nello script MonoBehaviour o in qualsiasi altro script, crea un campo pubblico o serializzato del tipo ScriptableObject e assegnalo nella vista Ispettore.
using UnityEngine;
public class MyBehaviour : MonoBehaviour
{
public MyScriptableObject myData;
}
- È quindi possibile accedere ai dati dell'istanza ScriptableObject tramite il campo assegnato.
using UnityEngine;
public class MyBehaviour : MonoBehaviour
{
public MyScriptableObject myData;
private void Start()
{
Debug.Log("Data Name: " + myData.dataName);
Debug.Log("Data Value: " + myData.dataValue);
}
}
Conclusione
ScriptableObjects è uno strumento versatile per la gestione e l'organizzazione dei dati nei progetti di gioco. Creando contenitori di dati riutilizzabili e personalizzabili, ScriptableObjects offre un modo flessibile ed efficiente per archiviare configurazioni, impostazioni e altre informazioni non specifiche dell'istanza. Con la possibilità di creare più istanze di uno ScriptableObject e modificarne i dati in modo indipendente, diventa facile creare sistemi basati sui dati, gestire le impostazioni di gioco, definire le abilità dei personaggi, memorizzare dialoghi o informazioni sulle missioni e molto altro. L'utilizzo di ScriptableObjects migliora la riusabilità, la manutenibilità e la scalabilità dei progetti Unity, semplificando in ultima analisi il processo di sviluppo e consentendo la creazione di giochi più robusti e dinamici.