Lag ScriptableObjects i Unity

ScriptableObject i Unity er en spesiell type klasse som gjør det mulig å lage gjenbrukbare, datadrevne objekter. Det brukes ofte til å lagre og administrere spilldata, konfigurasjoner og innstillinger, men kan også brukes til en rekke formål, for eksempel å administrere spillinnstillinger, lage datadrevne systemer, definere karakteregenskaper, lagre dialog eller oppdragsinformasjon osv. Det gir en fleksibel og effektiv måte å organisere og administrere data i Unity-prosjekter.

Den største fordelen med ScriptableObjects er at de gir en måte å lage databeholdere på som enkelt kan deles og gjenbrukes på tvers av flere forekomster av skript. De kan tenkes på som "blueprints" for å lage forekomster av en bestemt datatype. Det er mulig å lage flere forekomster av et ScriptableObject og endre dataene deres uavhengig.

Lag et ScriptableObject

ScriptableObject kan opprettes i Unity-editoren og lagres som eiendeler i prosjektet. I motsetning til MonoBehaviour-skript, er ikke ScriptableObject knyttet til GameObject i scenen, men kan refereres til og brukes av andre skript.

For å lage et ScriptableObject, følg trinnene nedenfor:

  • I Unity-editoren, høyreklikk i prosjektvinduet og naviger til "Create -> C# ScriptableObject".
  • Gi det et meningsfylt navn og åpne skriptet i den foretrukne kodeeditoren.

Definere ScriptableObject-klassen:

  • I skriptet, arv fra ScriptableObject-klassen.
  • Definer offentlige felt eller egenskaper for å representere dataene som skal lagres 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 felt: 'dataName (string)' og 'dataValue (int)'.

Tilpasse ScriptableObject i inspektøren:

  • Bruk attributter som '[SerializeField]' for å eksponere spesifikke felt for Unity-inspektøren for modifikasjon mens du holder disse feltene utilgjengelige fra skriptet som vil bruke det ScriptableObject.
using UnityEngine;

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

    [SerializeField]
    private int dataValue;
}

Opprette forekomster av ScriptableObjects:

  • I Unity-editoren høyreklikker du i prosjektvinduet og velger "Create" for å lage en forekomst av ScriptableObject.
  • Tilpass dataene til den opprettede forekomsten i inspektøren.

Tilgang til ScriptableObject-data fra andre skript:

  • I MonoBehaviour-skriptet eller et hvilket som helst annet skript, opprett et offentlig eller serialisert felt av typen ScriptableObject og tilordne det i inspektørvisningen.
using UnityEngine;

public class MyBehaviour : MonoBehaviour
{
    public MyScriptableObject myData;
}
  • Dataene til ScriptableObject-forekomsten kan da nås gjennom det tilordnede feltet.
using UnityEngine;

public class MyBehaviour : MonoBehaviour
{
    public MyScriptableObject myData;

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

Konklusjon

ScriptableObjects er et allsidig verktøy for å administrere og organisere data i spillprosjekter. Ved å lage gjenbrukbare og tilpassbare databeholdere tilbyr ScriptableObjects en fleksibel og effektiv måte å lagre konfigurasjoner, innstillinger og annen ikke-forekomstspesifikk informasjon på. Med muligheten til å lage flere forekomster av et ScriptableObject og modifisere dataene deres uavhengig, blir det enkelt å lage datadrevne systemer, administrere spillinnstillinger, definere karakteregenskaper, lagre dialog- eller oppdragsinformasjon og mye mer. Bruk av ScriptableObjects forbedrer gjenbrukbarheten, vedlikeholdsevnen og skalerbarheten til Unity-prosjektene, og effektiviserer til slutt utviklingsprosessen og gir mulighet til å lage mer robuste og dynamiske spill.

Foreslåtte artikler
Lag et puslespill i Unity
Lag et Pac-Man-inspirert spill i Unity
Lag en Game Over Scene i Unity
Hvordan lage et objekt Følg musepekeren i Unity
Lag en GrabPack i Unity Inspirert av Poppy Playtime
Opprette interaktive objekter i Unity
Implementering av kinetiske interaksjoner i enhet