Introducción – Preparación del proyecto
En este artículo vamos a aprender a utilizar los mensajes en consola para analizar el funcionamiento de nuestro código y eventualmente detectar y corregir bugs.
Para empezar vamos a crear un proyecto nuevo en Unity, en mi caso lo voy a llamar Debugging.
En el proceso de detección y corrección de bugs nos vamos a valer principalmente de la consola de Unity, en esa ventana se imprimirán mensajes que colocaremos estratégicamente en nuestro código.
En caso de no tener activa la ventana de consola se puede abrir desde la pestaña Window como se observa en la figura 3.
El siguiente paso es crear un nuevo Script C#, lo podemos hacer desde la ventana del proyecto como se observa en la figura 4. Voy a darle el nombre «Debugging».
Clic aquí para saber más sobre Scripts en Programación
Para que el código de nuestro Script se ejecute en general no basta con crear el Script, también tiene que estar asignado a al menos un GameObject de la jerarquía. Vamos a crear un Empty GameObject y le damos un nombre significativo.
Luego con ese GameObject seleccionado arrastramos el Script hacia el inspector para asignarlo (figura 8).
Programación C# Unity – Debug.Log
Al abrir el Script (figura 10) vemos que hay algo de código que viene escrito por defecto. Se importan las librerías básicas y tenemos los métodos Start y Update los cuales se ejecutan automáticamente.
En mi canal hay un video sobre qué es un método en programación y también un artículo en esta página.
Vamos a escribir una instrucción en el método Start. Esta instrucción es la ejecución del método Log de la clase Debug, al cual le pasaremos el mensaje que debe imprimir.
Como se observa en la figura 11, la instrucción es:
Debug.Log(«Este mensaje aparecerá en la consola»);
Entramos en el modo juego para probar el Script, para esto se utiliza el botón Play del Editor (figura 12).
Se observa que el mensaje aparece en la esquina inferior izquierda del programa sin que tengamos abierta la consola.
En la figura 14 separé la ventana de la consola para visualizar mejor la información.
Veamos qué ocurre si colocamos un mensaje en el método Update.
A la derecha del mensaje se observa un número que indica la cantidad de veces que se imprime el mensaje.
Como se observa en la figura 16 el mensaje del método Update se ha impreso 82 al momento de la captura mientras que en la figura 17 el mensaje se ha impreso 350 veces.
Utilización de variables
Los mensajes que queremos imprimir en consola puede estar almacenados en variables y el resultado es el mismo.
Vamos a crear algunas variables más, un entero, un boolean y un float. Estos tres tipos de variables junto con los String son los tipos básicos de variables que vamos a utilizar en cualquier proyecto.
En el canal hay un video sobre qué es una variable en programación y también escribí un artículo para esta página.
Como se observa en la figura 19 vamos a declararlas e inicializarlas con un valor, esto lo podemos hacer en distintos puntos del Script, pero lo haremos en el inicio de la clase, antes del método Start.
Luego vamos a ejecutar tres métodos Debug.Log pasando como parámetro las variables.
Al entrar en el modo juego, en la consola aparecen los cuatro mensajes.
En versiones anteriores era necesario ejecutar el método ToString() para poder imprimir el valor de una variable que no sea un string, como se observa en la figura 22, esto se puede hacer pero ya no es necesario, se pueden pasar las varibles directamente.
Vamos a definir 4 nuevas variables, una de cada tipo y darle valores distintos, como se ve en la figura 23.
Podemos hacer que en la consola se imprima el resultado de operaciones con variables, como se observa en la figura 24.
Si comparamos los valores de la figura 23 con las impresiones en consola que se ven en la figura 25, podemos verificar esto.
También es posible concatenar distintos tipos de variables e imprimir un mensaje.
Contador de Frames
Previamente colocamos una instrucción Debug.Log en el método Update, la cual contenía un mensaje fijo.
Vamos a imprimir un mensaje que va a cambiar frame a frame.
Para empezar definimos un entero para contar los frames y lo inicializamos en el valor 0.
Vamos a concatenar el mensaje «Este es el frame: » (incluyendo el espacio final), con el valor del contador.
Luego de mostrar el mensaje en consola, incrementamos el contador para que en el siguiente frame indique el número de frame siguiente.
Estas dos instrucciones se observan en la figura 29.
En las figuras 30 y 31 se observa la ejecución de este código en dos momentos distintos.
Elementos de un Array o vector de enteros
Ahora vamos a aplicar el Método Debug.Log para analizar los elementos de un Array.
Un Array es una estructura ordenada de datos de algún tipo sobre el cual se pueden hacer operaciones. Esta estructura de datos es como el vector matemático.
En primer lugar vamos a declarar un Array de enteros, esto es similar a declarar un número entero solo que añadiendo los corchetes luego del tipo, como se observa en la figura 32.
En ese mismo punto vamos a crear el Array con los valores que se ven en la figura 32.
La lectura del Array la vamos a hacer en el método Start, en primer lugar vamos a escribir un mensaje que indique el tamaño del vector.
Para recorrer el Array utilizamos un bucle «for» que arranca desde 0 hasta la cantidad de elementos del Array menos uno.
Dentro del bucle for vamos a imprimir un mensaje en consola usando Debug.Log y concatenando texto con los valores de la variable.
De esta forma utilizando la consola podemos estudiar el array y sus elementos, como se observa en la figura 34.
Imprimir el resultado de la ejecución de un Método
Si tenemos un método que devuelve una variable, podemos aplicarlo como parámetro del método Debug.Log, como se observa en la figura 35.
Se define el método «UnMetodoExcelente» el cual devuelve un string.
La ejecución de este código se observa en la figura 36.
Lo mismo podríamos hacer con un método que requiera parámetros, como se ve en la figura 37.
Debug.Log para analizar el resultado de una sentencia if
El flujo de nuestro programa puede moverse por distintos caminos en función de los datos, por ejemplo en una sentencia if, el flujo del programa tomará uno de dos caminos posibles en función de la variable booleana que se evalúe.
En la figura 39 hacemos la definición de la sentencia if, la cual ejecutará un método o el otro. Cada método imprime su mensaje característico.
En las figuras 40 y 41 vemos la ejecución en dos momentos distintos del juego.
Conclusión
El método Debug.Log se utiliza para escribir mensajes en la consola.
Colocando estos mensajes estratégicamente en nuestro código somos capaces de visualizar el flujo del programa, obtener información del estado de nuestras variables y objetos.
El método Debug.Log toma como parámetro una variable que puede ser en principio string, bool, int o float, los tipos básicos de variables que hemos analizado en otros artículos.
Estos parámetros pueden ser entregados de distintas formas, por ejemplo es posible crear un mensaje concatenando variables, como el resultado de un método, ingresar las variables directamente o ingresar las operaciones cuyos resultados queremos que se impriman.