Els Objectes Scriptables (Scriptable Objects) són una característica poderosa de Unity que permet emmagatzemar dades de manera eficient i reutilitzable. Són especialment útils per a la configuració de dades que no canvien durant l'execució del joc, com ara configuracions de nivells, paràmetres de personatges, o qualsevol altra informació que necessiti ser compartida entre múltiples objectes.

Què és un Objecte Scriptable?

Un Objecte Scriptable és una classe derivada de ScriptableObject que permet crear instàncies d'objectes que poden ser emmagatzemats com a actius (assets) en el projecte de Unity. A diferència dels components MonoBehaviour, els Objectes Scriptables no estan associats a cap GameObject i no tenen cicle de vida d'actualització (Update, Start, etc.).

Avantatges dels Objectes Scriptables

  • Reutilització de Dades: Les dades poden ser compartides entre múltiples objectes sense duplicació.
  • Persistència: Les dades es poden emmagatzemar com a actius i no es perden quan es tanca l'editor.
  • Organització: Faciliten la separació de dades i lògica, millorant l'organització del codi.
  • Optimització: Redueixen la necessitat de serialitzar dades en temps d'execució, millorant el rendiment.

Creant un Objecte Scriptable

Pas 1: Definir la Classe ScriptableObject

Primer, crearem una classe que hereti de ScriptableObject. Aquesta classe definirà les dades que volem emmagatzemar.

using UnityEngine;

[CreateAssetMenu(fileName = "NewCharacterData", menuName = "Character Data", order = 51)]
public class CharacterData : ScriptableObject
{
    public string characterName;
    public int health;
    public int attackPower;
}

Explicació del Codi

  • [CreateAssetMenu]: Aquesta atribut permet crear fàcilment instàncies de l'objecte scriptable des del menú de Unity.
    • fileName: Nom per defecte del fitxer quan es crea un nou actiu.
    • menuName: Ruta del menú on es pot crear l'actiu.
    • order: Ordre en el qual apareixerà en el menú.

Pas 2: Crear una Instància de l'Objecte Scriptable

Un cop definida la classe, podem crear una instància de l'objecte scriptable des del menú de Unity.

  1. Clic dret a la carpeta del projecte a l'Editor de Unity.
  2. Create > Character Data.
  3. Assigna un nom a l'actiu creat.

Pas 3: Utilitzar l'Objecte Scriptable en un Script

Ara que tenim una instància de l'objecte scriptable, podem utilitzar-la en altres scripts.

using UnityEngine;

public class Character : MonoBehaviour
{
    public CharacterData characterData;

    void Start()
    {
        Debug.Log("Character Name: " + characterData.characterName);
        Debug.Log("Health: " + characterData.health);
        Debug.Log("Attack Power: " + characterData.attackPower);
    }
}

Explicació del Codi

  • public CharacterData characterData;: Referència a l'objecte scriptable.
  • Start(): En el mètode Start, accedim a les dades emmagatzemades en l'objecte scriptable i les mostrem a la consola.

Exercici Pràctic

Objectiu

Crear un objecte scriptable per emmagatzemar dades d'armes i utilitzar-lo en un script per configurar un personatge.

Passos

  1. Crear la Classe ScriptableObject:

    • Defineix una classe WeaponData que hereti de ScriptableObject.
    • Afegeix propietats com weaponName, damage, i range.
  2. Crear una Instància de WeaponData:

    • Crea una instància de WeaponData des del menú de Unity.
  3. Utilitzar WeaponData en un Script:

    • Crea un script Weapon que utilitzi WeaponData per configurar les propietats de l'arma.

Solució

Pas 1: Definir la Classe ScriptableObject

using UnityEngine;

[CreateAssetMenu(fileName = "NewWeaponData", menuName = "Weapon Data", order = 52)]
public class WeaponData : ScriptableObject
{
    public string weaponName;
    public int damage;
    public float range;
}

Pas 2: Crear una Instància de WeaponData

Segueix els passos descrits anteriorment per crear una instància de WeaponData des del menú de Unity.

Pas 3: Utilitzar WeaponData en un Script

using UnityEngine;

public class Weapon : MonoBehaviour
{
    public WeaponData weaponData;

    void Start()
    {
        Debug.Log("Weapon Name: " + weaponData.weaponName);
        Debug.Log("Damage: " + weaponData.damage);
        Debug.Log("Range: " + weaponData.range);
    }
}

Conclusió

Els Objectes Scriptables són una eina poderosa per gestionar dades de manera eficient i reutilitzable en Unity. Permeten separar les dades de la lògica del joc, millorant l'organització i el rendiment del projecte. Amb la pràctica, trobaràs moltes aplicacions per a aquesta característica en els teus projectes de Unity.

Curs de Unity

Mòdul 1: Introducció a Unity

Mòdul 2: Programació Bàsica en Unity

Mòdul 3: Treballant amb Actius

Mòdul 4: Física i Col·lisions

Mòdul 5: Interfície d'Usuari (UI)

Mòdul 6: Àudio en Unity

Mòdul 7: Programació Avançada

Mòdul 8: Física Avançada i IA

Mòdul 9: Optimització i Rendiment

Mòdul 10: Publicació i Més Enllà

© Copyright 2024. Tots els drets reservats