Construyendo tu nivel

En este post empezaremos hablando de los distintos mecanismos de vista de que disponemos para movernos por Scene. Para todo lo que se explicará a continuación deberemos tener marcado el botón con forma de mano que tenemos en la esquina superior izquierda de la pestaña Scene.

mano

El primer modo y probablemente el que más vamos a utilizar es el que podríamos llamar «Modo de vista libre». Mientras pulsamos clic derecho sobre Scene podremos mover la vista usando el ratón. Además, nos desplazaremos usando las teclas WASD y las teclas QE para subir/bajar. Con shift aumentaremos la velocidad del desplazamiento.

Otro modo será con un objeto seleccionado pulsar la tecla F para hacer zoom hacia él y fijar nuestro punto focal (aquel hacia el que la vista converge) en dicho objeto. Cuando creamos un objeto aparecerá en el punto focal. Con la rueda del ratón variaremos el zoom. Si hacemos doble click sobre un objeto en Hierarchy tendrá el mismo resultado que pulsar F.

Podemos desplazarnos por el nivel haciendo click izquierdo y arrastrando con el ratón en la dirección contraria a la que deseamos avanzar. Si hacemos esto mismo pero manteniendo también la tecla Alt podremos girar alrededor de nuestro punto focal.

Existe la posibilidad de cambiar a modo isométrico si pulsamos en la esquina superior derecha de la pantalla de Scene sobre «Persp», lo que hará cambiar a «Iso». En esta vista la profundidad no afecta al tamaño de los objetos, por lo que la distancia no provocará que parezcan mas pequeños. Encima de donde hemos seleccionado el modo Isométrico tenemos unos ejes. Si hacemos clic en alguno de ellos colocaremos la vista de modo que solo se muestre el nivel en uno de los planos de coordenadas, de manera que dará una sensación de entorno 2D.

isometrica

Tenemos una opción que nos permitirá activar o desactivar las luces de nuestro nivel. Si seleccionamos el modo Wideframe todo pasará a ser transparente.

light onoff

Los Gizmos son unos iconos que nos indican la posición de ciertas cosas como por ejemplo puede ser la posición de una cámara o de un efecto. Son configurables en el botón Gizmos que desplegará una pestaña con varias opciones, por ejemplo variar su tamaño.

Gizmos

Para manipular los objetos tendremos tres herramientas:

  • Move tool: es el segundo botón en la esquina superior izquierda de Scene. Podemos seleccionarla de manera rápida pulsando W. Nos permite desplazar los objetos sobre sus ejes de manera independiente seleccionando y arrastrando cada uno de ellos, y también con respecto a un plano seleccionando uno de ellos y arrastrando. También podremos mover el objeto variando sus datos de posición en Inspector.

move

  • Rotate tool: es el tercer botón. Su acceso rápido es la tecla E. Nos permite rotar el objeto con respecto a sus ejes, para ello seleccionamos una de las tres circunferencias que representan esta rotación con los ejes y arrastramos. También podremos rotar el objeto variando sus datos de rotación en Inspector.

rotate

  • Scale tool: es el cuarto botón. Su acceso rápido es la tecla R. Nos permite escalar los valores de los ejes para así redimensionar el objeto, ya sea para hacerlo mayor o menor o incluso variar su forma original modificando solo parte de los ejes.

scale

Ahora explicaremos la función del botón Local/Global situado a la derecha de los botones de las herramientas explicadas previamente. Si tenemos marcada la opción Local los ejes estarán orientados según la posición del objeto seleccionado. La herramienta de escalado solo funciona con la opción Local. Si marcamos la opción Global los ejes del objeto estarán orientados según los ejes globales de la escena en la que nos encontramos.

local globlal

A continuación crearemos una luz de punto (point light). Para ello en Heirarchy iremos a Create->Light->Point Light. Esta opción creará una luz fija en un punto a la que le podremos modificar los parámetros de intensidad de la luz, su rango y el color de la misma.

point light

Existe otro tipo de luz llamada Directional Light que imita la luz solar. Esta luz vendrá desde el cielo y podremos variar el ángulo de incidencia de estos «rayos solares». Esta luz tiene un rango global, afecta a todo el nivel. Además la intensidad y color serán modificables. Con respecto a las sombras, en la versión gratuita de Unity solamente podemos seleccionar sombras en una única dirección. Estas sombras se conocen como Hard Shadows. El otro tipo de sombras (Soft Shadows) no funcionarán.

directional light

Por último, si copiamos un objeto con Ctrl+C y luego pulsamos Ctrl+D, se creará una réplica de ese objeto superpuesto en el original. Podremos entonces moverlo y así separarlos.

copy cube

Disponemos de multitud de objetos básicos que podemos crear tales como cubos, cápsulas, planos, etc.

objects

Exportando tu videojuego

En este post explicaremos todo lo relacionado con hacer correr el juego, exportarlo y que parezca realmente un verdadero juego.

Empezaremos por la parte de jugar al juego. Lo primero será entender que la pestaña Scene solo lo verá únicamente el desarrollador. Es la pestaña Game la que hará una previsualización del juego, lo que el jugador verá y jugará. Lo que veremos en Game vendrá dado por la cámara que aparece en Scene. Podremos mover esta cámara a nuestro antojo arrastrándola a la posición que queramos o introduciendo las coordenadas deseadas en Inspector. Si seleccionamos la cámara nos aparecerá una previsualización en un recuadro en la esquina inferior derecha de Scene que mostrará exactamente lo mismo que se verá en Game. Además, podremos arrancar el juego clicando el botón Play, pausarlo con el botón Pause y avanzarlo paso a paso con el botón Step. Mientras reproducimos el juego podremos realizar todos los cambios que queramos pero todos ellos serán temporales, ya que en cuanto desmarquemos el botón Play la Scene retornará al estado previo a la reproducción. No obstante, tenemos la posibilidad de anotar los datos de estos cambios observando sus valores en Inspector (por ejemplo, las coordenadas de posición) antes de parar la reproducción.

camera

A continuación crearemos una superficie para nuestro juego. Para ello bajaremos la posición de uno de los cubos. Con este cubo seleccionado haremos clic en el cuarto botón que hay arriba a la izquierda de Scene. Esta opción nos permitirá variar los valores de escala del objeto seleccionado con tan solo arrastrar sus ejes. Para crear nuestra superficie bastará con arrastrar los ejes X y Z (rojo y azul) hasta que tengamos la superficie deseada.

scale

Para realizar un pequeño test de nuestro nivel importaremos el paquete Characters de Unity (como explicamos en el pasado post). Una vez importados en Project iremos a la carpeta Standard Assets->Characters->FirstPersonCharacter->Prefabs y ahí arrastraremos FPSController a la posición que deseemos. Para que sea el controlador de primera persona nuestra visión dentro del juego eliminaremos nuestra anterior cámara para evitar conflictos. Ahora podremos correr el juego y mediante los controles básicos WASD y el ratón desplazarnos por nuestro nivel. Sería recomendable crear nuestros propios controladores de personaje (se explicará en futuros posts).

FPS

Ahora procederemos a exportar nuestro juego para así convertir nuestro proyecto en un videojuego jugable que podamos compartir. Para ello iremos a File->Build Settings y nos abrirá una ventana con varias opciones. En esta ventana deberemos seleccionar la plataforma para la cual exportaremos nuestro videojuego. De estas plataformas las únicas que siempre han sido gratuitas han sido Web Player y PC/MAX/LINUX, para algunas hará falta comprar ciertas licencias de uso. En nuestro caso seleccionaremos PC/MAC/LINUX. En Plataform seleccionaremos Windows por compatibilidad (o MAC si trabajamos desde uno) y en Architecture pondremos x86 ya que funcionará en sistemas tanto de 32 bits como de 64 bits. Lo siguiente será seleccionar las escenas de nuestro juego que deseamos añadir. Para ello podremos darle a Add Current para añadir la escena actual en la que estamos o arrastrar las escenas que queramos desde Project hasta el recuadro Scenes in Built. Para finalizar le daremos al botón Build en la esquina inferior derecha.

export

Al darle al botón Build tendremos que darle un nombre y seleccionar el directorio donde guardaremos el juego. Al darle a Guardar creará en ese directorio un archivo .exe con el nombre dado y una carpeta data. Para iniciar el juego solo tendremos que ejecutar el archivo .exe. Al ejecutarlo se nos abrirá una ventana donde podremos seleccionar las opciones gráficas y los controles. Una vez elegidas esas opciones le daremos al botón Play! y se ejecutará nuestro juego tal cual era en la previsualización que hacíamos en Unity del mismo.

play

Proyecto de videojuego

Este post tratará de explicar cómo introducir diversos tipos de cosas (texturas, modelos 3D, imágenes, materiales…) en nuestro proyecto.

Podemos importar cualquier tipo de archivo de imagen. En nuestro ejemplo utilizaremos la imagen de un koala dentro de las imágenes de muestra presentes en Windows. Para ello dentro de la pestaña Project haremos click derecho en la carpeta dentro de la cual deseemos importar la imagen y le daremos a a Import New Asset. Nos saldrá el explorador de carpetas y dentro de él buscaremos la imagen que deseemos importar a nuestro proyecto como textura.

import_asset

Ahora crearemos un cubo. Para ello en la pestaña Hierarchy le daremos a Create->3D Object->Cube, o bien en GameObject->3D Object->Cube.

cube1

cube2

Si deseamos añadir a este cubo la textura del koala previamente importada tendremos dos posibilidades. La primera opción será simplemente arrastrar la textura que tenemos en Project directamente encima del cubo. Esto creará una carpeta llamada Materials donde se almacenará un archivo tipo material como resultado de esto.

texture_koala1

Veamos la segunda opción. Crearemos un material nuevo llamado Koala2 haciendo click derecho en la carpeta Assets y seleccionando Create->Material.

texture_koala2a

En la pestaña Inspector veremos la información relacionada con el material. En la opción de shader seleccionaremos Legacy Shaders->Diffuse. A continuación arrastraremos la textura Koala al recuadro gris que aparece en Inspector con las  palabras «None (Texture)». Para diferenciar este material del otro, le cambiaremos el color a rojo en Main Color.

diffuse

texture_koala2b

Ahora crearemos otro cubo, al que podemos renombrar desde Inspector si lo deseamos (Red Cube en mi caso), y arrastraremos el nuevo material Koala2 al nuevo cubo en Scene, Hierarchy o a Add Component en Inspector con el cubo en cuestión seleccionado.

redcube

Si deseamos sobrescribir la Scene actual sobre la que teníamos anteriormente guardada lo haremos en File->Save Scene o con el acceso rápido de teclado Ctrl+S. Si deseamos guardar la Scene actual como una nueva Scene independiente elegiremos la opción Save Scene as… Mi Scene actual se llama Test1, de modo que guardaré los cambios que he realizado con el nombre Test2. Esto creará una nueva Scene (sobre la que estamos trabajando) dentro de la pestaña Project junto a la anterior Test1.

scenes

Puesto que ya disponemos de varios archivos de distinto tipo en Project, procederemos a organizarlos por carpetas. Por ejemplo, una carpeta para Materials, otra para Textures y otra para Scenes. Para ello crearemos en Assets cada una de las carpetas con Create->Folder y nombraremos cada una como corresponda. A continuación introduciremos cada cosa en su carpeta correspondiente arrastrándolas a ellas. Si seleccionamos varias de estas carpetas se nos mostrarán los archivos de ambas.

folder

Tenemos la opción de arrastrar cualquier archivo que sirva en nuestro proyecto directamente desde el buscador de archivos hacia la pestaña Project. En este caso importaré de este modo otra imagen de muestra. También cabe destacar que en Inspector tenemos la posibilidad de cambiar el tamaño de las texturas importadas para así reducir la memoria que ocupan.

size

Por último hablaremos de otra posibilidad que existe para importar archivos a Unity. Se trata de los Unity Packages (paquete de Unity) que consisten en conjuntos de archivos comprimidos en un paquete hechos para Unity. Hay dos tipos: Standard y Custome. En la carpeta en la que deseemos importar estos paquetes haremos click derecho y seleccionamos Import Package->»paquete que deseemos importar». Seleccionaremos, por ejemplo, Effects. A continuación se descomprimirá este paquete y nos mostrará en una ventana todo lo que está contenido en él. Ahí elegiremos que queremos importar y lo marcamos. A continuación le daremos a Import y ya importará todo lo que hayamos seleccionado del paquete dentro de una carpeta que creará llamada Standard Assets. Ya estarán disponibles para el uso en nuestro proyecto.

package

Existe un Asset Store de Unity en donde encontraremos Unity Packages tanto gratuitos como de pago. Y además también podremos importar Unity Packages personalizados ya sean nuestros o de alguna persona que los haya compartido seleccionando la opción Custom en Import Package y continuación seleccionando el paquete en cuestión que tendremos que buscar con el explorador de carpetas.

Si lo que queremos es organizar por tipo los assets en Project utilizaremos la función Search by type de manera que se nos mostrarán todos los assets del tipo indicado dentro de nuestro proyecto.

organize

Otro mecanismo para encontrar lo que queremos es mediante la barra de búsqueda de Project en donde escribiremos aquello que buscamos y el resultado nos mostrará todas las coincidencias, sean del tipo de archivo que sean, con la palabra introducida.

search

Una barra de búsqueda similar existe en Heirarchy que nos permite localizar un objeto u objetos concretos en la Scene.

Interfaz de Unity3D

En este post explicaremos como crear o abrir proyectos en Unity 3D, así como explicar brevemente la interfaz del mismo. Mencionar que debemos crear previamente una cuenta en la página de Unity para poder utilizar la aplicación.

Para crear un proyecto nuevo en Unity3D deberemos hacer click en New Project en el launcher que aparece al abrir el programa.

newproject1

Si ya nos encontramos dentro del programa deberemos ir a File->New Project.

newproject2

En ambos casos nos saldrá una ventana en la que tendremos que poner un nombre a nuestro proyecto y seleccionar una carpeta donde almacenarlo. A diferencia de otras aplicaciones que generan un archivo con extension del tipo .doc o .jpeg, por ejemplo, en Unity se creará una carpeta que contendrá todos los archivos que forman dicho proyecto. Además tendremos que elegir si deseamos orientar el videojuego a un entorno 2D o 3D (en nuestro caso marcaremos 3D) y podremos importar paquetes de assets ya incluidos en Unity (contenido ya elaborado) como pueden ser personajes, luces, explosiones y demás (por el momento no marcaremos ninguno); estas opciones pueden modificarse más adelante. Una vez finalizado esto le daremos a Create project.

name+folder

Una vez hayamos creado el proyecto nos aparecerá lo siguiente.

blankproject

Si queremos abrir otro proyecto desde el launcher podremos abrir el proyecto desde la lista que nos aparece de proyectos más recientes o bien darle a Open Other y seleccionar la carpeta del proyecto que deseemos abrir.

openproject1

O bien desde el programa vamos a File->Open Project.

openproject2

En la interfaz de Unity podremos observar que aparecen distintas pestañas. Estas pestañas podrán ser organizadas como nosotros queramos. Podemos arrastrarlas a la posición que más nos convenga según nuestras preferencias, redimensionar su tamaño, agruparlas o convertirlas en ventanas independientes al programa.

tabs

Ahora explicaré brevemente en que consiste cada una de esas pestañas:

  • Scene: visualiza el entorno y sirve para la edición de niveles.
  • Game: previsualización del juego.
  • Hierarchy: lista de todos los objetos que hay en la Scene. Dispone de un motor de búsqueda para localizarlos fácilmente.
  • Inspector: muestra la información de todos los objetos de hierarchy que seleccionamos y nos permite modificar dicha información.
  • Project: archivos del videojuego. Pueden ser vistos y modificados con Inspector.
  • Console: muestra avisos de errores, permite leer el código y scripts, muestra cómo se comportará el juego, etc.

Existen otros tipos de ventanas que trataremos en el futuro.

Por último, existe una funcionalidad para poner en pantalla completa una pestaña. Para ello tendremos que hacer click derecho sobre el nombre de la pestaña y pulsar en Maximize. Podemos emplear para esto mismo un acceso directo de teclado que por defecto sera espacio+shift. Para ello debemos primero tener el puntero del ratón sobre la pestaña que deseemos poner en pantalla completa. Este acceso directo es modificable en Edit->Preference->Keys->Window/Maximize View.

maximize

Introducción a Unity3D

En este primer post conoceremos el software que utilizaremos para el desarrollo de videojuegos 3D.

Empezaremos por mostrar el motor que usaremos. Se trata de Unity 3D, una plataforma  de desarrollo flexible y poderosa para crear juegos y experiencias interactivas 3D y 2D multiplataforma. Es gratuito y está disponible para Windows y MAC. Podéis descargarlo de la página oficial http://unity3d.com/ . Para escribir el código de programación usaremos MonoDevelop, que viene ya integrado con Unity.

En la creación de modelos 3D emplearemos Blender. Podéis encontrarlo en http://www.blender.org/ y es también gratuito y multiplataforma (Windows, Linux, MAC).

Para las texturas y colores que necesitamos para nuestros modelos 3D usaremos Gimp, un programa de edición de imágenes similar a Photoshop. Gimp está disponible para Windows, Linux y MAC y es también gratuito http://www.gimp.org/ .

A la hora de editar y grabaer el audio utilizaremos Audacity, un editor y grabador de audio digital gratuito http://sourceforge.net/projects/audacity/ .

Para crear la Inteligencia Artificial (AI) de los personajes de nuestros videojuegos utilizaremos Rain, un motor de Inteligencia Artificial creado por Rival Theory. Lo podéis encontrar en http://rivaltheory.com/rain/ .

Por último, cabe destacar la importancia de tener claro como funcionan los ejes de coordenadas XYZ a la hora de trabajar en un entorno tridimensional.

Planos

En la imagen podemos observar como el punto (3,2,2) corresponde a las coordenadas x=3, y=2, z=2. Cada uno de los ejes constará de valores tanto positivos como negativos.

coordenadas Unity

En la captura tomada en Unity que observamos arriba podemos ver, dentro del recuadro rojo, los datos de la posición en el espacio que tiene el bloque amarillo en el que están marcados los ejes de coordenadas. Podemos variar dicha posición cambiando los datos numéricos de cada uno de los valores de los ejes, de manera que si solo variamos los valores de un único eje el objeto se desplazará únicamente en dicho eje. También podemos rotar el objeto con respecto cada uno de los ejes. Además, tenemos la posibilidad de reescalar los valores del objeto en cada eje de manera independiente.