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.
- Clic dret a la carpeta del projecte a l'Editor de Unity.
- Create > Character Data.
- 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ètodeStart
, 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
-
Crear la Classe ScriptableObject:
- Defineix una classe
WeaponData
que hereti deScriptableObject
. - Afegeix propietats com
weaponName
,damage
, irange
.
- Defineix una classe
-
Crear una Instància de WeaponData:
- Crea una instància de
WeaponData
des del menú de Unity.
- Crea una instància de
-
Utilitzar WeaponData en un Script:
- Crea un script
Weapon
que utilitziWeaponData
per configurar les propietats de l'arma.
- Crea un script
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
- Introducció a Unity i Instal·lació
- Visió General de la Interfície de Unity
- Creant el Teu Primer Projecte
- Objectes de Joc Bàsics i Components
Mòdul 2: Programació Bàsica en Unity
- Introducció a C# per a Unity
- Creant i Adjuntant Scripts
- Entenent MonoBehaviour
- Gestió Bàsica d'Entrades
Mòdul 3: Treballant amb Actius
- Important i Gestionant Actius
- Utilitzant la Botiga d'Actius
- Creant i Utilitzant Prefabs
- Animació Bàsica
Mòdul 4: Física i Col·lisions
- Introducció a la Física de Unity
- Rigidbody i Col·liders
- Detecció Bàsica de Col·lisions
- Utilitzant Materials de Física
Mòdul 5: Interfície d'Usuari (UI)
- Introducció a la UI de Unity
- Creant i Personalitzant Elements de UI
- Gestió d'Esdeveniments de UI
- Creant Menús i HUDs
Mòdul 6: Àudio en Unity
- Introducció a l'Àudio en Unity
- Important i Utilitzant Clips d'Àudio
- Programació Bàsica d'Àudio
- Àudio 3D i So Espacial
Mòdul 7: Programació Avançada
- Conceptes Avançats de C# per a Unity
- Coroutines i Programació Asíncrona
- Objectes Scriptables
- Editors Personalitzats i Gizmos
Mòdul 8: Física Avançada i IA
- Tècniques Avançades de Física
- Pathfinding i Navegació
- Programació Bàsica d'IA
- Màquines d'Estats i Arbres de Comportament
Mòdul 9: Optimització i Rendiment
- Tècniques de Perfilat i Optimització
- Gestió de Memòria
- Reduint Draw Calls
- Optimitzant Física i Col·lisions