Zombie Day: Cómo Creamos un Videojuego 3D de Zombies en Unity
En este artículo te mostraremos cómo desarrollamos un videojuego 3D de zombies en Unity, explicando de manera sencilla el proceso de diseño, programación y creación de escenarios para construir una experiencia divertida y llena de acción.
Creación de Escenarios y Escenas en Unity
El desarrollo del videojuego 3D comenzó con la configuración inicial del proyecto en Unity. Al crear un nuevo proyecto en modo 3D, el motor ya incluye un entorno predeterminado con cámara, iluminación y espacio de trabajo listo para comenzar a diseñar escenarios. Además, Unity permite combinar elementos en 2D y 3D dentro del mismo proyecto, lo que facilitó la creación de interfaces visuales para el menú principal del juego.
Como primer paso, creamos una escena llamada MenuInicial. Para hacerlo usamos Ctrl + N y luego la guardamos con Ctrl + S asignándole ese nombre.

Después agregamos un Canvas usando Click derecho en Hierarchy → UI → Canvas, ya que este elemento permite crear interfaces gráficas. Dentro del Canvas agregamos un Panel desde Click derecho sobre Canvas → UI → Panel para organizar los elementos visuales del menú.

Luego agregamos una imagen usando Click derecho sobre Canvas → UI → Image y la renombramos como MenuPrincipal presionando F2. En esta imagen colocamos el fondo principal del menú para darle una apariencia más atractiva y relacionada con la temática zombie del videojuego 3D.

Antes de usar las imágenes, creamos una carpeta llamada Images dentro de Assets usando Click derecho en Assets → Create → Folder. Allí guardamos todas las imágenes utilizadas en el proyecto, permitiendo mantener mejor organizados los recursos gráficos del juego.

Creación de Botones e Interfaz para el Videojuego 3D en Unity
Para continuar con el desarrollo del videojuego 3D, agregamos los botones principales del menú. Dentro del panel MenuPrincipal añadimos un botón usando Click derecho sobre el Panel → UI → Button. Este botón sería utilizado para iniciar el juego.

Después duplicamos el botón presionando Ctrl + D y configuramos ambos botones con los nombres Jugar y Salir. También cambiamos el texto interno de cada uno para que mostraran correctamente sus funciones dentro del menú principal.

Luego seleccionamos el Canvas y agregamos un Script usando Inspector → Add Component → New Script. Nombramos el script como MenuInical y presionamos Create and Add. Después abrimos el script en Visual Studio haciendo doble clic sobre él y configuramos las funciones Jugar() y Salir() para controlar las acciones de los botones dentro del videojuego 3D.

Finalmente configuramos cada botón desde el Inspector. Seleccionamos el botón Jugar y en la opción On Click() presionamos el símbolo +, arrastramos el Canvas y seleccionamos la función MenuPersonaje → Jugar(). Repetimos el mismo proceso con el botón Salir, asignando la función Salir() para cerrar el juego correctamente.

Creación de la Escena de Selección de Personajes
Creamos una nueva escena para la selección de personajes usando Ctrl + N y la guardamos con Ctrl + S con el nombre SeleccionPersonaje. Después configuramos el menú de la misma forma que en la escena anterior, agregando un Canvas, un Panel y botones desde Click derecho en Hierarchy → UI para crear la interfaz del videojuego 3D.

Luego importamos el paquete com.unity.cloud.gltfast desde el Package Manager usando Window → Package Manager. Este paquete permite importar modelos en formato GLB directamente en Unity sin necesidad de convertirlos a FBX. Gracias a esto fue posible descargar personajes desde Avaturn ya texturizados y listos para usar. Sin embargo, para el personaje jugable del juego sí fue necesario utilizar el modelo en formato FBX.

Después agregamos ambos personajes a la escena y los organizamos dentro de un objeto vacío usando Click derecho en Hierarchy → Create Empty.

Allí configuramos un script para que, al seleccionar un personaje, el otro se desactivara automáticamente. Esto permitió cambiar entre personajes de forma sencilla dentro del menú de selección.

Finalmente seleccionamos los objetos desde el Inspector, configuramos las referencias necesarias y probamos la interfaz usando el botón Play de Unity. Con esto verificamos que los botones y la selección de personajes funcionaran correctamente dentro del videojuego 3D.

Videojuego 3D: Nivel 1 y Creación del Escenario con Starter Assets y Terrain Tools
Para crear el escenario principal del videojuego 3D, instalamos el paquete Terrain Tools desde Window → Package Manager. Este asset facilita la creación de montañas, caminos y diferentes tipos de terreno sin necesidad de modelar todo manualmente.

Después agregamos un terreno usando Click derecho en Hierarchy → 3D Object → Terrain. Al seleccionar el Terrain, en el Inspector aparecen múltiples herramientas para modificar el escenario, como pinceles, texturas y opciones de elevación que ayudan a construir mapas de forma más rápida.

Usando la herramienta de pincel del Terrain, configuramos una zona montañosa para la primera escena del juego. Con las opciones de elevar y suavizar terreno fuimos dando forma al mapa para crear un ambiente más realista y adecuado para la temática zombie del videojuego 3D.

Finalmente agregamos texturas al terreno utilizando los prefabs y materiales incluidos en los assets. Para hacerlo usamos la opción Paint Texture → Edit Terrain Layers → Create Layer dentro del Inspector. Allí seleccionamos las texturas de pasto y tierra para mejorar la apariencia visual del escenario.

Videojuego 3D: Cómo Agregar Personaje FBX y Configurar el Jugador
Importamos el personaje principal desde Avaturn en formato FBX arrastrando el archivo hacia la carpeta Assets de Unity. Después instalamos los Starter Assets y agregamos el prefab Third Person Controller usando Drag and Drop hacia la escena. Este prefab ya incluye movimiento, salto, gravedad y control de cámara para el videojuego 3D.

Luego seleccionamos el personaje y configuramos el componente Animator desde el Inspector para asignar el avatar humanoide correctamente. También verificamos componentes como Character Controller y Player Input, permitiendo mover el personaje con teclas como WASD, Shift y Space para correr y saltar dentro de la escena.

Para configurar correctamente el personaje, ajustamos el modelo FBX al mismo tamaño del robot incluido en los Starter Assets de Unity. Después integramos el personaje en el NestedParentArmature utilizando la misma estructura y componentes del controlador original. Finalmente ocultamos el modelo del robot desde la sección Geometry en el Hierarchy para evitar errores visuales o conflictos de animación, logrando que el personaje pudiera moverse, caminar, correr y saltar sin problemas dentro de la escena.

Videojuego 3D: Creación de Enemigos con Inteligencia Artificial
Para crear los enemigos del videojuego 3D, descargamos un modelo de zombie animado desde Mixamo y lo importamos a Unity como un prefab reutilizable. Después configuramos sus animaciones de caminar, atacar y morir usando el componente Animator, permitiendo que el enemigo reaccionara de forma diferente según lo que ocurre dentro del juego. Esto hizo que los zombies tuvieran movimientos más realistas y una apariencia mucho más dinámica durante la partida.

La inteligencia artificial de los enemigos fue desarrollada mediante scripting en C# usando una máquina de estados o FSM (Finite State Machine). Este sistema permite que el zombie cambie automáticamente de comportamiento dependiendo de la distancia con el jugador.

Por ejemplo, cuando el jugador está lejos, el zombie permanece en estado Idle; si el jugador se acerca, cambia al estado Seguir; cuando está a corta distancia activa el estado Atacar; y finalmente, al perder toda la vida, cambia al estado Muerto. Todo este comportamiento fue organizado utilizando una clase base llamada Enemigo, mientras que el script EnemigoZombie controla las acciones específicas del zombie dentro del videojuego 3D.

Para lograr que los enemigos se movieran de forma automática por el escenario utilizamos el componente NavMeshAgent. Primero configuramos el terreno agregando el componente NavMeshSurface y después generamos el mapa de navegación usando la opción Bake dentro del Inspector. Gracias a esto, los zombies pueden detectar rutas válidas, perseguir al jugador y evitar obstáculos sin necesidad de programar cada movimiento manualmente. Este sistema permitió crear enemigos mucho más inteligentes y mejorar la experiencia de juego de manera considerable.

Sistema de Daño al Personaje Principal para el Videojuego 3D
Para configurar el enemigo dentro del videojuego 3D, utilizamos un prefab que incluye componentes como Animator, Capsule Collider, NavMeshAgent. El componente Animator fue configurado con animaciones de caminar, atacar y morir, utilizando parámetros como velocidad, atacando y vivo para controlar el comportamiento del zombie en tiempo real.

Después configuramos el objetivo del enemigo agregando como Target al personaje principal. Esto permitió que el zombie pudiera seguir automáticamente al jugador dentro del escenario. Gracias al componente NavMeshAgent, el enemigo detecta rutas válidas sobre el terreno y se mueve de forma automática mientras persigue al personaje principal del videojuego 3D.

También implementamos un sistema de vida utilizando un script llamado Vida, encargado de recibir daño y controlar la muerte del jugador. El enemigo detecta automáticamente al personaje usando el tag Player y aplica daño mediante eventos sincronizados con la animación de ataque. Finalmente, el sistema fue probado junto con colliders y el terreno navegable para garantizar movimientos fluidos, persecución automática y combates más dinámicos dentro de la escena 3D.
Creación de la Barra de Vida para el Videojuego 3D
Para agregar la barra de vida del videojuego 3D, creamos un Canvas usando Click derecho en Hierarchy → UI → Canvas. Después agregamos una imagen desde Click derecho sobre Canvas → UI → Image y la renombramos como Background presionando F2. Esta imagen funcionó como el fondo de la barra de vida del jugador.

Dentro de Background agregamos otra imagen usando Click derecho sobre Background → UI → Image. Luego la posicionamos dentro del fondo y cambiamos su color desde el Inspector para representar visualmente la vida actual del personaje principal.

Después seleccionamos la imagen de vida y en el Inspector cambiamos la opción Image Type a Filled y el método a Horizontal. Esto permitió que la barra pudiera llenarse y vaciarse automáticamente dependiendo de la cantidad de vida restante del jugador dentro del videojuego 3D.


Finalmente actualizamos el script de vida para conectar la barra con la vida actual del personaje. Luego agregamos el script Vida al jugador usando Add Component → Vida y arrastramos la barra de vida desde el Hierarchy hacia el objeto del script en el Inspector para enlazar ambos elementos correctamente.

Agregar Segundo Personaje
Para añadir un segundo personaje al videojuego 3D, importamos el modelo en formato FBX hacia la carpeta Assets de Unity. Después duplicamos el objeto NestedParentArmature presionando Ctrl + D y lo renombramos como NestedParentArmature_Tania usando F2. Esto permitió mantener toda la configuración de los Starter Assets, incluyendo movimiento, cámara y animaciones del personaje principal.

Luego seleccionamos NestedParentArmature_Tania en el Hierarchy y desmarcamos el checkbox del objeto desde el Inspector para dejar el personaje desactivado por defecto al iniciar el juego. De esta forma, solo el personaje seleccionado aparecería activo dentro de la escena.
Después creamos un script llamado GestorPersonaje.cs dentro de Assets/Scripts usando Click derecho en Assets → Create → C# Script. Luego agregamos un objeto vacío con Click derecho en Hierarchy → Create Empty, lo nombramos GestorPersonaje y arrastramos el script al objeto para agregar el componente.

Finalmente asignamos ambos personajes desde el Inspector arrastrando los objetos correspondientes a los espacios del script. Esto permitió controlar qué personaje se activa y cuál se desactiva dentro del videojuego 3D al momento de jugar.

Para aumentar la dificultad y hacer más dinámica la experiencia del videojuego 3D, agregamos varios enemigos adicionales dentro de la escena duplicando el prefab principal del zombie usando Ctrl + D. Luego posicionamos cada enemigo en diferentes zonas del mapa desde la herramienta Move Tool (W), permitiendo que los zombies aparecieran en múltiples puntos del escenario y persiguieran al jugador de forma simultánea durante la partida.

Creación de la Pantalla de Game Over para el Videojuego 3D
Para mejorar la experiencia del videojuego 3D, configuramos una pantalla de Game Over que aparece automáticamente cuando la vida del jugador llega a cero. Esta pantalla muestra un mensaje de derrota junto con opciones para reiniciar la partida o regresar al menú principal.
Como primer paso, agregamos un panel dentro del Canvas usando Click derecho sobre Canvas → UI → Panel y lo renombramos como PanelGameOver. Después modificamos su color, tamaño y transparencia desde el Inspector para que cubriera toda la pantalla y generara un efecto visual de derrota al momento de perder la partida.

Después arrastramos el script GameOver al objeto Canvas para agregar el componente. En el campo Panel Game Over del Inspector arrastramos el objeto PanelGameOver desde el Hierarchy. Este script se encarga de mostrar automáticamente la pantalla cuando el personaje principal pierde toda la vida.

Luego agregamos los textos y botones utilizando Click derecho sobre PanelGameOver → UI → Text y UI → Button. Configuramos un texto grande con el mensaje GAME OVER y añadimos los botones REINTENTAR y MENÚ PRINCIPAL para permitir al jugador continuar navegando dentro del videojuego 3D.




Finalmente configuramos las funciones de los botones desde la opción On Click() del Inspector. En el botón REINTENTAR presionamos +, arrastramos el Canvas y seleccionamos GameOver → Reintentar(). Luego repetimos el mismo proceso con el botón MENÚ PRINCIPAL, seleccionando la función GameOver → IrMenuPrincipal(). Con esto el sistema de derrota quedó completamente funcional dentro del juego.

Escaleras, Escenarios y Colliders
Para mejorar el escenario del videojuego 3D, agregamos unas escaleras superiores que permiten al jugador subir a diferentes zonas de la estructura. Las escaleras fueron posicionadas dentro del mapa usando la herramienta Move Tool (W) y ajustadas desde el Inspector para encajar correctamente con el escenario principal.

Después configuramos los colliders para que el personaje pudiera caminar sobre las escaleras sin atravesarlas. Para hacerlo seleccionamos cada objeto y agregamos un collider desde Add Component → Box Collider. Esto permitió detectar correctamente las colisiones físicas y mejorar el movimiento del jugador dentro del entorno 3D.

Configuracion de llave
El objetivo principal del nivel consiste en encontrar una llave escondida en el mapa para avanzar al siguiente escenario del videojuego 3D. Para esto descargamos un prefab de una llave y lo importamos a Unity arrastrándolo hacia la carpeta Assets. Luego lo colocamos dentro de la escena y organizamos el objeto desde el Hierarchy.

Después creamos un objeto vacío usando Click derecho en Hierarchy → Create Empty y lo nombramos Llave. A este objeto le agregamos un script personalizado usando Add Component → Nuevo Script. Dentro del scripting configuramos que la llave flotara ligeramente usando movimientos en el eje Y, reprodujera un sonido de victoria al ser recogida y enviara automáticamente al siguiente nivel cuando el jugador la tocara.


Finalmente agregamos un componente Audio Source al objeto de la llave para reproducir el sonido de victoria. También activamos la opción Is Trigger en el collider de la llave para detectar el contacto con el jugador sin bloquear el movimiento. Con esto se completó uno de los objetivos principales del videojuego 3D y se mejoró la interacción dentro del escenario.

Cambio de Escena al Recoger la Llave
Para configurar el cambio de escena dentro del videojuego 3D, primero agregamos la siguiente escena del juego en File → Build Settings y presionamos Add Open Scenes para incluirla en el proyecto. Después abrimos el script de la llave en Visual Studio y utilizamos la librería SceneManagement para permitir que Unity pudiera cargar otra escena automáticamente cuando el jugador recogiera la llave.

Luego configuramos la detección del jugador usando el método OnTriggerEnter() dentro del scripting. Cuando el personaje con el tag Player tocaba la llave, se reproducía el sonido de victoria y después se ejecutaba la función SceneManager.LoadScene() para enviar al jugador al siguiente nivel. Gracias a esto, el cambio entre escenarios quedó completamente funcional y permitió continuar el progreso del videojuego 3D de forma automática.

Mover Personajes y Elementos Entre Escenas
Para reutilizar elementos dentro del videojuego 3D, utilizamos la opción Open Scene Additive de Unity. Primero abrimos la escena principal y después seleccionamos la escena que ya tenía toda la configuración completa usando Click derecho sobre la escena → Open Scene Additive. Esto permitió cargar ambas escenas al mismo tiempo dentro del proyecto.

Después de abrir las dos escenas, en el Hierarchy aparecieron todos los objetos organizados por cada nivel. Desde allí copiamos elementos importantes de la escena Nivel1 hacia la escena Nivel3, incluyendo personajes, Canvas, cámaras, spawners, enemigos y otros objetos necesarios para mantener las mismas mecánicas del juego sin tener que configurarlas nuevamente desde cero.

Finalmente organizamos todos los objetos dentro de la nueva escena utilizando las herramientas de movimiento y posición del Inspector. También verificamos que los scripts estuvieran correctamente asignados y que cada elemento estuviera ubicado en el escenario correspondiente. Gracias a esto fue posible mantener la funcionalidad completa del videojuego 3D en diferentes niveles del juego.

Configuración del Escenario 3 y Creación del Puzzle
Para comenzar el Nivel 3 del videojuego 3D, configuramos un nuevo Canvas usando Click derecho en Hierarchy → UI → Canvas. Después agregamos una imagen desde UI → Image para colocar el fondo principal del nivel y darle una apariencia diferente al escenario anterior.

Durante la importación de algunos assets descargados desde la Store de Unity, observamos que ciertas texturas no se cargaban correctamente. Para solucionarlo seleccionamos los materiales o imágenes desde la carpeta Assets y configuramos nuevamente sus texturas desde el Inspector, asegurando que cada objeto mostrara correctamente sus colores y materiales dentro de la escena.


Para crear el puzzle del último nivel, comenzamos importando las 9 imágenes que formarían el rompecabezas 3×3. Las imágenes fueron arrastradas hacia la carpeta Assets/Images para mantener organizados todos los recursos gráficos utilizados en el videojuego 3D.

Finalmente seleccionamos cada imagen desde el panel de Assets y en el Inspector cambiamos la opción Texture Type a Sprite (2D and UI). Después presionamos Apply para guardar los cambios. Este proceso se repitió con las 9 imágenes para que pudieran utilizarse correctamente dentro del puzzle en Unity.

Scripting del Puzzle 3×3
PuzzleRompecabezas.cs — Es el cerebro del puzzle. Genera las piezas mezcladas y los slots de solución, cuenta cuántas piezas están correctas y cuando llegan a 9 muestra el panel de victoria y carga la escena siguiente.
PiezaPuzzle.cs — Controla cada pieza individual. Permite arrastrarla con el mouse (drag and drop), y si no cae en un slot válido la regresa a su posición original.
SlotPuzzle.cs — Controla cada espacio vacío donde el jugador suelta una pieza. Verifica si la pieza que cayó es la correcta — si sí, borde verde y suma al contador; si no, borde rojo.

Depues de esto vamos a modificar el script de llave para que cuando toque la llave del 3 nivel se abra el puzzle sin dañar la logica de la llave en los otros dos nivelesagregamos un campo abrirPuzzle al script. Si está marcado, abre el puzzle en vez de cargar escena. Así los niveles 1 y 2 no se afectan, solo la llave del nivel 3 tendrá ese campo activado.

Construcción del Panel del Puzzle
Para crear el puzzle del videojuego 3D, agregamos un panel principal usando Click derecho en Canvas → UI → Panel y lo renombramos como PanelPuzzle. Después configuramos el tamaño completo de la pantalla y aplicamos un color negro con transparencia desde el Inspector.
Luego creamos dos paneles llamados GridSolucion y GridPiezas usando UI → Panel. A ambos les agregamos el componente Grid Layout Group para organizar automáticamente las piezas del puzzle en una cuadrícula 3×3.
Finalmente creamos un panel llamado PanelVictoria desde Canvas → UI → Panel y agregamos un texto con el mensaje ¡GANASTE!, el cual aparece cuando el jugador completa correctamente el puzzle dentro del videojuego 3D.

Configuración del Script del Puzzle
Después seleccionamos el objeto GameManager en el Hierarchy y agregamos el script usando Add Component → PuzzleRompecabezas. Luego configuramos todos los campos desde el Inspector arrastrando los objetos correspondientes como PanelPuzzle, PanelVictoria, GridPiezas y GridSolucion para conectar correctamente el sistema del puzzle dentro del videojuego 3D.

Finalmente en el campo Escena Siguiente escribimos MenuInicial, permitiendo regresar al menú final del juego cuando el jugador complete el rompecabezas. En ese mismo panel importamos las 9 imágenes del puzzle en el orden correcto para que el sistema pudiera generar y validar automáticamente cada pieza dentro del escenario.

Video
Créditos
Autor: Luis Mario Vega Mendoza – Tania Lugo Hernandez
Editor: Mg. Ing. Carlos Iván Pinzón Romero
Código: UCMV-09
Universidad: Universidad Central
Fuentes
3Digitalis. (2022, 30 de septiembre). Simple Keys [Asset 3D]. Unity Asset Store. https://assetstore.unity.com/packages/3d/props/tools/simple-keys-231162
Avaturn. (2023, 5 de febrero). Import to Unity [Video]. YouTube. https://www.youtube.com/watch?v=pO2PbOvi4kE
Don Pachi. (2021, 24 de junio). Unity 3D - Sistema de combate Parte 1 Personaje [Video]. YouTube. https://www.youtube.com/watch?v=SR8psBicj5k
Don Pachi. (2021, 24 de junio). Unity y Mixamo - Como importar y programar animación 3D de ataque [Video]. YouTube. https://www.youtube.com/watch?v=km3GG5bbtmQ
Douglasdeal. (2023, 27 de abril). Como HACER Terrenos HERMOSOS en Unity 3D 2025 [Video]. YouTube. https://www.youtube.com/watch?v=X5BtqeHHWkc
García Rincón, J. (s.f.). Instanciar enemigos. Jairo García Rincón. https://www.jairogarciarincon.com/clase/unity-navegacion-e-inteligencia-artificial-ai/instanciar-enemigos
LuisCanary. (2020, 23 de noviembre). Como hacer una BARRA de VIDA en Unity [Video]. YouTube. https://www.youtube.com/watch?v=uytdBD7xDrc
Morion VO. (2023, 25 de septiembre). IA para enemigos en Unity - Cap 1 [Video]. YouTube. https://www.youtube.com/watch?v=pKMp_MKIamc
nodician. (2023, 5 de marzo). Como hacer un personaje en tercera persona con cualquier modelo 3d y controlarlo fácil en Unity [Video]. YouTube. https://www.youtube.com/watch?v=XzBggdtqNjs
Unity Technologies. (2023). Third-person standard character setup. Unity Documentation. https://docs.unity3d.com/Packages/com.unity.charactercontroller@1.0/manual/get-started-third-person.html
Unity Technologies. (2022, 28 de julio). Terrain Sample Asset Pack [Asset 3D]. Unity Asset Store. https://assetstore.unity.com/packages/3d/environments/landscapes/terrain-sample-asset-pack-145808
Unity Technologies. (2016). Guía de buenas prácticas para assets de arte. Unity Manual (v. 5.3). https://docs.unity3d.com/es/530/Manual/HOWTO-ArtAssetBestPracticeGuide.html
