Attributes en Unity
Los atributos le permiten adjuntar un comportamiento adicional a los métodos y variables que crea.
Aprenderás el formato de los atributos, así como también cómo usar los atributos Range y ExecuteInEditMode.
Los atributos te permiten anexar información a un método, una variable o una clase, cuando los declaras. Es muy útil para tomar código existente y mejorarlo o cambiarlo de alguna manera.
Los atributos varían mucho en sus efectos y sus usos. Aquí tenemos una escena en
Unity con una esfera. La esfera tiene un
SpinScript anexado. Ten en cuenta la variable
Speed del script, la misma que actualmente está configurada a
0.
En el
SpinScript, podemos ver que primero declaramos la variable tipo entero
speed y la configuramos a
0.
public int speed = 0;Luego, en el método
Update, podemos rotar el objeto en su eje vertical, basado en su velocidad actual. De esta manera, podríamos darle a la variable
speed cualquier valor que querramos y la velocidad de rotación del objeto cambiaría como resultado.
void Update()
{
transfrom.Rotate(new Vector3(0, speed * Time.deltaTime, 0));
}Esto funciona bien pero ¿qué pasa si queremos limitar el valor de la variable
speed? Podríamos escribir código para detectar el valor actual de la variable y prevenir que salga de rango o podríamos anexarle un atributo.
Los atributos están escritos arriba, o justo antes del código que modifican y generalmente no afectan ninguna otra parte del script.
En este caso vamos a usar el atributo
Range. La sintaxis para todos los atributos comienza con un corchete de apertura.
Luego, para el atributo
Range, escribimos la palabra reservada
Range seguido de paréntesis. Dentro de los paréntesis escribimos nuestros valores mínimos y máximos. Terminamos el atributo con un corchete de cierre.
void Update()
{
[Range(-100, 100)]
public int speed = 0;
}Ten en cuenta que en este caso hemos puesto el atributo encima de la declaración de la variable. Podríamos haberlo puesto justo antes también.
void Update()
{
[Range(-100, 100)] public int speed = 0;
}Si regresamos a
Unity, podemos ver que no tenemos la misma propiedad
speed en la vista Inspector. Ahora tenemos un deslizador que va desde nuestro valor mínimo a nuestro valor máximo.
Al ver nuestra escena podemos ver que el deslizador móvil cambia directamente la velocidad de la variable, la misma que a su vez cambia la rotación del objeto.
Otro atributo que veremos es el atributo
ExecuteInEditMode. Este atributo causa que el script al que está anexado se ejecute incluso cuando la escena no está en modo Play.
Aquí tenemos otra escena con una esfera. Esta esfera tiene un script llamado
ColorScript anexado a ella.
En el
ColorScript configuramos el color del material del objeto a rojo. Si queremos ver este cambio en
Unity sin rodar la escena podríamos aplicarle el atributo
ExecuteInEditMode.
void Start()
{
GetComponent<Renderer>().shadedMaterial.color = Color.red;
}Para hacerlo, abrimos un corchete sobre o antes del nombre de nuestra clase. Lo ponemos delante del nombre de la clase porque el atributo
ExecuteInEditMode se aplica a todo el código en un script, no solo a una parte. Luego escribimos la palabra reservada
ExecuteInEditMode seguida de un corchete de cierre.
[ExecuteInEditMode]
public class ColorScript : MonoBehaviour
void Start()
{
GetComponent<Renderer>().shadedMaterial.color = Color.red;
}Este atributo no tiene ningún parámetro y por lo tanto, no tiene necesidad de ningún paréntesis.
De regreso en
Unity, podemos ver que nuestro objeto se ha vuelto rojo. Nuestro script se ejecutó, incluso cuando no rodamos la escena.
Vale la pena recalcar que necesitas tener cuidado con los atributos
ExecuteInEditMode. Normalmente los scripts se ejecutan cuando inicia la escena. Cuando paras una escena, cualquier cambio que hagas al
GameObject en una escena serán deshechos.
Los scripts que se ejecutan durante el modo
Edit pueden modificar, crear y borrar objetos en tu escena. Desde que los cambios no están en modo Play, no serán revertidos y serán permanentes.
Por ejemplo, la esfera en la escena ha sido modificada para que sea roja permanentemente. Si arrastramos otra esfera a nuestra escena, también será roja, ya que el recurso o asset Orb se cambió.
Para ajustar esto, tendríamos que cambiar el color manualmente. Puedes encontrar más información acerca del atributo
ExecuteInEditMode en la documentación que está vinculada en la parte inferior de este post.
Apoya el contenido de mi blog a través de:
Fuente: