Version: 2017.2
El Streaming de Assets
Temas Avanzados del Editor

ScriptableObject

ScriptableObject is a class that allows you to store large quantities of shared data independent from script instances. Do not confuse this class with the similarly named SerializedObject, which is an editor class and fills a different purpose. Consider for example that you have made a prefab with a script which has an array of a million integers. The array occupies 4MB of memory and is owned by the prefab. Each time you instantiate that prefab, you will get a copy of that array. If you created 10 game objects, then you would end up with 40MB of array data for the 10 instances.

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