Información actualizada sobre esta entrada
Este artículo pertenece a una serie que consiste en hacer un juego simple en primera persona acerca de encontrar objetos dentro de un laberinto. Es una de mis primeras series de cuando empecé el canal, ahora he mejorado mucho este proyecto y puedes descargar el código fuente para importarlo en tu propio proyecto de Unity. Algún día vamos a hacer un remake de esta serie, suscríbete a mi canal para estar al tanto del nuevo contenido sobre Blender, Unity y programación.
Sígueme en itch.io y descarga el código fuente de este proyecto
PUEDES TESTEAR ESTE JUEGO AQUÍ. TAL VEZ TARDE UN POCO EN CARGAR
🔻
MOVEMENT: WASD CAMERA LOOK: MOUSE
Introducción al artículo original
Este es el comienzo de la serie del Laberinto, en la que crearemos un prototipo simple de juego en primera persona en el que el escenario será un laberinto, mientras vamos viendo todas las herramientas con las que cuenta Unity para crear juegos.
Esta serie es ideal para aquellos que no tienen experiencia con Unity ya que se muestra de todo un poco y sin entrar en detalles, el propósito es mas bien observar todo el proceso de desarrollo para tener una idea general.
Página principal del proyecto
Vídeo relacionado a este artículo
Creación del proyecto
Al ejecutar Unity o Unity HUB, nos aparece una ventana en la que podemos crear nuevos proyectos, abrirlos y acceder a los tutoriales.
Vamos a crear un nuevo proyecto 3D, le damos un nombre y elegimos una ubicación en el disco. Todo lo demás es opcional. Cuando todo esté listo creamos el proyecto
Le damos un nombre y seleccionamos el template 3D.
Lo primero que vamos a hacer es crear una nueva escena. En esta versión de Unity, por defecto se nos crea la escena “SampleScene.unity”, como se observa en la cabecera del programa en la figura 2.
Para crear una nueva escena hacemos clic en File > Save Scene As…
Le damos un nombre y la guardamos. Al hacerlo se observa en la cabecera el nombre de la nueva escena.
Cada escena tiene su propio diseño independiente de las demás. Por ejemplo podemos usar una escena para el menú principal y otra para el juego.
Todo va a depender de cómo queramos estructurar el juego.
Creación de carpetas
Es importante establecer un sistema de organización para los archivos de nuestro juego en Unity desde el comienzo, porque a medida que avanzamos vamos creando más Scripts, importando más archivos y las cosas se desordenan fácilmente.
Todos los archivos del proyecto se encuentran en la ventana “Project”, dentro de una carpeta que se llama “Assets”. Esta carpeta se puede encontrar en el directorio que definimos para el proyecto.
Como se observa en la figura 4, al hacer clic derecho se despliega un menú con distintas opciones, vamos a la opción “Create” y elegimos “Folder”.
Creamos tantas carpetas como sea necesario para organizarnos, esta parte es personal,
Importar paquetes
Para empezar a hacer un juego en Unity no es necesario crear todo desde cero, podemos valernos de las librerías existentes para comenzar a trabajar en una idea. A continuación vamos a importar Unity Packages (paquetes de Unity) de la librería Standard Assets y de la Asset Store.
Standard Assets – Unity
En la versión de Unity que tenía al momento de grabar el video, se podía importar los paquetes de Standard Assets, una librería que ofrece Unity que cuenta con distintos prefabricados, efectos y scripts que resultan útiles al empezar.
Haciendo clic derecho en la carpeta tenemos la opción “Import Package” donde podemos elegir un paquete que tengamos descargado usando la opción “Custom Package” o podemos elegir algún paquete de Standard Assets.
Si no les aparecen todos los paquetes como se ve en la figura 5, tienen la opción de descargarlos de Asset Store, pero deben tener una cuenta en Unity para poder hacerlo. Más adelante hablamos de eso.
En este caso voy a importar de Standard Assets los paquetes “Characters”, “ParticleSystems” y “Utility”.
Con el paquete “Characters” podremos colocar en el escenario un prefabricado que tiene implementado un control en primera persona.
ParticleSystems trae algunos efectos interesantes para utilizar, como fuego y humo.
Utility trae algunos scripts útiles como un contador de frames por segundo (fps).
Asset Store – Unity
La tienda virtual de Unity contiene una infinidad de Assets, algunos de pago y otros gratuitos.
Para acceder a la tienda utilizamos la pestaña Asset Store de Unity, si no se encuentra abierta, vamos a Windows > Asset Store o usamos el acceso directo Ctrl+9. Como se observa en la figura 6.
Para utilizar la tienda debemos iniciar sesión en nuestra cuenta (podemos hacerlo desde Unity). Luego utilizando la pantalla de inicio o la barra de búsqueda podemos explorar el contenido.
Con el propósito de ver cómo se usa Asset Store vamos a descargar dos paquetes. El primero se llama “SkyBox” y el segundo “FastMobileBloom”, usamos la barra de búsqueda para encontrarlos, en las figuras 7 y 8 se observan las miniaturas de los paquetes.
Para agregarlos a nuestro proyecto entramos en el paquete y ponemos “Descargar”, al finalizar la descarga nos aparece la opción “Importar”.
Jerarquía del proyecto
Dentro de cada escena estarán definidos todos los elementos del juego, es decir un escenario, objetos que forman parte del mundo, objetos invisibles que sirven para la lógica del juego, interfaz gráfica, etc. Todos estos elementos son conocidos como GameObjects y estarán listados en la jerarquía de nuestro proyecto.
Como se observa en la figura 10, al crear una nueva escena, tenemos dos GameObjects que vienen por defecto. Una cámara y una luz direccional.
Vamos a eliminar la cámara y empezar a agregar objetos al escenario.
Haciendo clic derecho en la jerarquía tenemos la opción de agregar distintos GameObjects, por ejemplo objetos vacíos, primitivas, luces, etc.
Voy a armar un escenario simple con un plano para el suelo y algunos cubos y cilindros.
A medida que vamos agregando más objetos al escenario la jerarquía va creciendo. También es recomendable tener una buena organización desde el principio, colocando nombres apropiados y usando Empty GameObjects para agrupar los objetos.
Observen las figuras 14 y 15. En la primera se ve que ambos cilindros están contenidos por el cubo, ya que están ligeramente más a la derecha y el cubo tiene una flecha para desplegar y colapsar el contenido. En la figura 15 en cambio se observa que están al mismo nivel por así decirlo.
Esto representa la relación de parentesco que existe entre los GameObjects. En la figura 14 se dice que el cubo es el GameObject padre y ambos cilindros son hijos. Esto implica que los cilindros van a estar afectados por ciertos cambios que se apliquen al padre. Por ejemplo si desactivamos el cubo, ambos cilindros también se desactivarán.
Lo mismo ocurre con la componente transformación por ejemplo. La posición de los cilindros se mide respecto de su padre, por lo tanto si movemos al padre, los cilindros se mueven en conjunto.
Materiales
Para aplicar colores y texturas sobre los objetos del mundo se utilizan los materiales. Vamos a crear algunos para ver cómo funcionan. Clic derecho en alguna carpeta del proyecto luego Create > Material, como se observa en la figura 16.
El material se visualiza como una esfera en donde están aplicadas las propiedades del material debemos asignarle un nombre, como siempre mantener el orden desde el primer momento nos beneficia a largo plazo.
Los materiales tienen varios parámetros que lo definen, en nuestro caso simplemente vamos a modificar el color haciendo clic en el recuadro a la derecha de “Albedo”. Al hacerlo aparece una paleta de colores donde podemos elegir el color o escribir su código hexadecimal.
Para aplicar un material simplemente lo arrastramos sobre el objeto deseado.
Iluminación
Vamos a seleccionar la luz direccional desde la jerarquía o en la ventana escena.
Por luz direccional se entiende una fuente de luz como el sol, es decir situada en el infinito y que envía todos sus rayos paralelos. Por esta razón mover la fuente o hacerla más grande no afecta a la iluminación de la escena, pero cambiar la rotación si lo hace. Lo vemos en la dirección de las sombras.
Crear una escalera con primitivas
Vamos a hacer este pequeño ejercicio para ver los elementos de la barra de herramientas que tiene Unity, en particular las herramientas que nos permitirán modificar la componente Transform de los GameObjects. Comenzamos creando un cubo en la jerarquía.
Las herramientas mover, rotar y escalar se observan en la figura 22 en las posiciones 2, 3 y 4 respectivamente y se acceden rápidamente usando las teclas “W”, “E” y “R” (respectivamente).
Si apretamos la tecla R teniendo seleccionado el cubo, podremos escalarlo utilizando el “Gizmo” de los tres ejes, como se observa en la figura 23.
Lo escalamos en dos direcciones para darle la apariencia de un escalón.
Le aplicamos un material y con la tecla W podemos ubicar el escalón en el escenario.
Podemos duplicar fácilmente el objeto utilizando el acceso directo CTRL+D y con la tecla W elevarlo un poco y desplazarlo hacia atrás.
Podemos repetir este proceso con varios escalones seleccionados.
Vamos a crear un Empty GameObject y llamarlo “Escenario”.
Luego seleccionamos todos los objetos y los arrastrámos hacia este nuevo objeto para agruparlos. De esta forma podemos colapsar todo el contenido y la jerarquía se ve más ordenada, como se observa en la figura 30.
Controlador de primera persona
La razón por la que previamente eliminamos la cámara es porque vamos a colocar en la escena el prefabricado “FPSController” de Standard Assets y este ya trae una cámara incorporada. Este prefab se encuentra en el directorio Standard Assets > Characters > FirstPersonCharacter > Prefabs.
Lo llevamos a la escena y lo acomodamos donde nos guste.
Bugs
Ya estamos en condiciones de hacer algunas pruebas, en la parte superior al centro tenemos tres botones.
El botón Play se utiliza para empezar a correr el juego. El segundo botón pausa el juego pero no lo finaliza. El tercer botón sirve para avanzar un sólo frame en el juego.
Al pulsar el botón Play aparece un cartel de error que dice que todos los errores deben arregllarse antes de poder entrar en el modo juego.
Este es un problema con el que nos vamos a encontrar muy seguido, especialmente al principio y suele ser muy frustrante, más aún si estamos aprendiendo a programar.
Para obtener información sobre lo que está pasando tenemos la ventana “Console”. Si no se encuentra abierta, la encontramos en el menú “Window”.
En la figura 34 observamos una gran cantidad de advertencias pero esto no afecta el funcionamiento del juego, son sugerencias para optimizar el código, advertencias por uso de código obsoleto y demás. Si sólo tuviésemos advertencias podríamos entrar en el modo juego sin problema.
La figura 35 es una captura luego de hacer clic en el botón “Clear”, esto limpia las advertencias y deja ver los errores que no se pueden pasar por alto para poder entrar en el modo juego. Estos se muestran con un cartel Rojo.
No hay mucha información sobre el error pero nos basta para entender que hay un archivo que no se encuentra. Si observamos la dirección vemos que está relacionada al paquete Standard Assets y vemos que su dirección comienza con “Assets > Standard Assets > …”. En el video hicimos una carpeta llamada “Paquetes Externos” y dentro de ella colocamos el paquete Standard Assets.
Todo parece indicar que hay algún proceso que está buscando archivos de Standard Assets pero dentro de la carpeta Assets, no la carpeta Paquetes Externos, así que muevo la carpeta Standard Assets a la carpeta Assets y el error se soluciona. Ahora si estamos en condiciones de entrar en el modo juego.
Prueba del juego en Unity
El prefab FPS Controller funciona como un juego estándar en primera persona. Avance, retroceso, desplazamientos laterales con las teclas WASD o las flechas. Salto con barra espaciadora, con Shift se puede correr. Con el mouse se controla la vista y tiene sonido de pasos. Es un buen punto de partida para empezar a formar una idea.
Compilación
Ahora vamos a generar una versión standalone del proyecto, es decir un conjunto de carpetas y archivo ejecutable que puede funcionar en nuestro sistema operativo sin necesidad de tener el motor Unity abierto.
Vamos a la pestaña File y hacemos clic en Build Settings, para configurar los parámetros de compilación.
Nos sale la ventana que se ilustra en la figura 39, allí podemos seleccionar la plataforma objetivo.
Si observan en la parte superior es donde están listadas las escenas del juego. En ese momento no tenemos ninguna escena agregada a la compilación.
Haciendo clic en el botón Add Open Scenes vamos a agregar la escena en la que estuvimos trabajando en todo el video. Como se observa en la figura 40.
Ahora solo resta hacer clic en Build And Run y elegir la carpeta donde colocar los archivos generados. Al finalizar el proceso de compilación el juego se ejecuta y nos aparece una ventana en la que podemos seleccionar la resolución y calidad. Le damos al botón Play! y el juego comienza.
Conclusión
En esta primera entrada vimos los primeros pasos al comenzar un juego en unity. Hicimos bastante énfasis en la organización, que nos beneficiará a largo plazo en el desarrollo.
Vimos las escenas de Unity, cada escena es un mundo aparte y contiene una determinada cantidad de elementos o GameObjects que se encuentran listados en la jerarquía del proyecto.
Importamos archivos tanto de la librería Standard Assets como de la tienda Asset Store. Al principio lo más importante es tratar de darle forma a las ideas que tenemos, para esto los assets de las librerías nos facilitan las cosas.
Vimos algo sobre la relación de parentesco que existe entre los GameObjects y cómo los cambios que se aplican sobre un objeto padre también impactan en sus objetos hijo.
Creamos materiales que sirven para dar color y textura a los objetos.
La fuente de luz direccional nos sirve para iluminar una escena como lo haría el sol, las sombras se proyectarán en función de la rotación que tenga esta fuente de luz.
Hicimos una escalera simple utilizando las primitivas que se pueden crear con Unity y aplicándoles transformaciones, es decir cambios de escala, rotación y posición.
Colocamos el prefabricado de Standard Assets “FPSController” que es un control en primera persona. Rápidamente ya tenemos un personaje que puede recorrer el escenario, correr y saltar.
En el proceso hubo errores que debimos solucionar para poder entrar en el modo juego. La depuración de errores es una tarea difícil cuando empezamos a programar, pero con la práctica se van cometiendo menos errores y resulta más fácil corregirlos.
Finalmente hicimos una compilación ejecutable desde el sistema operativo. Existe una gran cantidad de plataformas a las que podemos exportar nuestro juego en Unity. En principio vamos a exportar a Windows y Android.