martes, 17 de mayo de 2016

Clases personalizadas

English Version

Analizando las preguntas frecuentes en los foros y debido a que luego de aprender a usar arrays y listas en programación queremos solucionar todos nuestros problemas con ellas, se vuelve un poco difícil manejar los indices y nuestro código no queda tan limpio como quisiéramos, además las arrays de más de una dimensión son aún más complicadas, quiero enseñarles una alternativa, las clases personalizadas, con ellas podemos manejar muchos valores y podemos darle muchos usos, en este caso quiero enseñarlas con un ejemplo muy básico para que se entienda la idea principal y luego otro un poco más complejo aplicado en un inventario básico.

¿A que me refiero con una clase personalizada?


Una clase personalizada es muy común en el mundo de la programación, es cualquier clase que no trae el lenguaje por defecto, pero para personas que no estén completamente familiarizados con los lenguajes orientados a objetos o que como yo empezaron a usar Unity antes de aprender a programar por completo, resulta un poco complicado, yo por ejemplo pensaba que todas las clases debían heredar de MonoBehaviour

Una clase personalizada es tan fácil como esto:

public class ClasePersonalizada {
    public int Atributo1;
    public string Atributo2;
}

Estas clases pueden estar junto a otras clases en un mismo archivo y a diferencia de las clases que heredan de MonoBehaviour el nombre del archivo no necesita ser igual al nombre de la clase.
Sin embargo al no heredar de MonoBehaviour perdemos algunas ventajas, como la posibilidad de agregarse como componente a objetos, los metodos llamados automaticamente como Start, Update, Awake, etc, entre muchas otras, pero también se tienen otras ventajas como la posibilidad de serializarlas (Esto lo explicaré en otra entrada más adelante), también las hace mucho más optimizadas a la hora de tener una jerarquía grande de clases como es el caso de cuando se hace un inventario complejo y otras ventajas que ire cubriendo en otras entradas.

Hacer una clase y exponer sus valores en el editor de Unity

Las clases personalizas al no poder agregarse como componente a un objeto de la escena de Unity no es posible verlas en el inspector, incluso si hacemos que una clase MonoBehaviour tenga una variable del tipo de nuestra clase personalizada está no aparecerá en el inspector, veamos un ejemplo:

Tenemos el siguiente script : 

using UnityEngine;
using System.Collections;

public class CustomClassesTutorial : MonoBehaviour { 
    public Item TestItem;
}

public class Item {
    public int Id;
    public int price;
    public Sprite Image;
}


Al agregar este script a un objeto en unity veremos lo siguiente :



Como se puede apreciar en la imagen la variable de tipo Item no es visible en el inspector, esto se puede arreglar tan sólo con ponerle el atributo [System.Serializable] antes de declarar la clase o agregando arriba "using System;" y posteriormente sólo utilizando [Serializable]:

using UnityEngine;
using System.Collections;

public class CustomClassesTutorial : MonoBehaviour { 
    public Item TestItem;
}

[System.Serializable]
public class Item {
    public int Id;
    public int price;
    public Sprite Image;
}

Y el nuevo resultado se vería de esta manera:


Como pueden apreciar ahora el inspector muestra los atributos de la clase Item.

Bueno ahora que ya sabemos que es una clase personalizada, como crearlas y mostrarlas en el inspector, en mi próximo post iremos por un ejemplo en donde realmente podamos apreciar su uso.

2 comentarios:

  1. Muy bueno para seguir mejorando en la academia Majadahonda y conocer nuevas formas de hacer nuestro trabajo, muy útil Ricardo

    ResponderEliminar
  2. Gracias por tu dedicacion y esfuerzo excelentes explicaciones, estoy seguro que muuuchisima gente lo ha pensado aunque no te lo escriba ;)

    ResponderEliminar