Niixer

Desarrollo de un videojuego tipo Fall Guys en Unity 6

El desarrollo de un videojuego en Unity permite integrar mecánicas de plataformas, físicas, cámaras dinámicas, interfaces gráficas y sistemas de interacción dentro de un mismo entorno. Además, en este proyecto se desarrolla un videojuego inspirado en Fall Guys, centrado en una pista de obstáculos donde el jugador debe avanzar evitando caídas, recolectando objetos y alcanzando la meta final.

De igual manera, el videojuego implementa un sistema de vidas, checkpoints, recolección de fresas, selección de personajes y cámaras en tercera persona, combinando elementos arcade con una experiencia visual dinámica y colorida. Por lo tanto, la propuesta fue desarrollada utilizando Unity 6 junto con URP (Universal Render Pipeline), permitiendo obtener mejores materiales, iluminación y compatibilidad visual.


Configuración inicial para el desarrollo de un videojuego en Unity

Para comenzar, el desarrollo inicia con la creación del proyecto en Unity utilizando el sistema de renderizado moderno URP.

Creación del proyecto

  • Abrir Unity Hub.
  • Presionar New Project.
  • Seleccionar la plantilla Universal 3D (URP).
  • Asignar un nombre al proyecto.
  • Presionar Create Project.

El uso de URP permite trabajar con materiales modernos, iluminación mejorada y mayor compatibilidad gráfica dentro del videojuego.


Importación del controlador del personaje y otros paquetes

Por otro lado, para implementar un sistema de movimiento en tercera persona se utiliza el paquete Starter Assets.

Importación de Starter Assets

  • Abrir el Package Manager.
  • Buscar Starter Assets – Third Person Character Controller.
  • Descargar e importar el paquete.
    • Asimismo, realizar este mismo proceso con los otros paquetes que se vayan a utilizar (texturas, elementos, etc..)

Este sistema incluye:

  • Movimiento del personaje.
  • Cámara en tercera persona.
  • Sistema de saltos.
  • Gravedad.
  • Rotación automática.
  • Objeto PlayerFollowCamera.


Diseño de niveles en el desarrollo de un videojuego en Unity.

En primer lugar, la construcción del escenario inicia mediante primitivas 3D básicas para formar una pista aérea inspirada en juegos tipo Fall Guys. Por consiguiente, el objetivo principal es crear un recorrido suspendido en el aire donde el jugador debe correr, saltar y evitar caer al vacío mientras supera diferentes obstáculos.

Creación de la pista

Específicamente, para comenzar la estructura del mapa se utilizan cubos básicos de Unity, los cuales permiten construir rápidamente plataformas, caminos y zonas elevadas.

  1. Ir a GameObject → 3D Object → Cube.
  2. Unity generará automáticamente un cubo en el centro de la escena.
  3. En el panel Inspector, modificar la escala y la posicion.

De esta forma, esta primera plataforma funciona como la isla inicial donde aparece el jugador al comenzar la partida.

Luego de crear la plataforma inicial, se construye se duplicara este cubo para irle dando forma a la pista.

  1. Seleccionar el cubo.
  2. Duplicarlo con Ctrl + D.
  3. Como resultado, debido a la gran cantidad de objetos utilizados durante la construcción del nivel, se crea un objeto vacío para mantener organizada la jerarquía.

Construcción visual de la pista y ambientación del escenario

A continuación, luego de crear la estructura principal del recorrido utilizando cubos básicos, se comienza el proceso de ambientación del mapa para darle una apariencia más cercana a un videojuego arcade tipo Fall Guys. Durante esta etapa se agregan materiales, texturas, prefabs y objetos decorativos importados desde paquetes externos.

Aplicación de texturas a la pista

Para empezar y para darle una apariencia más llamativa al escenario y evitar trabajar únicamente con cubos grises, se utilizaron texturas descargadas desde paquetes externos y Unity Asset Store.

Las imágenes de arena, tierra y otras superficies ya venían incluidas dentro de los assets importados al proyecto.

Para importar las texturas:

  • Seleccionar los cubos o plataformas del escenario.
  • Arrastrar directamente la imagen de textura desde la ventana Project hacia el objeto en la escena.

Seguidamente este procedimiento se repite en diferentes partes de la pista para generar variedad visual entre niveles y zonas del recorrido.

Implementación del piso base

Además, además de los cubos utilizados para construir la pista, también se implementaron prefabs de suelo incluidos dentro del paquete Starter Assets.
En la ventana Project, dentro de las carpetas del paquete:

  • Buscar los prefabs de piso (plano) o superficies.
  • Arrastrarlos directamente hacia la escena.
  • Posicionarlos debajo de las plataformas principales.

Estos elementos ayudan a mejorar visualmente el escenario y sirven como base decorativa del mapa.

Posteriormente, encima de estos pisos se posicionan los cubos y obstáculos que conforman el recorrido principal del juego.

Integración de prefabs y assets externos

De manera similar, para mejorar visualmente el entorno, además de los cubos básicos se utilizan elementos importados desde paquetes de Unity y recursos externos descargados desde Asset Store. Estos paquetes incluyen texturas, prefabs decorativos, rocas y obstáculos.

Estos paquetes incluyen:

  • Texturas.
  • Prefabs decorativos.
  • Rocas.
  • Obstáculos.

División temática por niveles

Por otra parte, para generar variedad visual y aumentar la sensación de progreso dentro del mapa, la pista se divide en diferentes biomas o niveles temáticos. Como resultado, cada sección utiliza materiales y assets distintos.

Primer nivel: Zona helada

Inicialmente, la primera sección del recorrido utiliza una ambientación inspirada en nieve y hielo. Para esta zona se emplearon prefabs incluidos dentro de Starter Assets, pisos claros, elementos blancos y texturas frías. Por lo tanto, esta primera zona funciona como introducción al mapa, por lo que contiene obstáculos más sencillos.

Segundo nivel: Zona desértica

Luego, la segunda parte del recorrido cambia completamente la ambientación hacia un entorno árido y cálido. Para ello, se utilizaron texturas de arena, rocas y superficies desérticas. Aquí, comienzan a aparecer saltos más largos y plataformas estrechas.

Tercer nivel: Zona de tierra y naturaleza

Avanzando, la tercera sección del mapa utiliza una ambientación basada en tierra, césped y elementos naturales, integrando texturas de tierra y rocas decorativas.

Cuarto nivel: Zona de lava y roca

Finalmente, la última parte del recorrido presenta una ambientación inspirada en lava y estructuras volcánicas con colores rojos y negros. En definitiva, esta zona representa la parte más difícil del mapa, incorporando zonas con caída al vacío y obstáculos complejos.

Esta zona representa la parte final y más difícil del mapa, incorporando:

  • Saltos largos.
  • Plataformas pequeñas.
  • Zonas con caída al vacío.
  • Obstáculos más complejos.

De esta manera, cada nivel adquiere una identidad visual diferente y aporta variedad durante toda la experiencia de juego.


Configuración de colliders

En el ámbito técnico, los colliders permiten detectar impactos y evitar que el personaje atraviese objetos.

Box Collider y Mesh Collider

Por un lado, el Box Collider se utiliza en plataformas, muros y obstáculos simples. Unity agrega automáticamente este collider, sin embargo, en este caso se debe colocar a toda la pista base para que el jugador no caiga. Por otro lado, el Mesh Collider se utiliza únicamente en objetos complejos como túneles y rampas curvas.


Muros invisibles

Adicionalmente, para evitar que el jugador caiga fuera de la pista se crean barreras invisibles creando un cubo, escalándolo y desactivando el componente Mesh Renderer. Así, el muro deja de verse, pero mantiene la colisión activa.

Procedimiento

  • Crear un cubo.
  • Escalarlo a lo largo del borde de la pista.
  • Posicionarlo correctamente.
  • Seleccionar el objeto.
  • Buscar el componente Mesh Renderer.
  • Desactivar la casilla.

El muro deja de verse, pero mantiene la colisión activa.


Zona de muerte

De igual forma, para detectar cuándo el jugador cae al vacío, se implementó un sistema de detección basado en Triggers y Tags. Gracias a esto, se evita reiniciar completamente la escena cada vez que el jugador cae.

Creación de la zona de detección

Primero se crea un área invisible ubicada debajo de toda la pista del juego.

  • Ir a GameObject → 3D Object → Plane.
  • Posicionar el plano muy por debajo del escenario principal.
  • Escalarlo hasta cubrir completamente todo el mapa.
  • Renombrarlo como ZonaMuerte.

Este plano funciona como una superficie de detección para registrar cuándo el jugador cae fuera de la pista.

Configuración del collider invisible

Para convertir el plano en una zona de detección:

  • Agregar un componente Box Collider.
  • Activar la opción Is Trigger.
  • Eliminar o desactivar el componente Mesh Renderer (que no esté visible para el jugador).

Al activar Is Trigger, el collider deja de comportarse como un objeto físico sólido y se convierte en una zona invisible que puede detectar cuando otro objeto la atraviesa.

Esto permite que el personaje caiga libremente atravesando el plano mientras Unity registra automáticamente la colisión.

Colisionadores y objetos interactivos

Además de la zona de muerte, el videojuego incorpora obstáculos peligrosos capaces de hacer perder vidas al jugador durante el recorrido.

Para identificar estos objetos se creó el Tag:

Obstaculo

Esta etiqueta fue asignada a diferentes elementos del mapa como:

  • Martillos giratorios.
  • Cuchillas.
  • Objetos móviles.
  • Trampas del escenario.

Cada obstáculo fue configurado utilizando colliders con la opción:

Is Trigger

activada, permitiendo detectar automáticamente cuando el jugador entra en contacto con ellos.

Cuando el personaje toca un objeto con el Tag Obstaculo:

  • Se resta una vida.
  • Se actualiza el HUD.
  • Se reproduce la lógica de caída.
  • El jugador reaparece en el último checkpoint.

Uso de Tags

Es importante destacar que, en el desarrollo de Fall Guys UC, el uso de Tags fue una herramienta fundamental. Por ejemplo, el Tag “Player” se asignó a los personajes, “Checkpoint” a las plataformas de guardado, “Fresa” a los coleccionables, “ZonaMuerte” al plano invisible y “Meta” al arco final.

Diccionario de Tags del proyecto

Durante el desarrollo del videojuego se utilizaron diferentes etiquetas para identificar los elementos interactivos del mapa, algunos de estos son:

  • Player: asignado a los personajes principales Felipe y Maria Jose. Esta etiqueta permite identificar al jugador dentro de toda la escena.
  • Checkpoint: utilizado en las plataformas de guardado para actualizar la posición de reaparición.
  • Fresa: asignado a los coleccionables flotantes distribuidos por la pista.
  • ZonaMuerte: aplicado al plano invisible ubicado debajo del escenario.
  • Meta: utilizado en el arco final del recorrido para detectar la victoria.

Asignación del Tag Player

Para lograr que la zona de muerte no reaccione con cualquier objeto, únicamente los personajes principales reciben la etiqueta Player. De esta manera, los obstáculos, frutas y plataformas no activan el sistema de caída.

Funcionamiento de la lógica mediante OnTriggerEnter

El sistema utiliza la función OnTriggerEnter() para detectar qué objeto entra en contacto con cada zona interactiva.

Cuando el jugador toca un objeto del escenario, el script verifica automáticamente qué Tag posee y ejecuta una acción específica dependiendo de la etiqueta detectada.

private void OnTriggerEnter(Collider other)
{
// SI TOCAMOS UNA FRESA
if (other.CompareTag("Fresa"))
{
RecolectarFresa(other.gameObject);
}

// SI TOCAMOS UN CHECKPOINT
else if (other.CompareTag("Checkpoint"))
{
ActualizarPuntoDeGuardado(other.transform.position);
}

// SI CAEMOS A LA ZONA DE MUERTE
else if (other.CompareTag("ZonaMuerte"))
{
RestarVidaYRespawnear();
}
}

Funcionamiento del respawn

Cuando el personaje entra en contacto con la zona invisible ubicada debajo del mapa:

  • Se resta una vida al contador principal.
  • Se ejecuta la lógica de caída.
  • El personaje reaparece automáticamente en el último checkpoint alcanzado.

La posición del checkpoint se almacena mediante una variable de tipo Vector3, permitiendo teletransportar inmediatamente al jugador hacia el último punto seguro.

Esto evita reiniciar toda la escena y mantiene la continuidad de la partida.


Personajes

Los personajes principales del videojuego fueron creados utilizando la plataforma Avaturn, permitiendo generar avatares tridimensionales personalizados con apariencia estilizada y compatible con Unity.

Posteriormente, los modelos fueron ajustados y preparados en Blender antes de ser integrados dentro del motor gráfico.

Personajes principales

  • Felipe.
  • Maria Jose.

Cada personaje cuenta con:

  • Modelo 3D personalizado.
  • Texturas propias.
  • Animaciones en tercera persona.
  • Música individual.
  • Sistema de movimiento y físicas.

Corrección de materiales y texturas de los personajes

Durante la importación de los personajes dentro de Unity 6 utilizando URP (Universal Render Pipeline), surgen dos problemas principales:

  • Los materiales aparecen completamente de color rosa o no permiten extraer las texturas que venían con el fbx.
  • Las texturas del archivo FBX no podían visualizarse correctamente.

Esto ocurre debido a incompatibilidades entre Blender y el sistema de materiales URP de Unity, además de que muchas veces las texturas quedan empaquetadas dentro del archivo exportado.

Desempaquetado de texturas desde Blender

Antes de importar correctamente el personaje en Unity, primero fue necesario extraer las texturas originales desde Blender.

Para ello:

  1. Ir al menú superior izquierdo de Blender y haz clic en File (Archivo).
  2. Bajar con el cursor hasta la opción External Data (Datos Externos).
  3. En el submenú que se despliega, haz clic en Unpack Resources (Desempaquetar recursos) o Unpack All Into Files (Desempaquetar todo en archivos).
  4. Hacer clic en la primera opción: “Write local files (default)” (Escribir archivos locales / Crear cuando sea necesario).

Esto genera automáticamente las imágenes utilizadas por el personaje dentro de la carpeta del proyecto.

En algunos casos las imágenes se exportan sin extensión, por lo que fue necesario renombrarlas manualmente agregando:

.png

Después de esto se arrastra la carpeta generada por blender a Unity para que este pueda reconocer correctamente las texturas del personaje.

Luego de extraer las texturas, se debe configurar la textura del Cuerpo.

Para ello:

  1. En Unity, hacer clic derecho en un espacio vacío dentro de la carpeta y seleccionar Create -> Material y asignarle un nombre.
  2. Hacer clic sobre el nuevo material para verlo en el Inspector (a la derecha).
    • Busca una casilla cuadrada pequeña que dice Base Map (o Albedo, tiene un círculo al lado).
  3. Arrastrar la imagen que corresponda desde la carpeta de proyectos y soltarla justo dentro de ese cuadro de Base Map, para que la esfera del material toma los colores de la ropa y piel.

Asignación de las texturas

Después de crear el material, se arrastra al espacio correspondiente de la pestaña materiales del avatar.

Configuración del sistema de movimiento

Para implementar el sistema de movimiento en tercera persona se utilizó el paquete oficial Starter Assets – Third Person Character Controller.

Este paquete proporciona automáticamente:

  • Movimiento del personaje.
  • Sistema de salto.
  • Gravedad.
  • Rotación automática.
  • Controlador de cámara.
  • Animaciones básicas.

Configuración del Rig Humanoid

Antes de utilizar las animaciones, Unity debe reconocer correctamente la estructura ósea del personaje.

Para ello:

  1. Seleccionar el archivo del personaje (.fbx).
  2. Ir al panel Inspector.
  3. Abrir la pestaña Rig.
  4. En Animation Type seleccionar:
Humanoid

Finalmente:

  • Presionar Apply.

Inserción del controlador del jugador

Una vez importado el paquete, se agrega el controlador principal a la escena.

  1. Ir a:
Assets → StarterAssets → ThirdPersonController → Prefabs

Dentro de la carpeta se encuentra el prefab:

PlayerArmature

Este prefab contiene:

  • Movimiento completo.
  • Control de físicas.
  • Sistema de salto.
  • Animator.
  • Cámara de seguimiento.

Posteriormente:

  • Arrastrar PlayerArmature hacia la escena.
  • Posicionarlo sobre la plataforma inicial.

Al ejecutar el juego, el personaje ya puede:

  • Caminar.
  • Correr.
  • Saltar.

Reemplazo del modelo base por los personajes personalizados

El prefab PlayerArmature incluye inicialmente un maniquí genérico.

Para reemplazarlo:

  1. Expandir PlayerArmature en la Jerarquía.
  2. Ubicar el objeto Geometry o Armature_Mesh.
  3. Eliminarlo o desactivarlo.

Después:

  • Arrastrar el modelo dentro de PlayerArmature.
  • Convertirlo en hijo del controlador principal.

Asignación del Avatar en Animator

Para conectar las animaciones:

  1. Seleccionar PlayerArmature.
  2. Ir al componente Animator.
  3. Ubicar el campo Avatar.
  4. Asignar el Avatar correspondiente del personaje importado.

Esto permite que las animaciones del sistema Starter Assets controlen correctamente:

  • Movimiento.
  • Saltos.
  • Rotaciones.
  • Estados de animación.

Configuración de cámara con Cinemachine

Para manejar la cámara en tercera persona se utiliza Cinemachine.

PlayerCameraRoot

Este objeto se encuentra dentro de la jerarquía del personaje.

Procedimiento

  • Abrir la jerarquía del personaje.
  • Buscar PlayerCameraRoot.
  • Arrastrarlo al espacio correspondiente de la cámara.

Ajuste de distancia de cámara

La distancia de la cámara se configura desde:

  • PlayerFollowCamera

En el componente:

  • Cinemachine 3rd Person Follow

Se modifican:

  • Camera Distance.
  • Shoulder Offset.

Esto permite ajustar:

  • Distancia.
  • Altura.
  • Ángulo.

Esta cámara:

  • Sigue automáticamente al jugador.
  • Rota con el mouse.
  • Permite una vista en tercera persona fluida.
  • Genera una experiencia similar a videojuegos modernos de plataformas.

Arquitectura central: Game Manager


Para centralizar todas las mecánicas principales del videojuego se implementó un objeto llamado _GameManager , encargado de controlar la lógica general de la partida. Este sistema administra la interfaz gráfica, la selección de personajes, los menús, el sistema de audio, la cámara con Cinemachine y el inicio de la partida, permitiendo mantener organizada toda la estructura del proyecto desde un único punto de control.

Arquitectura de la interfaz gráfica (UI)

Toda la experiencia visual fue desarrollada utilizando el sistema Canvas de Unity. La interfaz se organizó en diferentes paneles independientes que se activan o desactivan mediante programación dependiendo del estado actual de la partida.

Esta estructura permitió separar correctamente:

  • El menú inicial.
  • La selección de personajes.
  • La interfaz principal del juego (HUD).
  • La pantalla de derrota.
  • La pantalla de victoria.

Pantalla de presentación (Menú inicial)

La primera interfaz que visualiza el jugador corresponde al panel Presentacion, ubicado dentro del Canvas principal.

Este menú funciona como punto de entrada al videojuego y contiene las opciones básicas de navegación antes de iniciar la partida.

Dentro de este panel se configuraron:

  • Botón de jugar.
  • Botón de instrucciones.
  • Botón de créditos.
  • Botón de ajustes.

Cada botón fue creado utilizando:

  • UI → Button.
  • Paneles con Image.
  • TextMeshPro para los textos.

El botón de instrucciones despliega información relacionada con:

  • Controles del personaje.
  • Objetivo de la pista.
  • Mecánicas de salto y movimiento.

El botón de créditos muestra la información de los desarrolladores del proyecto.

Por otro lado, el apartado de ajustes permite controlar algunos elementos visuales y de audio, incluyendo la música del lobby.


Selector de personajes

Después de ingresar al juego, la interfaz cambia automáticamente al panel Selector-personaje, donde el usuario puede elegir el avatar que utilizará durante la partida.

Los personajes disponibles son:

  • Felipe.
  • Maria Jose.

Para mejorar el aspecto visual del selector, se utilizaron renders 2D de ambos personajes.

Estas imágenes fueron importadas dentro de Unity y configuradas como:

  • Texture Type → Sprite (2D and UI).
  • Sprite Mode → Single.

Posteriormente, cada imagen fue asignada al componente Image de los botones:

  • Btn_Felipe.
  • Btn_Mj.

Para conservar correctamente las proporciones del personaje se activó:

  • Preserve Aspect.

Configuración de eventos On Click()

La conexión entre la interfaz y el sistema de selección fue realizada mediante los eventos On Click() del componente Button.

El proceso realizado fue:

  • Seleccionar el botón correspondiente.
  • Ir al componente Button en el Inspector.
  • Ubicar la sección On Click().
  • Presionar el botón + para agregar un nuevo evento.
  • Arrastrar el objeto que contiene el script principal.
  • Seleccionar la función correspondiente.

Las funciones utilizadas fueron:

  • SeleccionarFelipe().
  • SeleccionarMajo().

Cuando el jugador selecciona un personaje:

  • Se instancia el avatar correspondiente.
  • Se apaga la música del lobby.
  • Se activa la música individual del personaje.
  • Se bloquea el cursor.
  • Comienza la partida.

HUD del juego (Heads-Up Display)

Durante la partida se activa el panel Canvas_HUD, encargado de mostrar toda la información importante del jugador en tiempo real.

El HUD fue desarrollado utilizando:

  • Canvas.
  • Paneles UI.
  • TextMeshPro.

TextMeshPro permitió mantener textos.

La interfaz muestra:

  • Vidas restantes.
  • Nivel actual.
  • Tiempo de partida.
  • Fresas recolectadas.

Sistema de vidas

El contador de vidas inicia en:

  • 5 vidas.

Cada vez que el jugador cae al vacío:

  • Se resta una vida.
  • Se actualiza el HUD.
  • Se reproduce un sonido de caída.
  • El personaje reaparece en el último checkpoint.

Contador de fresas

El sistema de coleccionables muestra el progreso utilizando un formato dinámico:

0 / 25

Cada vez que el jugador recoge una fruta:

  • El contador aumenta.
  • La fruta desaparece.
  • Se reproduce un efecto de sonido.

Cronómetro

El HUD también incluye un sistema de tiempo que incrementa constantemente durante la partida.

Este cronómetro añade presión arcade al recorrido y permite medir el desempeño del jugador.


Panel de Game Over

La pantalla de derrota corresponde al panel:

  • Game-over.

Este panel permanece oculto durante toda la partida y únicamente se activa cuando las vidas del jugador llegan a cero.

Funcionamiento

Cuando el sistema detecta que no quedan vidas:

  • Se detiene completamente el juego utilizando Time.timeScale = 0.
  • Se frenan las físicas.
  • Se detienen los obstáculos.
  • Se pausa el movimiento del personaje.
  • Se detiene la música principal.
  • Se reproduce el sonido de derrota.

Adicionalmente:

  • Se desbloquea el cursor.
  • Se habilitan botones de reinicio.
  • El usuario puede volver al menú principal.

Panel de victoria

La pantalla de victoria corresponde al panel:

  • CanvasGanaste.

Este panel se activa cuando el personaje entra en contacto con el objeto que posee el Tag:

  • Meta.

Comportamiento del sistema

Al completar la pista:

  • El tiempo del juego se congela.
  • Se detiene el cronómetro.
  • Se desactivan las físicas.
  • Se reproduce un sonido de victoria.
  • Se muestra el panel final.

Sistema de vidas y respawn

El sistema de vidas fue programado mediante el script LogicaJuego.cs.

Funciones implementadas

  • Restar vidas al caer.
  • Respawn en checkpoints.
  • Game Over.
  • Victoria.

Cuando el jugador pierde todas las vidas:

  • Se pausa el tiempo:
    Time.timeScale = 0.
  • Se desbloquea el cursor.
  • Se muestra el CanvasGameOver.

Sistema de checkpoints

Los checkpoints permiten guardar el progreso del jugador.

Configuración

  • Crear objeto vacío.
  • Agregar Box Collider.
  • Activar Is Trigger.
  • Asignar la etiqueta Checkpoint.

Sistema de recolección de fresas

Las fresas funcionan como objetos coleccionables distribuidos a lo largo de toda la pista. Estas frutas permiten aumentar la puntuación del jugador y añadir objetivos secundarios durante el recorrido.

Cada fresa fue creada como un objeto interactivo utilizando modelos 3D importados desde Blender y configurados posteriormente dentro de Unity 6.

Importación del modelo FBX

Las fresas fueron exportadas desde Blender en formato:

.fbx

El archivo incluía:

  • Modelo 3D.
  • Texturas.
  • Materiales.

Para importar correctamente las texturas dentro de Unity:

  • Arrastrar el archivo .fbx hacia la ventana Project.
  • Seleccionar el archivo importado.
  • Ir al panel Inspector.
  • Abrir la pestaña Materials.
  • Presionar la opción Extract Materials.

Esto permite separar los materiales del archivo FBX y facilita modificar o reutilizar las texturas dentro del proyecto.

Configuración de físicas y colisiones

Para que las fresas puedan detectarse correctamente durante la partida, es necesario configurar un sistema de colisión mediante triggers.

Con la fresa seleccionada en la jerarquía:

  • Ir al Inspector.
  • Presionar Add Component.
  • Agregar un Sphere Collider.

El Sphere Collider funciona correctamente para objetos pequeños y redondeados como las fresas.

Posteriormente se activa:

Is Trigger

Esto es fundamental, ya que permite que el jugador atraviese la fruta y el sistema detecte automáticamente la recolección.

Si esta opción no se activa, el personaje choca físicamente con la fresa en lugar de recogerla.

Creación del Tag Fresa

Para que el sistema pudiera identificar correctamente los coleccionables, se creó una etiqueta personalizada llamada:

Fresa

El procedimiento realizado fue:

  • Seleccionar la fresa en la jerarquía.
  • Ir al apartado Tag en el Inspector.
  • Seleccionar Add Tag…
  • Presionar el símbolo +.
  • Crear el Tag llamado Fresa.

Después de crear la etiqueta:

  • Volver a seleccionar la fresa.
  • Asignar el Tag Fresa.

Gracias a este sistema, el script puede identificar automáticamente cuándo el jugador entra en contacto con una fruta.

Detección mediante OnTriggerEnter()

La lógica de recolección fue implementada utilizando la función:

OnTriggerEnter()

Cuando el jugador entra en contacto con un objeto que posee el Tag Fresa, el sistema:

  • Incrementa el contador del HUD.
  • Reproduce un efecto de sonido.
  • Destruye la fruta de la escena.
  • Actualiza la puntuación del jugador.

Creación del Prefab

Después de configurar completamente la primera fresa, se crea un Prefab reutilizable para acelerar la construcción del nivel.

Antes de convertir en Prefab, la fruta ya debe tener:

  • Collider configurado.
  • Is Trigger activado.
  • Tag Fresa asignado.
  • Materiales y texturas aplicadas.

Para crear el Prefab:

  • Seleccionar la fresa en la Hierarchy.
  • Arrastrarla hacia la ventana Project.
  • Soltarla dentro de la carpeta del proyecto.

Cuando el nombre del objeto aparece en color azul dentro de la jerarquía, significa que Unity creó correctamente el Prefab.

Este Prefab funciona como una plantilla reutilizable que puede colocarse múltiples veces dentro del escenario sin necesidad de volver a configurar cada fruta manualmente.

Duplicación y distribución de fresas

Una vez creado el Prefab, las fresas fueron distribuidas a lo largo de toda la pista utilizando duplicaciones.

Para ello:

  • Seleccionar la fruta en la escena.
  • Duplicarla utilizando Ctrl + D.
  • Reposicionarla en diferentes zonas del mapa.

Las frutas fueron colocadas estratégicamente:

  • Encima de plataformas.
  • Entre obstáculos.
  • En zonas de riesgo.
  • En rutas secundarias.

Sistema de audio

Finalmente, para mejorar la experiencia, se implementó un sistema de audio. En primer lugar, se creó un Slider de volumen conectado al AudioListener maestro mediante un script llamado ControladorVolumen.cs, actualizando el sonido con el evento On Value Changed().

Creación del Slider de volumen

Dentro del panel de ajustes del menú principal se crea una barra de volumen utilizando:

  • Canvas.
  • UI → Slider.
  • TextMeshPro para el título “Volumen”.

Posteriormente, en el Inspector del Slider se configuran los valores:

  • Min Value = 0
  • Max Value = 1

Esto permite controlar el volumen general del juego utilizando los mismos rangos manejados por Unity.

Script ControladorVolumen

Para conectar el Slider con el sistema de audio se crea el script:

ControladorVolumen.cs

Este script utiliza:

  • AudioListener.volume
  • Slider
  • Eventos dinámicos On Value Changed()

La lógica principal consiste en actualizar el volumen global cada vez que el usuario mueve la barra de sonido.

using UnityEngine;
using UnityEngine.UI;

public class ControladorVolumen : MonoBehaviour
{
    public Slider sliderVolumen;

    void Start()
    {
        if (sliderVolumen != null)
        {
            sliderVolumen.value = AudioListener.volume;
        }
    }

    public void CambiarVolumen(float valor)
    {
        AudioListener.volume = valor;
    }
}

Conexión del Slider mediante On Value Changed()

Para conectar visualmente la interfaz con el script:

  • Seleccionar el Slider.
  • Ir al componente On Value Changed().
  • Presionar el botón +.
  • Arrastrar el objeto que contiene el script ControladorVolumen.
  • Seleccionar la función: ControladorVolumen → CambiarVolumen(float)

Música del lobby

Asimismo, se implementó música para el lobby en un objeto vacío con Audio Source (Play On Awake y Loop). Por último, cuando el jugador selecciona un personaje, un evento On Click() desactiva (SetActive false) la música del menú, permitiendo que inicie la banda sonora del nivel.

Esto permite que la música del menú se reproduzca automáticamente al iniciar el videojuego.

Transición de audio al seleccionar personaje

Cuando el jugador selecciona un personaje, la música del lobby debe detenerse automáticamente y comenzar la música correspondiente al avatar elegido.

Detener música del menú

  • Seleccionar el botón del personaje.
  • Ir a la sección On Click().
  • Agregar un nuevo evento.
  • Arrastrar el objeto MusicaLobby.
  • Seleccionar: GameObject → SetActive(bool)

Este paso se repite para todos los sonidos que se quieran implementar.

Bibliografía y Recursos Utilizados

1. Banda Sonora y Efectos de Audio

Kallio, J., & Hagström, D. / Mediatonic. (2020). Everybody Falls (Fall Guys Theme) [Canción]. En Fall Guys: Ultimate Knockout (Original Soundtrack). Devolver Digital. (Utilizado como música ambiental en el Lobby/Presentación).

Kallio, J., & Hagström, D. / Mediatonic. (2020). Survive the Fall [Canción]. En Fall Guys: Ultimate Knockout (Original Soundtrack). Devolver Digital. (Utilizado como música de fondo durante el gameplay).

Efecto de Sonido. (s.f.). Sound effect - Win [Efecto de audio]. (Utilizado para la pantalla de Victoria / CanvasGanaste).

Efecto de Sonido. (s.f.). Game Over sound effect [Efecto de audio]. (Utilizado para la pantalla de derrota / CanvasGameOver).

Efecto de Sonido. (s.f.). Collect Item Sound Effect [Efecto de audio]. (Asignado al trigger del objeto Fresa para la recolección).

Referencia Web. (s.f.). Click mouse White Screen - 1 hour 1080p [Video]. YouTube. https://youtu.be/rXMeDUJGsOo

2. Componentes y Modelos 3D (Unity Asset Store)

Unity Technologies. (s.f.). Starter Assets - ThirdPerson | URP | Essentials [Paquete de software]. Unity Asset Store. (Base utilizada para el controlador del personaje principal).

Unity Technologies. (s.f.). Cinemachine [Paquete de software]. Unity Asset Store. (Utilizado para la cámara dinámica en tercera persona).

Autor del paquete / Asset Store. (s.f.). AllSky Free - Skybox Set [Paquete de texturas]. Unity Asset Store. (Utilizado para la ambientación e iluminación del escenario).

Poly Style. (s.f.). POLY STYLE - Platformer Starter Pack [Paquete de modelos 3D]. Unity Asset Store. (Utilizado para plataformas, obstáculos y ambientación).

3. Herramientas de Inteligencia Artificial Utilizadas



3. Herramientas de Inteligencia Artificial Utilizadas

Google. (2026). Gemini [Modelo de inteligencia artificial]. Utilizado como apoyo técnico durante el desarrollo en Unity 6, solución de errores, configuración de componentes y asistencia en mecánicas del videojuego

OpenAI. (2026). ChatGPT [Modelo de lenguaje de inteligencia artificial]. Utilizado para apoyo en la redacción técnica, organización del artículo, documentación del proyecto y generación de contenido descriptivo.

OpenAI. (2026). DALL·E [Modelo de inteligencia artificial generativa]. Utilizado para la generación de imágenes conceptuales y portada del proyecto Fall Guys UC.

Motor Gráfico y Software Utilizado

Unity Technologies. (2026). Unity 6 [Motor gráfico]. Utilizado como entorno principal de desarrollo del videojuego.

Blender Foundation. (2026). Blender [Software de modelado 3D]. Utilizado para ajustes de personajes, materiales y exportación de modelos FBX.

Avaturn. (2026). Avaturn Character Creator [Plataforma de creación de avatares]. Utilizado para la creación de personajes personalizados.

La inteligencia artificial fue utilizada únicamente como herramienta de apoyo para documentación, organización de contenido y asistencia técnica durante el desarrollo del proyecto.

Créditos

Autores: Maria Jose Fonseca Ibañez Julian Felipe Cortes Moreno

Editor: Magister Ing. Carlos Pinzón Romero

Codigo: UCMV-10

Universidad: Universidad Central