Comunidad orientada al desarrollo de videojuegos

Unity3D – Serializable en el inspector C#

Serializable, un pequeño truco que nos permite personalizar bastante nuestros scripts en el inspector.

En ocasiones necesitaremos crear nuestros propios tipos y exponerlos en el inspector para que sean configurados en modo de edición. Por defecto, el inspector de Unity3D no nos mostrará una variable pública de un tipo que nos hayamos definido nosotros, para ello, deberemos usar el atributo [Serializable] en la definición de nuestra clase. Para usar el atributo deberemos resolver la dependencia using System;

   1: using System;

   2: [Serializable]

   3: public class EjemploSerializable

   4: {

   5:     public int Porcentaje;

   6:     public GameObject Asteroide;

   7: }

   1: public class EjemploSerialize : MonoBehaviour

   2: {

   3:     public EjemploSerializable ejemplo;

   4: }

Por defecto, todas las variables públicas serán serializadas, de esta forma, si asignamos el script a un GameObject en nuestro proyecto, se verá así en el inspector.

inspector01

 

Es muy sencillo y le damos un gran potencial a nuestros scripts, pero debemos tener en cuenta una serie de “normas”. No podemos serializar ni variables estáticas ni propiedades. Puede darse el caso que necesitemos serializar variables privadas y viceversa, para ello, existen unos atributos específicos. Usaremos [SerializeField] sobre los campos privados que queremos que se vean en el inspector y [NonSerialized] para los campos públicos que no queremos que sean editables desde el inspector.

   1: using UnityEngine;

   2: using System;

   3: [Serializable]

   4: public class EjemploSerializable

   5: {

   6:     public int Porcentaje;

   7:     public GameObject Asteroide;

   8:     [SerializeField]

   9:     private Color elColor = Color.white;

  10:     [NonSerialized]

  11:     public bool IsCreated;

  12: }

  13:  

  14: public class EjemploSerialize : MonoBehaviour

  15: {

  16:     public EjemploSerializable[] ejemplo;

  17: }

Hemos añadido al código anterior, un campo Color, que es privado pero podremos configurarlo en el inspector de Unity3D y otro campo booleano público pero que no queremos que se muestre en el editor. Además, nuestra referencia será un array.

inspector02

 

Le he puesto un tamaño de 3 elementos y he ajustado el color. Como veis, podemos complicarlo todo lo que queramos.

, , , ,

4 thoughts on “Unity3D – Serializable en el inspector C#

  • delahermosa says:

    Muy buen truco, ¡¡¡si señor!!! Aunque no estoy de acuerdo con mostrar en el inspector variables privadas, si son privadas son privadas, si quieres modificarlas desde el inspector, o la haces pública o aún mejor, la encapsulas en una propiedad.

    • Marcos @MRCalderon3D says:

      Hola @delahermosa , yo si veo útil tener la opcion de dar un valor inicial a una variable desde el editor y que luego no deba ser accesible desde otros scripts. Y lo malo de las propiedades es que no puede serializarse en el inspector.

  • y puedo personalizar el insepctor poniendole a las propiedades un boton por ejepmlo?

  • Kevin Kener says:

    Sigo sin entender lo que es algo serializable, para que sirve esto? que puedo hacer con esto?

Leave a Reply