El Streaming de Assets
Temas Avanzados del Editor

ScriptableObject

El ScriptableObject es una clase que le permite a usted almacenar grandes cantidades de datos compartidos independientes de instancias de script. No confunda esta clase con la muy similar SerializableObject, la cual es una clase del editor y llena un propósito diferente. Considere por ejemplo que usted ha hecho un prefab con un script que tiene un arreglo de millones de enteros. El arreglo ocupa 4MB de memoria y su dueño es el prefab. Cada vez que usted instancia el prefab, usted va a obtener una copia de ese arreglo. Si usted ha creado 10 game objects, entonces usted terminaría con 40MB de datos del arreglo para las 10 instancias.

Unity serializa todos los tipos primitivos, strings, arreglos, listas, tipos específicos para Unity tal como Vector3 y sus clases personalizadas con el atributo Serializable como copies perteneciendo al objeto en el cual fue declarado. Esto significa que si usted ha creado un ScriptableObject y almacena millones de enteros en un arreglo, entonces declara que el arreglo será almacenado con la instancia. Las instancias son pensadas en sus propios datos individuales. Los campos ScriptableObject, o cualquier campo UnityEngine.Object, tal como MonoBehaviour, Mesh, GameObject y así, son almacenados por referencia opuesto a un valor. Si usted tiene un script con una referencia al ScriptableObject con un millón de enteros, Unity va a solamente guardar una referencia al ScriptableObject en los datos de script. El ScriptableObject por el contrario, almacenada el arreglo. 10 instancias de un prefab que tiene una referencia ScriptableObject , que mantiene 4MB de datos, va a pesar en total 4MB y no 40MB como se discutio en el otro ejemplo.

El caso intencionado para utilizar el ScriptableObject es reducir el uso de memoria al evitar la copias de valores, pero usted también puede utilizarlo para definir conjuntos de datos conecta-bles. Un ejemplo de esto sería imaginar una tienda NPC en un juego RPG. Usted puede crear múltiples assets de su ScriptableObject ShopContents personalizado, cada uno definiendo un conjunto de items que están disponibles para compra. En un escenario dónde el juego tiene tres zonas, cada zona puede ofrecer diferentes tipos de items. El script de su tienda podría referenciar un objeto ShopContents que define qué items están disponibles. Por favor ver la referencia de scripting para ejemplos.

Una vez haya definido una clase derivada de ScriptableObject, usted puede utilizar el atributo CreateAssetMenu para que sea fácil crear assets personalizados usando su clase.

Recomendación: Cuando trabaje con referencias ScriptableObject en el inspector, usted puede hacer doble click en el campo de referencia para abrir el inspector para su ScriptableObject. Usted también puede crear un editor personalizado para definir el aspecto del inspector para su tipo para ayudar a manejar los datos que representa.

El Streaming de Assets
Temas Avanzados del Editor