Introducción

En este artículo vamos a ver cómo se puede hacer para cambiar la imagen que muestra el cursor al parar el puntero sobre un botón en Unity. Además se provee un paquete de descarga donde vienen los scripts, sprites y la escena con todos los elementos montados.

Paquete de Unity para descargar

🟢VÍDEO: Cómo cambiar el CURSOR al pasar el MOUSE sobre un elemento de la interfaz gráfica en Unity


Fig. 1: Visualización de la escena en el paquete de Unity, cursor sobre la pantalla, sprite de flecha.
Fig. 2: Visualización de la escena en el paquete de Unity, cursor sobre un botón, sprite de mano con dedo.

Configuración del Cursor por defecto en Unity

Esto es algo que se puede hacer dentro de alguna función Start, pero si nuestro juego o aplicación tendrá un cursor con una imagen por defecto, por ejemplo una flecha personalizada, es cómodo definirlo dentro de los parámetros del proyecto, yendo a Edit > Project Settings, se despliega la ventana que se observa en la figura 3, allí podemos asignar el Sprite del cursor por defecto, así como también sus coordenadas de Hotspot.

Fig. 3: Configuración del cursor por defecto en Unity.

Determinar el hotspot de un cursor personalizado en Unity

El hotspot es el offset medido desde la esquina superior izquierda del Sprite hacia el punto en donde se considera que está la punta del cursor. El script que viene en el paquete tiene campos definidos para asignar el Sprite de dos cursores así como también los vectores de sus respectivos Hotspots, como se observa en el inspector en la figura 4.

Para determinar los Hotspots hay que entrar en el modo juego e ir probando distintos valores hasta que Unity tome correctamente el cursor, otra forma sería conocer exactamente a cuántos píxeles en horizantal y vertical se encuentra la punto del cursor.

Fig. 4: Inspector del script Cursor Manager que viene dentro del paquete, asignación de Sprites y configuración de Hot Spot.

Cómo cambiar la IMAGEN del cursor en Unity

Para cambiar la imagen que muestra el cursor basta con ejecutar las instrucciones mostradas en la figura 5, en las líneas 31 y 37, el método SetCursor dentro de la clase Cursor, pasando como parámetro el sprite que queremos mostrar, el Vector2 con la posición del Hotspot y el modo de cursor. (aquí dejo un buen vídeo sobre métodos en programación y parámetros).

Fig. 5: Funciones para cambiar el sprite del cursor en Unity.

Cuándo cambiar el sprite del cursor en Unity

En este caso en particular nos interesa mostrar constantemente un cursor por defecto hasta que el puntero se posiciones encima de un botón, en ese momento queremos mostrar otro cursor distinto para dar feedback de que el usuario puede interactuar con ese elemento. Entonces tenemos que ser capaces de detectar exactanebte cuándo es que ocurren estos eventos y para eso a cada botón le asigno un componente tipo «Event Trigger», definiendo los eventos «On Pointer Enter» y «On Pointer Exit» que se activan cuando el cursor entra en el Target Graphic del GameObject.

A ambos eventos les asignamos el GameObject que tiene el Script con las funciones que queremos ejecutar (estas funciones deben estar definidas como públicas) y luego utilizando el menú desplegable elegimos las funciones a ejecutar en cada evento.

Fig. 6: Asignación de las funciones definidas en el Script a los Event Trigger que fueron agregados a los botones.

Descripción del error

Este error se produce al intentar modificar una capa que es un Smart Object, normalmente cuando se intenta editar una imagen importada que no ha sido rasterizada. En la siguientes imágenes se ve la selección con la varita magica del fondo de la imagen y en la imagen de la derecha el mensaje de error que aparece al intentar eliminar la selección.

Fig. 1: Selección de área con varita mágica en Photoshop.

Fig. 2: Mensaje de error, no se puede editar directamente el objeto inteligente.



Cómo rasterizar el objeto inteligente

La rasterización es el proceso por el cual se transforma un gráfico vectorial en un mapa de los píxeles que componen la imagen. Es conveniente duplicar la capa y mantener la original oculta antes de rasterizarla, para guardar una copia de seguridad en caso de necesitar hacer cambios más adelante. En la figura 3 se tiene seleccionada la capa con el objeto inteligente que se quiere editar, observen el ícono en la esquina inferior derecha del thumbnail que indica que se trata de un objeto inteligente.

Para rasterizar la capa hacemos clic derecho sobre la capa y pulsamos en la opción «Rasterize Layer» que se muestra en la figura 4.

Fig. 3: Selección de la capa con el objeto inteligente que se quiere editar.
Fig. 4: Opción para rasterizar el objeto.

Una vez rasterizada la capa se pueden eliminar los píxeles del fondo de la imagen, pintarle por encima y realizar otras acciones que no eran directamente aplicables a los objetos inteligentes.

Fig. 5: La capa seleccionada fue rasterizada.



Introducción

En este artículo veremos cómo implementar una ventana de confirmación para salir del juego en Unity y un vídeo del canal en el que se resume la información. Si aún no estás suscrito al canal considera suscribirte haciendo click aquí, solo toma unos segundos, es gratis y si no estás conforme con el contenido que comparto puedes anular la suscripción. Esta información y los vídeos son posibles gracias al apoyo de la comunidad, así que desde ya muchas gracias.

Continuando con la información de este artículo, la idea en concreto es que al pulsar el botón salir se despliegue una ventana de confirmación preguntándonos si estamos seguros de querer salir y con dos botones, uno para cancelar y otro para confirmar salir del juego. Es muy común encontrar este tipo de ventanas ya que a veces nos equivocamos al hacer clic y puede ser muy frustrante para el jugador tener que esperar a que se cierre el juego y volver a iniciarlo.

Descargar paquete de Unity

Este artículo incluye un paquete de Unity para descargar que puedes importar en tu propio proyecto para estudiarlo. A continuación te dejo la tarjeta de descarga.

En el siguiente vídeo vemos cómo está implementada la ventana de confirmación para salir del juego en Unity que te puedes descargar en el paquete de Unity de más arriba.


Descripción del sistema

Este sistema consiste en un control para un personaje que le permite detectar los elementos del escenario por los que se puede mover, estos elementos son las casillas y tienen asignado un determinado Script que permite que el personaje los identifique. La solución permite fácilmente agregar nuevas casillas al escenario e incluso se puede hacer mientras el juego está funcionando, lo que permite ir modificando el escenario a medida que el juego se desarrolla.

Descargar esta solución

A continuación puedes descargar el paquete de Unity para importar en tu proyecto.

Descripción del sistema

Este sistema consiste en un conjunto de checkpoints que se colocan sobre el escenario y son administrados por un Script que tiene la referencia de todos los checkpoints de la escena. Un checkpoint consiste en un GameObject con un collider que actúa como detector, cuando el jugador pasa por un detector, el checkpoint correspondiente le avisa al sistema que el personaje ha entrado, el sistema revisa cúal es el índice del checkpoint que le notificó y lo registra. Cuando se vuelve a cargar la escena el personaje aparecerá en el último checkpoint que haya activado. Además esta solución permite eliminar los datos guardados en el sistema de checkpoints, pudiendo así resetear la escena cuando sea necesario.


Paquete para descargar

Introducción

En esta entrada vemos algunos ejemplos de métodos en programación que retornan «void» (vacío), es decir que no producen datos de salida y además métodos que no requieren parámetros de entrada. Para ello analizaremos un proyecto en Unity que consiste en una escena que tiene un conjunto de luces rojas, verdes y azules, un Script permite controlar el sistema de luces, encender y apagar todas las luces, o encender y apagar luces por color. Esto se logra definiendo distintos métodos de programación en el interior del Script de control.

En el siguiente vídeo muestro cómo funciona este sistema de iluminación hecho en Unity


Descargar sistema de luces en Unity

En el siguiente enlace puedes descargar el paquete de Unity con los Assets que se utilizan en el vídeo.

Funcionamiento del sistema

Este sistema está implementado usando solamente métodos que no tienen parámetros de entrada ni producen datos de salida.

En la jerarquía de la escena, tenemos un GameObject llamado Master of Lights que tiene asignado el script del sistema (también llamado Master of Lights). Este GameObject tiene tres hijos, que a su vez son los contenedores de las luces de cada color.

Cómo apagar las luces en Unity

Para apagar las luces en Unity se podría desactivar el GameObject que tiene el componente Light asignado o cualquier GameObject jerarquía arriba, o directamente se puede inhabilitar el componente Light, por ejemplo desmarcando la casilla en el inspector. Esto último es lo que usé en mi sistema, solo que lo vamos a hacer a través de código.

Encontrar las referencias de los componentes Light

Para poder modificar los componentes Light desde el Script necesitamos tener las referencias de estos componentes Light y además necesitamos que estén separados por color. En el inspector del Script hay cuatro arrays de componentes Light, uno para asignar todas las luces y los otros tres tendrán las referencias separadas por color.

Al entrar en el modo juego se puede ver cómo las referencias se encuentran automáticamente en tiempo de ejecución. En este artículo vamos a partir de la base de que contamos con las referencias de los componentes, si quieres ver los métodos que se encargan de encontrar las referencias lo dejaré aquí en la tarjeta de la esquina, te recomiendo que veas la serie completa sobre encontrar referencias en Unity en donde muestro distintas técnicas y ejemplos de cómo encontrar GameObjects y componentes de la jerarquía desde un Script.

Análisis del Script de control de luces en Unity

Si entramos en el Script, en la primera parte vamos a ver las variables que aparecen en el inspector, lo que sigue de ahí en adelante son todos métodos que no tienen parámetros de entrada ni producen datos de salida.

La sintaxis de un método sin parámetros de entrada ni salida es la siguiente: primero se indica la visibilidad que puede ser pública, privada o protegida, con las palabras public, private y void respectivamente, si se omite la visibilidad el método es privado.

Luego sigue la palabra void que indica que este método no tendrá parámetros de salida, en este ejemplo todos los métodos van a devolver void. 

Luego sigue el nombre del método que puede ser el nombre que queramos, es conveniente que el nombre sea lo más representativo posible de la función que cumple, ya que lo interesante de los métodos es que nos permiten abstraernos de lo que contienen en su interior, considerarlos como una caja negra que cumple una función y construir soluciones más complejas arriba de eso.

Luego del nombre del método, abrimos y cerramos paréntesis porque el método no recibe parámetros de entrada, luego abrimos y cerramos llaves y las instrucciones que formen parte del método estarán en el interior de estas llaves.

Llamadas a los métodos

Para hacer que se ejecute un método se usa su nombre, se abre y cierra paréntesis (en este caso porque el método no requiere parámetros de entrada) y se finaliza con con punto y coma.

Cuando el flujo del programa llegue a ese punto, saltará a la región del método, ejecutará sus instrucciones y al finalizar retornará al punto desde donde se produjo la llamada.

Entonces fíjense que ejemplos conocidos de este tipo de métodos son los métodos Start, Update y FixedUpdate, funciones que ejecutará Unity automáticamente en su ciclo de vida. 

En el método Start se hace la llamada a dos métodos, uno que se encargará de encontrar las referencias de las luces y separarlas por colores. Luego otro método que se encarga de apagar todas las luces, esta es la razón por la que al darle Play, todas las luces comienzan apagadas.

En el método Update se hace la ejecución a un método en donde se leen las entradas de teclado y se ejecutan los métodos apropiados para encender y apagar las luces dependiendo de la tecla pulsada. Lo que se hace es leer las teclas del 1 al 8 y en cada caso se ejecuta un método distinto.

Además de poder llamar los métodos de acuerdo a las entradas de teclado, en este ejemplo también los llamamos desde los botones de la interfaz gráfica, lo que nos muestra cómo el mismo código se puede reutilizar y ejecutar de distintas maneras, si quisiéramos podríamos ejecutar los métodos cuando un objeto entra en contacto con un trigger, cuando el personaje muere, cuando se derrota a un enemigo, las posibilidades son infinitas.

Métodos que finalmente controlan el encendido de las luces

Los métodos que controlan el estado de las luces se han definido con visibilidad pública para que puedan ser llamados utilizando los botones de la interfaz gráfica.

En el interior del método para encender todas las luces por ejemplo, lo que se hace es un bucle foreach para cada componente Light dentro del array que contiene todas las luces y a cada componente se le modifica su parámetro enabled haciéndolo igual a verdadero, esto es equivalente a tildar la casilla de habilitación del componente Light en el inspector, el resultado es que ese GameObject comienza a emitir luz en la escena.

Los demás métodos son muy similares, solo cambia el array que recorremos y el valor que se le asigna al parámetro enabled.

Definición de tiempo de ejecución

Se conoce como TIEMPO DE EJECUCIÓN (Runtime) en programación al intervalo de tiempo que va desde que el sistema operativo comienza a ejecutar las instrucciones de un determinado programa, hasta que finaliza la ejecución del mismo, ya sea porque el programa concluyó exitosamente o porque fue finalizado por el sistema operativo a causa de un fallo en tiempo de ejecución.

Tiempo de ejecución en Unity

Cuando estamos desarrollando un juego o aplicación en Unity, el tiempo de ejecución de nuestro programa inicia cuando pulsamos el botón Play hasta que pulsamos Stop y además cuando hacemos una compilación para windows por ejemplo, el tiempo de ejecución comienza desde que ejecutamos la aplicación hasta que la misma se finaliza.

Hace un tiempo hice un vídeo sobre cómo referenciar objetos y componentes que se crean en tiempo de ejecución en Unity, a través de la función Instantiate o la función AddComponent. Puedes verlo a continuación:


Es importante entender este concepto de tiempo de ejecución en Unity porque tenemos que ser capaces de manejar situaciones que van a ocurrir durante la ejecución del programa, por ejemplo enemigos que aparecen en mitad de la partida, estos enemigos van a necesitar que se les proporcione cierta información que no fue posible darles en el momento del desarrollo del juego simplemente porque no existían en ese momento, así que el responsable de crear esos enemigos deberá además entregarles la información que necesiten, por ejemplo la referencia del jugador al que tienen que atacar.

Introducción

En este artículo vamos a analizar un algoritmo que permite barajar arrays de distinto tipo, es decir se trata de una función que recibe como parámetro un array que puede ser de tipo float, enteros, GameObjects, etc; y la función va a desordenar ese array. El algoritmo está basado en el método Fisher-Yates para aleatorizar arrays.

En el siguiente vídeo explico una implementación de un ALGORITMO para Barajar ARRAYS de cualquier tipo en lenguaje C# en Unity


Paquete para descargar

A continuación te puedes descargar el paquete de Unity para importarlo y obtener los assets que muestro en el vídeo.

Introducción

En este artículo vemos cómo generar una versión WebGL standalone de nuestro proyecto para navegadores, es decir un programa que se pueda alojar en un servidor, por ejemplo en Itch.IO o en nuestra propia página web y que se pueda ejecutar directamente desde el navegador.

En el siguiente vídeo se muestra qué herramientas se necesita instalar y cómo configurar Unity para exportar versiones WebGL para navegadores.


Cómo crear una compilación para navegadores a partir de un proyecto en Unity 3D

Comenzamos dirigiéndonos a la pestaña File > Build Settings, esto nos abrirá la ventana «Build Settings» que se observa en la figura 1. Aquí podremos configurar algunos parámetros de compilación, como las escenas que se van a añadir y la plataforma objetivo.

Fig. 1: Ventana Build Settings para configurar los parámetros de compilación y compilar.

Vamos a hacer clic en el botón «Add Open Scenes» para añadir la escena actual a la compilación (una escena en blanco que viene por defecto). La escena que se coloque en la posición 0 será la que se cargue al iniciar, de modo que si tenemos múltiples escenas habrá que reordenarlas convenientemente.

Fig. 2: Botón para añadir la escena actual a la compilación.

Para generar una compilación WebGL para navegadores, es necesario configurar Unity para que produzca este tipo de compilaciones. En la pestaña «Build Settings» está la lista de plataformas objetivo, allí debemos seleccionar la plataforma «WebGL» y luego hacer clic en el botón «Switch Platform». Esto iniciará el proceso de cambio de plataforma que puede durar unos minutos, este proceso es necesario hacerlo solo una vez, a menos que necesitemos alternar entre compilaciones para Windows o para navegadores. En general es más cómodo testear en el propio sistema operativo y luego de hacer varios avances, producir una compilación WebGL para subirla a Itch.io o a nuestra propia página web.

Fig. 3: Se selecciona la plataforma WebGL y se pulsa el botón «Switch Platform».

Una vez que se produjo el cambio de plataforma, el siguiente paso es darle al botón «Build and Run», esto hará que se despliegue una ventana en la que seleccionaremos la carpeta de destino para exportar los archivos del juego o aplicación. En mi caso suelo crear una carpeta llamada Builds en paralelo a la carpeta Assets del propio proyecto, pero pueden elegir cualquier carpeta que deseen, asegúrense de recordar dónde se encuentra para luego poder usar los archivos.

Fig. 4: Se elige el directorio de destino para los archivos de la compilación de Unity para navegadores.

Cuando hemos elegido la carpeta de destino hacemos clic en «Select Folder» para confirmar.

En este punto comienza el proceso de compilación, que tardará más o menos dependiendo de factores como la complejidad del proyecto y la potencia de nuestro ordenador, en la figura 5 vemos la barra de carga de este proceso.

Fig. 5: El proceso de compilación de Unity para navegadores se está llevando a cabo.

Cuando el proceso de compilación finaliza, como compilamos con la opción «Build and Run», se abre la aplicación automáticamente en nuestro navegador.

Si vamos a la carpeta que se eligió para la compilación encontraremos los archivos del juego o aplicación (figura 8). Estos archivos se pueden subir a una página como Itch.IO o subir a un servidor y podrán ser ejecutados directamente desde el navegador.

Fig. 6: El resultado de la compilación WebGL se encuentra en la carpeta que indicamos.

Cómo testear compilaciones WebGL hechas en Unity

En la figura 6 vemos la carpeta que contiene los archivos que se generaron durante la compilación. El archivo «index.html» sería algo así como el ejecutable de nuestro juego o aplicación. El problema es que al darle clic para testear nos sale el siguiente mensaje:

Fig. 7: Al intentar abrir la compilación WebGL nos sale un mensaje que dice que nuestro navegador no lo soporta.

El mensaje dice que al parecer nuestro navegador no soporta la compilación Unity WebGL, nos dice que subamos el contenido a un servidor o que probemos otro navegador.

Para testear una compilación WebGL, la forma más rápida es volver a compilar con la opción «Build and Run», ya que al hacer esto, Unity monta automáticamente un servidor local para correr los archivos.

Para que la compilación WebGL funcione definitivamente tiene que estar montada en un servidor ya sea local, que se puede montar con aplicaciones como «Xampp», o tiene que estar montada en un servidor web, ya sea de un tercero, por ejemplo en una página como «Itch.IO» o en un servidor web propio. Te dejo un link a Hostinger, el servidor con el que vengo trabajando hace años, un servicio de calidad y con muy buenos precios, además de la facilidad para escalar el hosting en función del crecimiento de tu web.

Para subir la compilación a tu propio servidor necesitas hacerlo por acceso FTP, Hostinger tiene un acceso FTP incorporado en el panel de control, aunque a mi me resulta más cómodo usar la aplicación FileZilla para conectarme al servidor.

A partir de que se establece el acceso, el proceso no es distinto a copiar archivos dentro de tu propia PC, armas la carpeta donde quieres poner tu compilación, subes lo archivos y luego la ruta para ejecutar la compilación WebGL es la URL desde la raiz hasta el archivo «index.html», que a propósito le puedes poner el nombre que quieras, por ejemplo «Play.html».

Veamos el siguiente ejemplo para entender la ruta como URL dentro de nuestro servidor:

https://gamedevtraum.com/GDT-Apps/Lunar-Orbit-Simulator/Moon.html

Se trata de una compilación WebGL hecha en Unity, si hacen clic en el link pueden probarla. Analizando la URL vemos que la carpeta raiz se encuentra en GameDevTraum.com, a partir de ahí al observar la URL vemos que nos metemos en una carpeta llamada «GDT-Apps», dentro de esa carpeta entramos en otra carpeta llamada: «Lunar-Orbit-Simulator», donde finalmente se encuentra nuestro archivo «index.html», el cual he renombrado para que se llame «Moon.html».

Otra alternativa para conocer la URL del archivo «index.html» es desde el acceso FTP, hacemos clic derecho sobre el archivo y probablemente haya una opción de «Copiar URL», lo cual en el caso de FileZilla, no nos dá la URL exacta, pero si la mayor parte de ella, a eso le hacemos las modificacaciones necesarias para dar con la URL exacta.

Unity WebGL no termina de cargar en el navegador

Me ha pasado que al intentar abrir una compilación WebGL, el navegador nunca termina de cargarla, se queda congelado en la pantalla de carga de Unity. Este problema lo he solucionado quitando la compresión en la compilación WebGL.

Para eso vamos a Edit > Project Settings y se nos debería abrir la ventana que vemos en la figura 8.

Fig. 8: Desactivar la compresión en la compilación WebGL en caso de que el juego nunca termine de cargar.

Como vemos, en la sección de la izquierda vamos a «Player» y luego en la ventana grande de la derecha vamos a la sección «Publishing Settings», ahí al campo «Compression Format» lo cambiamos por «Disabled» y volvemos a efectuar la compilación. Esto en mi caso ha resuelto el problema de que una compilación de Unity para navegadores no termina de cargar.

Visitantes del espacio

Sinópsis del juego - Visitantes del espacio

Tienes el control de una nave espacial que dispara de a un proyectil por vez. Oleadas de naves alienígenas avanzan amenazando con destruirnos. Destruye las oleadas de enemigos antes de que nos alcancen.

Cómo jugar

Muévete hacia los lados con las teclas A-D o las flechas izquierda y derecha. Dispara con espacio. Elimina todas las naves de cada oleada.

Desarrollado por:

GAMEDEVTRAUM

UNITY DEVELOPER

Sobre el desarrollo de este juego

Tienes el control de una nave espacial que dispara de a un proyectil por vez. Oleadas de naves alienígenas avanzan amenazando con destruirnos. Destruye las oleadas de enemigos antes de que nos alcancen.

Detalles técnicos

A continuación vamos a repasar un poco de información sobre el funcionamiento interno de este juego, en primer lugar es un proyecto 2D desarrollado con el motor Unity. Los sprites fueron conseguidos en internet.

Dada la simplicidad del prototipo utilicé una única escena de Unity, por lo que no fue necesario preocuparse por el traspaso de información entre escenas.

Mecánicas del juego Visitantes del espacio

Nave controlada por el jugador

La nave se puede mover únicamente de forma horizontal desde un extremo de la pantalla hacia el otro con una determinada velocidad que no cambia durante el desarrollo de la partida, para el movimiento se utilizan las flechas direccionales o también las teclas A-D.

Pulsando la tecla ESPACIO la nave dispara un proyectil que viaja con una determinada velocidad la cual irá incrementando a medida que avancemos a la siguiente oleada. 

Por requisitos de diseño la nave solo puede disparar de a un proyectil, es decir que solo puede haber un misil en pantalla, cuando este impacte contra una nave enemiga o se salga de la pantalla, en ese momento la nave está habilitada para efectuar otro disparo.

La nave controlada por el jugador se destruye cuando es tocada por una nave enemiga.

El jugador cuenta con tres naves para acabar con tantas oleadas como pueda, eventualmente todas sus naves serán destruidas y el juego terminará.

Naves enemigas

En cada oleada aparecen cinco naves enemigas en la parte superior de la pantalla, las cuales empezarán moviéndose horizontalmente hacia un lado de la pantalla, cuando una de las naves alcanza un extremo de la pantalla, todo el conjunto de naves enemigas desciende ligeramente y luego se mueve en la otra dirección con un incremento de velocidad. 

La velocidad de las naves enemigas también se incrementa en cada oleada.

¿Por qué me hice una página web inicialmente?

Antes de crear esta página web comencé a compartir vídeos en el canal de YouTube. Al pasar algunas semanas necesitaba compartir archivos que iban acompañados de los vídeos. Lo primero que hice fue recurrir a una carpeta pública en Google Drive donde estaban los archivos necesarios para seguir los tutoriales, pero me resultaba muy poco atractivo, se me ocurrió que sería genial que exista una página web con el mismo nombre del canal, en donde uno pueda descargarse los archivos y que haya información adicional.

¿Cómo hice para crear mi página web?

Lo primero que hice fue recurrir a un amigo que es desarrollador web, me reuní con él un viernes, le conté mi idea y lo que necesitaba, pero en ese momento estaba muy ocupado y me dijo que en unas tres semanas me podía ayudar. Soy demasiado impaciente, no podía esperar tanto tiempo, necesitaba tener mi propia página web en ese mismo instante, así que resignado volví a mi casa a pensar qué hacer.

En determinado momento me dije: ¿por qué no la hago yo mismo?, así que me puse a buscar vídeos que hablaran sobre cómo hacer páginas web, encontré uno que me pareció que encajaba con lo que necesitaba y me puse manos a la obra. Ese mismo lunes, dos días después, GameDevTraum ya estaba en línea y se podían descargar los archivos para seguir los tutoriales.

¿Se necesita saber programar para hacer una página web?

No se necesita saber programar para hacer una página web ya que existen distintas formas de hacerlas. Vamos a utilizar algo que se conoce como CDN que nos permite montar una página completamente funcional en cuestión de minutos, lista para empezar a desarrollar tu negocio o emprendimiento.

La importancia de un sitio web

Inicialmente le daba mucha más importancia al canal que a la página, estuvo unos seis meses solo sirviendo como plataforma para las descargas y para mostrar los vídeos del canal. En determinado momento me propuse crear entradas con información valiosa que la gente podría preguntarse y poco a poco las personas comenzaron a llegar naturalmente a mi página ya que ésta salía en los resultados de búsqueda. En ese momento me dí cuenta de que la página web tenía una importancia vital ya que me permitía llegar a personas en todo el mundo y que conocieran lo que hago.

Planes a futuro

Al momento de redactar esta entrada, GameDevTraum está llegando al millón de visitas anuales, lo cual no solo produce ganancias por los anuncios publicitarios sino que es una puerta abierta a oportunidades de negocios. Todos mis esfuerzos están puestos en el crecimiento de la plataforma, en expandir la información disponible, el material de descarga, optimizar lo que ya existe.

El bucle es una ESTRUCTURA DE CONTROL repetitiva que nos permite repetir una secuencia de instrucciones hasta que una condición deje de ser verdadera.

En un programa de computadora las instrucciones se van ejecutando instrucción por instrucción de manera secuencial, esto es lo que se conoce como flujo de un programa. Las estructuras de control nos permiten alterar este flujo de ejecución, permitiéndonos hacer saltos, hacer que el flujo retroceda o se desplace hacia otra región.

Entonces un BUCLE en programación es una estructura de control que hace que el flujo del programa retroceda y vuelva a repetir exactamente las mismas instrucciones definidas en una región, no se trata solo de una forma elegante y compacta de escribir una serie de instrucciones, porque el hecho de que las instrucciones sean exactamente las mismas no significa que los datos que se usan en el interior del bucle también lo sean, la información puede ir transformándose y luego las instrucciones siguientes se aplicarán sobre esos nuevos datos, dando lugar a una enorme cantidad de posibilidades.



Tengo un vídeo para recomendarte sobre este tema

En el siguiente vídeo, con la ayuda de un bucle FOR se recorren todos los CHILDS de un determinado objeto y se los guarda en un ARRAY.




¿Qué es un BUCLE INFINITO en programación?

Un bucle infinito es una situación en la que el flujo del programa se encuentra confinado en una región de la que no puede escapar, repitiendo infinitamente las mismas instrucciones una y otra vez, sin llegar a una condición que le permita salir de ese bucle.

Cuando se produce un bucle infinito las aplicaciones se pueden congelar, no responden y hay que forzar su cierre. Esto ocurre generalmente porque el código que permite procesar las intereacciones del usuario, por ejemplo clics en pantalla o inputs de teclado, no se está ejecutando ya que el flujo del programa está atrapado en el bucle. En aplicaciones como juegos donde toda la lógica se procesa entre cada foto que se produce del juego, si ocurre un bucle infinito, el flujo del programa no termina de procesar la lógica y el juego no puede producir la siguiente foto.

Se pueden aplicar medidas de seguridad para evitar que se produzcan estos bucles, por ejemplo contadores que se incrementen y si exceden un valor, forzar la condición de escape del bucle.

Estructuras de control REPETITIVAS y sintaxis

A continuación vamos a ver las estructuras de control repetitivas más comunes que se encuentran en todos los lenguajes de programación.

Bucle FOR

Un bucle FOR nos permite repetir instrucciones un número fijo de veces que indicamos con una serie de condiciones sobre una variable iteradora. Se establece la variable iteradora, el valor inicial, la condición que debe cumplir la variable iteradora para ejecutar el bucle y una forma de incremento para la variable iteradora.

Algunas aplicaciones pueden ser recorrer una colección de objetos aplicando acciones a cada uno de ellos y haciendo uso de la variable iteradora de distintas formas, podemos realizar operaciones como sumatorias y productorias, encontrar valores dentro de una colección, algoritmos de ordenamiento.

Un bucle FOR no suele producir bucles infinitos, a menos que sus condiciones se planteen de forma incorrecta o se modifique la variable iteradora dentro del bucle de una forma que produzca tal situación, no es una buena práctica modificar la variable iteradora dentro de un bucle for.



Sintaxis del Bucle FOR

Sea n un valor entero como por ejemplo el tamaño de una colección, la sintaxis del bucle FOR en C# es la siguiente:

for(int i=0; i<n ; i++){
//Instrucciones a realizar dentro del bucle

//La variable i se incrementa en cada iteración
}

Bucle WHILE

Un bucle WHILE nos permite repetir instrucciones hasta que una determinada condición deje de ser verdadera, es muy útil cuando no se sabe cuántas veces habrá que repetir una tarea hasta que consigamos lo que necesitamos.

Una posible aplicación puede ser la selección de números aleatorios o de objetos sin reposición, en la que tenemos que elegir valores aleatoriamente sin repetir, en ese caso siempre existe la probabilidad de elegir un valor que antes se había elegido, de modo que puede ser necesario repetir la operación hasta dar con un valor nuevo.

En un bucle WHILE es más frecuente que se produzcan bucles infinitos ya que la condición de salida del bucle depende de lo que necesitemos en cada caso particular.

Sintaxis del bucle WHILE

Dada la variable «condicion», que es un valor booleano que puede estar dado por el valor de una variable booleana, podría ser el resultado de una operación lógica o también el resultado de la ejecución de un método de programación, la sintaxis de un bucle WHILE en C# es la siguiente

while(condicion){
//Instrucciones a realizar dentro del bucle

//»condicion» debe cambiar a false para salir
}

Bucle FOREACH

Un bucle FOREACH sirve para recorrer cada uno de los elementos de una colección, por ejemplo un array o una lista, la idea es que dentro del bucle tenemos la referencia de cada uno de los objetos pero sin la necesidad de una variable de iteración.

Como ejemplo de aplicación puede ser cualquier tarea que requiera recorrer una colección de elementos, por ejemplo dada una colección de objetos enemigo, aplicarles a cada uno de ellos un determinado daño por magia. Otro ejemplo puede ser aplicarles una cierta configuración inicial a un conjunto de elementos.

Un bucle FOREACH no suele producir bucles infinitos, a menos que haya alguna forma de incrementar la cantidad de elementos de la colección que se está recorriendo dentro del mismo bucle, eso haría que en cada iteración agregáramos un nuevo elemento para recorrer y nunca acabaríamos.



Sintaxis del bucle FOREACH

Para este ejemplo vamos a considerar una clase de programación cualquiera que llamaremos «TipoDato», vamos a usar la palabra «o» para referirnos a cada elemento dentro de la colección a recorrer y por último vamos a usar una colección de objetos que llamaremos «coleccion» y que será del mismo tipo que «TipoDato» , la sintaxis de un bucle FOREACH en C# es la siguiente:

foreach(TipoDato o in coleccion){
//Instrucciones a realizar dentro del bucle

//»o» es cada elemento de la colección
}

En el siguiente ejemplo se recorre una colección de GameObjects que representan enemigos en un juego hipotético y se procede a destruir cada uno de esos objetos.

foreach(GameObject g in enemigos){
Destroy(g);
}

En este vídeo vemos qué son las variables en programación, para qué se usan y algunos tipos de variables primitivas como los FLOAT, pero también hablamos sobre las variables tipo String.


Definición de STRING

Un STRING o cadena de caracteres es un tipo de dato que se utiliza para almacenar textos, no es una variable primitiva como el el int, el bool o el float, sino que es un conjunto de variables primitivas tipo caracter.

Sintaxis de datos tipo STRING en Unity

Unity relaja la sintaxis de los datos tipo string y hace que se puedan tratar como si fuese una variable primitiva, para definir un dato de tipo string se utiliza la palabra clave «string» seguida de un nombre, por ejemplo de la siguiente manera:

string unString;

Los datos de tipo string se especifican utilizando comillas dobles, por ejemplo:

unString = «Un texto genérico.»;

Utilizando la referencia de un string se puede acceder a su tamaño usando el operador punto y la palabra «Length«, de la siguiente manera:

unString.Length;

La ejecución de la instrucción de arriba produce como resultado un valor entero que se corresponde con el número de caracteres que contiene el string.

Aplicaciones de un dato tipo STRING en Unity

Las variables tipo string permiten almacenar textos, así que podemos usarla para almacenar nombres, descripciones, textos que aparezcan en la interfaz gráfica. Cuando se guardan datos utilizando PlayerPrefs en Unity hay que indicar strings que se utilizarán como claves para acceder a la información guardada.

Aquí tienes un artículo más detallado sobre qué son las variables en programación y los distintos tipos de variables que hay.

Definición de FLOAT

El nombre FLOAT proviene del sistema de representación numérica de «punto flotante» y hace referencia es un tipo de variable primitiva que se caracteriza por ser una variable numérica que admite parte decimal, se puede usar para representar números reales positivos y negativos dentro de un determinado rango y con determinada precisión que depnderá del tipo de variable de punto flotante que se elija. Para más información sobre variables en programación y los distintos tipos de variables consultar este artículo.

Tipos de variables PUNTO FLOTANTE y rango de representación

Existen distintos tipos de variables de punto flotante que podemos utilizar en programación, la variable mas conocida es el FLOAT en la que se utilizan 32 bits para representar el valor en coma flotante, pero existen otros tipos de variables también de punto flotante, solo que con más o menos bits para su representación. En la siguiente tabla se pueden ver algunas de estas variables.

Tipo de variableCantidad de BitsPresición Menor valor representable Máximo valor representable
float32~6 a 9 dígitos±1.5 x 10−45±3.4 x 1038
double64~15 a 17 dígitos±5.0 × 10−324±1.7 × 10308
decimal128~28 a 29 dígitos±1.0 x 10-28±7.9 x 1028
Tabla comparativa de los distintos tipos de variables punto flotante en C# con cantidad de bits y rango aproximado de representación

Sintaxis de variables PUNTO FLOTANTE en Unity

Para definir una variable tipo punto flotante se utiliza la palabra clave de la primera columna seguida del nombre que va a tener esa variable, por ejemplo de la siguiente manera:

float unFloat;
double unDouble;
decimal unDecimal;

Cuando ingresamos valores con decimales se utiliza el punto como separador y en el caso particular de las variables tipo float, cuando se le asigna un valor hay que hacerlo se suele incluir la letra «f», para explicitar que el valor que indicamos es de tipo float, por ejemplo:

unFloat = 3.51f

En el caso anterior como estamos asignando un valor decimal en una variable tipo float no habría problema en no incluir la «f», sin embargo en otras operaciones como ejecuciones de métodos pasando valores tipo float como parámetros sí puede ser de caracter obligatorio especificar que tal valor es un float.

Aplicaciones de una variable PUNTO FLOTANTE en Unity

Las variables tipo punto flotante permiten representar datos que pertencecen al conjunto numérico de los números reales, así que podemos usarla para representar números que tengan esa naturaleza, por ejemplo el peso, temperatura, volumen, altura. Además se utilizan para construir estructuras de datos mas complejos como los arrays y matrices de datos tipo float, clases de programación como como Vector2 y Vector3 o también podemos definir clases propias y utilizar floats en su estructura interna.

Vídeo tutorial sobre VARIABLES en programación

En el siguiente vídeo vemos qué son las variables en programación, para qué se usan y algunos tipos de variables primitivas como los FLOAT.

En este vídeo vemos qué son las variables en programación, para qué se usan y algunos tipos de variables primitivas como los FLOAT.

Definición de ENTERO

Un ENTERO es un tipo de variable primitiva que se caracteriza por ser una variable numérica sin parte decimal, se puede usar para representar números enteros positivos y negativos dentro de un determinado rango que dependerá del tipo de variable entera que se elija.



En el siguiente vídeo vemos qué son las variables en programación, para qué se usan y algunos tipos de variables primitivas como los INT.




Tipos de variables ENTERAS y rango de representación

Existen distintos tipos de variables enteras que podemos utilizar en Unity, la variable mas conocida es el INT en la que se utilizan 32 bits para representar el valor entero, pero existen distintos tipos de variables enteras con más o menos bits que definen su rango de representación. En la siguiente tabla se pueden ver algunas de estas variables enteras.

Tipo de variableCantidad de BitsValor mínimoValor máximo
int32-2,147,483,6482,147,483,647
short16-32,76832,767
long64-9,223,372,036,854,775,8089,223,372,036,854,775,807
byte80255
Distintos tipos de variables enteras en C# con rango de representación

Sintaxis de variables ENTERAS en Unity

Para definir una variable entera se utiliza la palabra clave de la primera columna seguida del nombre que va a tener esa variable, por ejemplo de la siguiente manera:

int unEntero;
short otroEntero;
long otroEntero2;

Aplicaciones de una variable ENTERA en Unity

Las variables enteras permiten representar datos que pertencecen al conjunto numérico de los números enteros, así que podemos usarla para representar números que tengan esa naturaleza, por ejemplo la edad, cantidad de corazones, cantidad de items, puntos, dinero que no se fraccione como por ejemplo monedas.

Salir de la versión móvil
Secured By miniOrange