Opret ScriptableObjects i Unity

ScriptableObject i Unity er en speciel type klasse, der tillader oprettelse af genbrugelige, datadrevne objekter. Det bruges almindeligvis til lagring og styring af spildata, konfigurationer og indstillinger, men kan også bruges til en række forskellige formål, såsom administration af spilindstillinger, oprettelse af datadrevne systemer, definering af karakteregenskaber, lagring af dialog eller quest information osv. Det giver en fleksibel og effektiv måde at organisere og administrere data i Unity projekter.

Den største fordel ved ScriptableObjects er, at de giver mulighed for at skabe databeholdere, der nemt kan deles og genbruges på tværs af flere forekomster af scripts. De kan opfattes som "blueprints" til oprettelse af forekomster af en bestemt datatype. Det er muligt at oprette flere forekomster af et ScriptableObject og ændre deres data uafhængigt.

Opret et ScriptableObject

ScriptableObject kan oprettes i Unity-editoren og gemmes som aktiver i projektet. I modsætning til MonoBehaviour scripts er ScriptableObject ikke knyttet til GameObject i scenen, men kan refereres til og bruges af andre scripts.

Følg nedenstående trin for at oprette et ScriptableObject:

  • I Unity-editoren, højreklik i projektvinduet og naviger til "Create -> C# ScriptableObject".
  • Giv det et meningsfuldt navn, og åbn scriptet i den foretrukne kodeeditor.

Definition af ScriptableObject-klassen:

  • I scriptet, arv fra klassen ScriptableObject.
  • Definer offentlige felter eller egenskaber til at repræsentere de data, der skal gemmes i ScriptableObject.
using UnityEngine;

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

I eksemplet ovenfor definerer vi en ScriptableObject-klasse med to offentlige felter: 'dataName (string)' og 'dataValue (int)'.

Tilpasning af ScriptableObject i Inspector:

  • Brug attributter som '[SerializeField]' til at eksponere specifikke felter for Unity Inspector til ændring, mens du holder disse felter utilgængelige fra scriptet, der vil bruge det ScriptableObject.
using UnityEngine;

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

    [SerializeField]
    private int dataValue;
}

Oprettelse af forekomster af ScriptableObjects:

  • I Unity-editoren skal du højreklikke i projektvinduet og vælge "Create" for at oprette en forekomst af ScriptableObject.
  • Tilpas dataene for den oprettede instans i Inspector.

Adgang til ScriptableObject-data fra andre scripts:

  • I MonoBehaviour-scriptet eller et hvilket som helst andet script skal du oprette et offentligt eller serialiseret felt af typen ScriptableObject og tildele det i Inspector-visningen.
using UnityEngine;

public class MyBehaviour : MonoBehaviour
{
    public MyScriptableObject myData;
}
  • Dataene for ScriptableObject-forekomsten kan derefter tilgås via det tildelte felt.
using UnityEngine;

public class MyBehaviour : MonoBehaviour
{
    public MyScriptableObject myData;

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

Konklusion

ScriptableObjects er et alsidigt værktøj til at administrere og organisere data i spilprojekter. Ved at skabe genbrugelige og tilpasselige datacontainere tilbyder ScriptableObjects en fleksibel og effektiv måde at gemme konfigurationer, indstillinger og andre ikke-instansspecifikke oplysninger. Med evnen til at oprette flere forekomster af et ScriptableObject og ændre deres data uafhængigt, bliver det nemt at skabe datadrevne systemer, administrere spilindstillinger, definere karakteregenskaber, gemme dialog- eller questoplysninger og meget mere. Brug af ScriptableObjects forbedrer genanvendeligheden, vedligeholdelsen og skalerbarheden af ​​Unity-projekterne, hvilket i sidste ende strømliner udviklingsprocessen og giver mulighed for at skabe mere robuste og dynamiske spil.