Creați ScriptableObjects în Unity

ScriptableObject în Unity este un tip special de clasă care permite crearea de obiecte reutilizabile, bazate pe date. Este folosit în mod obișnuit pentru stocarea și gestionarea datelor, configurațiilor și setărilor jocului, dar poate fi folosit și pentru o varietate de scopuri, cum ar fi gestionarea setărilor jocului, crearea de sisteme bazate pe date, definirea abilităților personajelor, stocarea dialogue sau informații despre căutare etc. Oferă o modalitate flexibilă și eficientă de organizare și gestionare a datelor în proiecte Unity.

Principalul avantaj al ScriptableObjects este că oferă o modalitate de a crea containere de date care pot fi partajate și reutilizate cu ușurință în mai multe instanțe de scripturi. Ele pot fi considerate ca "blueprints" pentru crearea instanțelor unui anumit tip de date. Este posibil să creați mai multe instanțe ale unui ScriptableObject și să le modificați datele în mod independent.

Creați un ScriptableObject

ScriptableObject poate fi creat în editorul Unity și salvat ca elemente în proiect. Spre deosebire de scripturile MonoBehaviour, ScriptableObject nu este atașat la GameObject în scenă, dar poate fi referit și utilizat de alte scripturi.

Pentru a crea un ScriptableObject, urmați pașii de mai jos:

  • În editorul Unity, faceți clic dreapta în fereastra Proiect și navigați la "Create -> C# ScriptableObject".
  • Dați-i un nume semnificativ și deschideți scriptul în editorul de cod preferat.

Definirea clasei ScriptableObject:

  • În script, moșteniți din clasa ScriptableObject.
  • Definiți câmpuri sau proprietăți publice pentru a reprezenta datele de stocat în ScriptableObject.
using UnityEngine;

[CreateAssetMenu(fileName = "NewData", menuName = "MyGame/ScriptableObject")]
public class MyScriptableObject : ScriptableObject
{
    public string dataName;
    public int dataValue;
}

În exemplul de mai sus, definim o clasă ScriptableObject cu două câmpuri publice: 'dataName (string)' și 'dataValue (int)'.

Personalizarea ScriptableObject în Inspector:

  • Utilizați atribute precum '[SerializeField]' pentru a expune anumite câmpuri la Inspectorul Unity pentru modificare, păstrând în același timp acele câmpuri inaccesibile din scriptul care va folosi acel ScriptableObject.
using UnityEngine;

[CreateAssetMenu(fileName = "NewData", menuName = "MyGame/ScriptableObject")]
public class MyScriptableObject : ScriptableObject
{
    [SerializeField]
    private string dataName;

    [SerializeField]
    private int dataValue;
}

Crearea instanțelor de ScriptableObjects:

  • În editorul Unity, faceți clic dreapta în fereastra Proiect și selectați "Create" pentru a crea o instanță a ScriptableObject.
  • Personalizați datele instanței create în Inspector.

Accesarea datelor ScriptableObject din alte scripturi:

  • În scriptul MonoBehaviour sau în orice alt script, creați un câmp public sau seriat de tip ScriptableObject și atribuiți-l în vizualizarea Inspector.
using UnityEngine;

public class MyBehaviour : MonoBehaviour
{
    public MyScriptableObject myData;
}
  • Datele instanței ScriptableObject pot fi apoi accesate prin câmpul alocat.
using UnityEngine;

public class MyBehaviour : MonoBehaviour
{
    public MyScriptableObject myData;

    private void Start()
    {
        Debug.Log("Data Name: " + myData.dataName);
        Debug.Log("Data Value: " + myData.dataValue);
    }
}

Concluzie

ScriptableObjects sunt un instrument versatil pentru gestionarea și organizarea datelor în proiecte de joc. Prin crearea de containere de date reutilizabile și personalizabile, ScriptableObjects oferă o modalitate flexibilă și eficientă de a stoca configurații, setări și alte informații care nu sunt specifice unei instanțe. Cu capacitatea de a crea mai multe instanțe ale unui ScriptableObject și de a modifica datele lor în mod independent, devine ușor să creați sisteme bazate pe date, să gestionați setările jocului, să definiți abilitățile personajelor, să stocați dialoguri sau informații despre misiuni și multe altele. Utilizarea ScriptableObjects îmbunătățește reutilizarea, mentenabilitatea și scalabilitatea proiectelor Unity, simplificând în cele din urmă procesul de dezvoltare și permițând crearea de jocuri mai robuste și mai dinamice.