Friday, August 9, 2013

[Info] Programación en Unity: Unity JS vs C#

Hola a todos, este post tiene como objetivo el hacer una introducción a ambos de los lenguajes más usados cuando estamos programando en el motor de juegos Unity3D, todos sabemos (y si no ahora si lo sabemos) que Unity nos permite manipular código en tres lenguajes diferentes de programación: Boo (la cual es una referencia a Python), C# y Javascript (conocido también como Unityscript).

En este pos como dijimos antes, solo vamos a ver ambos de los lenguajes más populares, C# y Javascript, así como se ha visto en diferentes foros, sitios web y así, esos son los más usados.

Primero que todo vamos a hablar sobre Javascript, cuando hablamos de Javascript o Unityscript, no nos estamos refiriendo a el mismo lenguaje web exactamente, pero no vamos a detenernos mucho a reflexionar sobre esto, dicho esto, cuando apenas están usando Unity, esta puede ser su mejor opción para empezar, por qué? Les dejo unos puntos del por qué deberían usar Javascript cuando están apenas empezando:

1)      Es más flexible: si están más relacionados en un ambiente de programación, saben que hay diferentes tipos de variables para diferentes usos, en Javascript cuando declaran una variable puedes o no declarar el tipo de variable que estamos usando, entonces a como el código se va extendiendo, Unity, va a descifrar por sí mismo para nosotros, así que si estamos haciendo algo mal, Unity, no va a ser una molestia e incluso var a averiguar la forma correcta de arreglar cualquier cosa que esté mal.
 2)      Es un poco más fácil de entender y manejar: Ya que no es tan estricto (como en el caso de C#) podemos seguir una línea más entendible en nuestro código, a esto se le llama Tipado Dinámico, el único problema es que podría correr un poquito más lento ya que Unity tiene que descifrar dinámicamente todas las cosas que dejamos en blanco.
 3)      Más soporte en la Guía de codificación: Cuando vemos la guía o referencia de código que viene con Unity, todo bien ejemplificado con Javascript como predeterminado (coincidencia?) pero podemos cambiarlo a ya sea C# o Boo, pero cuando nos adentramos más profundamente en la referencia podemos notar que hay algunas cosas que solo vienen documentadas en Javascript.

Ahora vamos con C#, ok?

C# es un lenguaje muy conocido más que todo en software como el Visual Studio, donde lo usamos en plataforma Microsoft, es prácticamente la misma cosa y es más fácil de usar cuando queremos usar las librerías MSDN (para las personas que están más acostumbradas a estos ambientes), si estamos más involucrados en la programación previamente podremos usar como mejor opción C#, vamos a ver algunos puntos:

1)      Menos flexible pero más características: Con C# podemos manipular mucho más datos  que en  Javascript (cosa que se ha estado mejorando últimamente) y podemos usar características más llamativas usando esto como un puente para comunicar algún tipo de dato externo en el cual no se podría usando Javascript.
 2)      Más estricto pero más exacto: Como C# es más estricto, y tenemos que escribir todas los tipos de variables y funciones, no hay oportunidades para el error, todo error de escritura o errores funcionales en el código se nos van a advertir antes de que empecemos a correr nuestro código, por ejemplo, cuando intentamos convertir un tipo de variable a otro y lo hacemos mal, nos va a dar un mensaje en la consola diciéndonos que es lo que estamos haciendo mal.
 3)      Más acceso al System tools: Este punto es más para personas que están ya involucradas con la programación, podemos tener acceso a características más avanzadas, como se había dicho antes, para comunicarnos con cosas externas a Unity.


Bien ahora que hemos visto ambas con algunas pocas características, algunos de ustedes se preguntaran cosas como es C# más estricto que Javascript y cosas como declaraciones y cosas así, vamos a ver unos ejemplos:




Lo primero es que podemos ver en la ventana de C# (arriba) que hay una “Clase” escrita y visible ahí y que en la ventana de  JS (abajo) no está, eso es porque Unity automáticamente crea una clase escondida usando el mismo nombre del script, al contrario de C# donde tenemos que declarar dicha clase, eso nos puede dar una mala pasada para mucho de los nuevos usuarios por que por eso, no podemos usar un script que tenga un nombre diferente que el nombre de la clase que declaramos dentro (así que olvidémonos de copiar y pegar un script entero sin recibir ningún error ;) ).

Otro ejemplo es en las funciones que vemos ahí, podemos notar que en C# tenemos primero que escribir el tipo de valor retornado por la función, por ejemplo vacío o void (significa que no nos regresa ningún valor) o el de Bool, después de esto escribimos el nombre de la función (y lo mismo para el parámetro de adentro). Pasa exactamente lo mismo con las variables, pero en Javascript podemos ver que para crear una variable solamente tenemos que escribir la palabra “var” y no es necesario escribir el tipo de variable que estamos declarando (como lo hemos hecho con la variable “started”).

Otra diferencia es que en Javascript el tipo de variable predeterminado es una variable “pública”, eso significa que podemos ver el valor de la variable en el inspector de Unity y usarlas mediante otros scripts, para hacerla privada (que solo sea usada en este script y esconderla del inspector) tenemos que escribir “private var”, al contrario de C# donde el predeterminado es una variable privada en vez de pública, y tenemos que escribir la palabra “pública” seguido del tipo de valor que estamos usando.

Entonces para terminar este post, hagámonos una pregunta: Debería elegir Javascript o C# como lenguaje de programación?

Bien, no hay una respuesta correcta para esta pregunta, pero lo que puedo sugerir es que si solo están empezando en todo esto de la programación, Javascript, puede ser mucho más fácil para empezar, y no significa que no puedan empezar con C# solo es una sugerencia y mi punto de vista para facilitar más las cosas. Y si ya tienen el conocimiento o están más adentrados en esto de la programación y quieren lograr efectos más avanzados y llamativos, sugiero que intenten con C# pero la mejor práctica que pueden realizar es tomar un script y traducirlo de un lenguaje a otro, como si fuera de Ingles a Español y viceversa.

Bien, espero que esto haya sido de ayuda para ustedes y puedan encontrar su camino para empezar a programar en Unity3D, sigan visitando este blog para encontrar más ayuda (esperemos) en otros tipos y guas para ustedes. 

~ Sycmasters


3 comments: