martes, 7 de junio de 2016

Mejora el GUI de tus Scripts

Muy buenas,

Es cierto que en capítulos anteriores nos hemos centrado bastante en las construcciones de C#. Pero claro, los fundamentos hay que cubrirlos ;)

En este capítulo nos vamos a centrar en cómo mejorar nuestros scripts para que sean más fácil de usar desde Unity. En otras palabras, conseguir esto:



Como podéis ver, nuestros campos están separados en categorías o grupos. También hemos convertido ciertos valores en "Sliders". Esto nos permite un mejor control y un valor mínimo y máximo.

Unity hace muy fácil el declarar estas secciones. Lo hace usando "atributos".



Aquí el elemento "invasor" es el atributo:

    [Header("Display...")]

La verdad es que Microsoft no nos ayuda mucho a la hora de definir o explicar qué son los atributos. Su definición es enormemente confusa (al estilo Microsoft). Así que yo os doy mi propia explicación.

Los atributos son como "etiquetas" que se pueden añadir a distintos elementos (variables, clases, etc) para proporcionar información extra.

Se escriben entre [] y se anteponen al elmento que complementan, en nuestro caso la variable ScoreBoardText. De ahí que escribamos la variable con su atributo de esta manera:

    [Header("Display...")]
    public Text ScoreBoardText;


Los atributos no proporcionan funcionalidad extra (nuestra variable no se comporta de manera distinta), pero son usados por otros procesos (para nosotros Unity) para detectar que están ahí y hacer algo al respecto.

Cuando Unity encuentra el atributo Header, pues añade un sección con una cabecera.

Otro atributo que nos es muy útil es Range. Este atributo nos permite añadir un "slider" al campo numérico que queramos, indicando también un valor mínimo y máximo.


De esta manera conseguimos un mejor manejo y acotar los valores posibles.

Como podéis ver, Unity nos facilita mucho la labor de organizar nuestros campos y valores.

Los Links de Documentación Oficial


Atributo Header

Atributo Range


Desde esos mismos links podréis navegar e inspeccionar otros atributos que Unity nos proporciona.


Bueno... pues aquí os dejo el vídeo explicativo:


Para cualquier pregunta o comentario, aquí mismo o en YouTube

Un saludo,
-David-




domingo, 22 de mayo de 2016

Estructura condicional switch

Hola a todos,

En esta entrega vamos a ver la instrucción switch como una posible alternativa a los if-else encadenados.

switch


Una buena forma de poder entender la funcionalidad y estructura de la instrucción switch es empezar por el ejemplo del if-else encadenado del capítulo anterior.

if (a == 3)
{
    print("Primer Número favorito.");
}
else if (a == 6)
{
    print("Segundo Número favorito.");
}
else
{
    print("Un Número cualquiera.");
}



El equivalente en la instrucción switch sería:

switch (a)
{
    case 3:

        print("Primer Número favorito.");

        break;


    case 6:
        print("
Segundo Número favorito.");
        break;

    default:
        print("Un número cualquiera.");
        break;
}


Para que un if-else y un switch sean equivalentes, lo primero es que todas las condicionales del if-else comparen siempre la misma variable. En nuestro caso, es la variable a.

Al igual que un if-else, switch nos garantiza:
  • Ejecución exclusiva: no se puede ejecutar más de una rama. Se puede forzar la ejecución de 2 o más ramas con el uso de un goto case, pero esta práctica es más avanzada, delicada y no recomendada.
  • Tan pronto como una de las condiciones sea verdadera, el resto no se evalúan.

Los requisitos para poder usar switch son:
  • Todas las comparaciones se realizan con respecto a una sola variable y siempre la misma.
  • Siempre se comparan constantes (numéricas, cadenas o enum), pero no se pueden usar otras variables o llamadas a funciones.

Las ventajas que nos proporciona son:
  • Fácil de Entender
  • Fácil de Mantener
  • Fácil de Depurar (debug)

Aquí os dejo el vídeo explicativo, espero que os guste.





Para cualquier pregunta o comentario, aquí mismo o en YouTube.

Un saludo,
-David-

viernes, 20 de mayo de 2016

if-else / if-else encadenados

Hola a todos,

En esta nueva entrega, vamos a expandir lo que aprendimos en el capítulo anterior sobre las condicionales.

if-else 


Es muy común que cuando tengamos que tomar alguna decisión, tengamos que actuar tanto en caso afirmativo como negativo. Dicho de otro modo, tomamos una decisión cuando algo es cierto y "en caso contrario" también tenemos que actuar. Por ejemplo:

if (edad < 18)
{
  print("Eres MENOR de edad");
}
else
{
  print("Eres MAYOR de edad"); 
}

La condicional if tiene el complemento else que nos indica "en caso contrario". Visto de esta manera, es fácil deducir que si la edad es menor de 18, imprime un rótulo y, en caso contrario, imprime otro.

La ejecución es exclusiva ya que nunca se podrán imprimir ambos rótulos. if-else siempre garantiza que sólo uno de los caminos es elegido.

if-else encadenados


Las condicionales if-else se pueden encadenar para poder comparar más de una condición. Veamos un ejemplo para buscar dos posibles números favoritos.

if (a == 3)
{
  print("PRIMER número favorito");
}
else if (a == 6)
{
  print("SEGUNDO número favorito");
}
else
{
  print("Un número cualquiera.");
}

Esta forma de encadenar las condicionales nos garantiza dos cosas:
  • Ejecución exclusiva, ya que sólo se puede imprimir un rótulo.
  • Tan pronto como se determine que una de las condicionales es cierta, el resto de las condicionales no se van a evaluar.
Os dejo el vídeo explicativo donde todo queda explicado de forma visual.




Cualquier pregunta o comentario... aquí mismo o en YouTube.

Un saludo,
-David-






martes, 17 de mayo de 2016

Unity 3D - Intro a Variables y Condicionales en C#

Hola a todos,

En esta entrega de aprender a programar en C# vamos a cubrir dos aspectos principales de la programación:
  • Variables: Nos permiten almacenar información, como Nombre, Edad, etc...

    Hay dos formas de declarar variables:

    int edad = 18;
    var edad = 18;    (preferido)


    La diferencia entre ambos es que en el primer caso, el tipo de la variable se especifica de forma explícita. En el segundo caso, el tipo de la variable es "inferido" por el tipo de valor que se le asigna.
  • Condicionales: Son los llamados if y son comparaciones que se realizan para tomar decisiones.
      if (edad >= 18)
      {
          print("Mayor de Edad")
      }

Ambos elementos son vitales para poder programar, porque por simple que sea una aplicación o juego, siempre se tendrá que acceder a información que se encuentre en variables, o almacenarla en ellas.

Por otro lado, de alguna manera hay tomar decisiones basadas en dicha información.

Os dejo con el vídeo explicativo:


Si tenéis alguna pregunta o comentario, lo podéis dejar tanto aquí como en YouTube.


Un saludo a todos,
-David-

lunes, 16 de mayo de 2016

Unity 3D - Estructura Básica de un Fichero C#


En nuestra primera toma de contacto con un fichero de C#, explicamos la organización de dicho fichero.

Los conceptos clave que se cubren son:
  • La sección de cabecera, normalmente ocupada por las instrucciónes using que referencian los espacios de nombre.

  • La definición de la clase, que es donde se almacenan los datos y comportamiento de nuestra funcionalidad.

El vídeo explicativo se encuentra en: 
 


Espero que os guste y lo encontréis útil.

Para comentarios y/o preguntas aquí mismo o en YouTube...

Un saludo,
-David-