Volver a la página principal
sábado 1 marzo 2025
6

Qué son los ScriptableObject y cuando utilizarlos en unity

En Unity, debes usar un ScriptableObject cuando necesitas almacenar datos de manera estructurada y reutilizable sin instanciarlos en la escena. Son ideales para mejorar el rendimiento y la organización del código.

📌 Casos de Uso para ScriptableObjects

1. Configuraciones globales

  • Almacenar ajustes de juego, como volumen, sensibilidad del mouse o configuraciones gráficas.

2. Datos compartidos entre múltiples objetos

  • Evitar duplicar datos en múltiples instancias. Ejemplo: listas de armas, personajes o habilidades.

3. Definición de estadísticas y atributos

  • Almacenar datos como daño, velocidad, vida, sin necesidad de instanciar objetos en la escena.

4. Eventos globales

  • Implementar patrones como el Event System, donde múltiples scripts pueden reaccionar a eventos sin referencias directas.

5. Persistencia de datos

  • Guardar estados que pueden sobrevivir a la recarga de escenas sin necesidad de almacenarlos en un GameObject.

6. Optimización del rendimiento

  • Reducir el uso de memoria y mejorar la carga de escenas evitando duplicar instancias.

🛠 Ejemplo Práctico: Sistema de Armas

En lugar de definir las características de un arma en cada GameObject, puedes usar un ScriptableObject:

using UnityEngine;

[CreateAssetMenu(fileName = "NewWeapon", menuName = "Weapons/WeaponData")]
public class WeaponData : ScriptableObject
{
    public string weaponName;
    public int damage;
    public float fireRate;
    public GameObject weaponPrefab;
}

Luego, en un script que maneje las armas:

public class Weapon : MonoBehaviour
{
    public WeaponData weaponData;

    void Start()
    {
        Debug.Log("Arma: " + weaponData.weaponName + " | Daño: " + weaponData.damage);
    }
}

Esto permite definir diferentes armas sin crear instancias extra en la escena.

🚀 Cuándo NO usar ScriptableObjects

  • Cuando los datos deben cambiar en tiempo de ejecución y guardarse permanentemente.
  • Para esto es mejor usar PlayerPrefs o serialización de archivos.
  • Cuando el dato solo es relevante para una instancia específica en la escena.
  • Usa componentes en GameObjects si la información es local a una instancia.

En resumen, usa ScriptableObjects para almacenar datos estructurados reutilizables y mejorar la gestión de memoria. 🔥

Etiquetas:
csharp unity
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer