
Paso a paso videojuego en Unity Nexus Fear
Creación personajes
Para la creación de nuestro personaje en Unity con nuestro propio rostro, ingresamos a:
https://metaperson.avatarsdk.com
Seleccionamos la opción take a selfie donde se abrirá un código qr que deberá ser escaneado en nuestro celular, una vez tomada la foto
Una vez tomada la foto en la página se nos dará la opción de generar el avatar
Personaje 1:
Personaje 2:
Personaje 3:
Una vez generados se pueden descargar en formato FBX
Posteriormente será importante generar una carpeta para poder aplicar las texturas cuando se importe el personaje en unity
Para realizar esto se importa el modelo en Blender
Y en la parte superior nos vamos a la parte Editar UV
Ahora en el modelo seleccionamos por aparte todo lo que se va realizar la textura en este caso es la cabeza, el cuerpo y las manos
Cabeza:
Cuerpo:
Para exportar cada textura nos dirigimos a donde dice imagen
Para llevar un orden se crea una carpeta con todas las texturas generadas
Se repite el mismo proceso con los 3 personajes que se van a utilizar
Importación y texturizado de los niveles en Unity
Nivel 1
La temática principal van a ser los backrooms, por lo tanto en sketchfab se buscan escenarios relacionados
Para abrirlo en Unity se arrastra la carpeta descargada y se ubica donde sea necesario, en este caso se guardó en la siguiente carpeta
Posteriormente se arrastra a la jerarquía de la parte izquierda del editor
Nivel 2
Para esto se hace una nueva escena y se abre en unity el nuevo modelo, en este caso se va a realizar un laberinto

Hay partes del modelo que se importan sin su textura, para ponerlas buscamos la carpeta con las texturas del modelo
Al abrirla aparecen todos los materiales existentes, para aplicarlos se arrastran según corresponda
Paredes y suelo texturizado

Nivel 3.
Para el nivel 3 vamos a tener un parkour, para esto seguimos el paso de los niveles anteriores de buscar un modelo y descargarlo de sketchfab

Al abrirlo en unity también aparecerá sin texturas por lo que volvemos a la carpera de texturas del modelo, por lo que seleccionamos los objetos uno por uno y arrastramos su textura correspondiente.

Escena para selección de personajes en Unity
Se crea un plano
Se crea una nueva escena
Se crean los botones
Para los otros botones se copia el primero y se le cambia el texto
Posteriormente se cambian los colores y se ajustan según la necesidad del juego en Unity
Ahora se le tendrá que dar la funcionalidad a los botones, para esto se crea un nuevo script, para llevar el orden creamos una carpeta de script para ir guardando lo que se vaya generando.
Explicación del Script MenuInicial
Este script, llamado MenuInicial, está diseñado para manejar los botones del menú principal de nuestro videojuego en Unity. En particular, permite iniciar el juego cargando una escena específica y salir de la aplicación. Veamos qué hace cada parte:
Importación de espacios de nombres
Estas líneas nos permiten acceder a las funcionalidades de Unity:
- UnityEngine: nos da acceso a todas las funciones básicas del motor.
- UnityEngine.SceneManagement: necesario para poder cambiar de escenas dentro del juego.
Definición de la clase MenuInicial
Aquí definimos una clase pública llamada MenuInicial, que hereda de MonoBehaviour, lo cual le permite ser agregada como componente en un objeto de la escena (por ejemplo, el Canvas del menú).
Método Jugar (string Nivel1)
Este método se activa cuando el jugador presiona el botón Jugar. A diferencia de la versión anterior del script, ahora se le pasa como parámetro el nombre de la escena que se quiere cargar.
- string Nivel1: es el nombre de la escena que deseamos cargar. Este nombre debe coincidir exactamente con el que está registrado en el Build Settings de Unity.
- SceneManager.LoadScene(Nivel1): se encarga de cargar la escena correspondiente.
Método salir()

Este método se ejecuta al presionar el botón Salir. Hace lo siguiente:
- Application.Quit(): cierra la aplicación si está compilada (por ejemplo, en PC, Android, etc.).
Debug.Log(“Salir…”): imprime un mensaje en la consola. Es útil durante el desarrollo, ya que Application.Quit() no tiene efecto en el editor de Unity.
Ahora se arrastra el script al canvas en la jerarquía para que este se tenga como un nuevo componente
Ahora para asignar las funciones creadas nos vamos al inspector de los botones y en donde dice On Click añadimos uno nuevo
Se arrastra el canvas en donde dice None (Object) y en function se busca el script creado anteriormente
Se repite el mismo proceso para el botón de salir
De igual manera se crea un menú de opciones
Luego se le añade una imagen para el fondo
Para que los controles aparezcan cuando se presiona el botón y se quiten al dar regresar de deben configurar los eventos de los clics en el botón opciones
De igual manera en el botón regresar
Selector de personajes en Unity
Para tener organizados los modelos se crea una nueva carpeta llamada personajes donde se tienen los modelos y sus texturas.
Se crea un plano
Se ponen los personajes
Se crea un nuevo script para el objeto selección

Ahora se acomodan unos planos que servirán como paredes para darle un fondo al juego
Se crea un nuevo botón
Se crea un nuevo objeto llamado GameManager y se le asigna el script SpawnPersonaje

Y se crean los scripts de selección del personaje
Para que el personaje seleccionado sea el que se tiene se crea un nuevo script llamado SpawnPersonaje
Nivel 1 en Unity
Se abre mixamo, se carga el personaje y se le da una animación, posteriormente se descarga y se abre en Unity
Se pone en la escena y se le aplican sus texturas
Se crea el avatar a partir del modelo modificando los siguientes parámetros en el inspector
Ahora nos dirigimos al StarterAssets
Seguimos la siguiente ruta
Cargamos donde dice Nestedplayerarmature
Arrastramos nuestro personaje en donde dice player armature
Se ajustan a una altura similar y se ponen en la misma posición
Se desmarca donde dice geometry para que se quite el robot
Ahora seleccionamos PlayerArmature desde la jerarquía
Y en Animator donde dice avatar arrastramos el avatar que tiene nuestra animación
Con esto nuestro personaje ya será jugable
Implementación de un Temporizador (Timer) en la Escena del Juego
A continuación, se describen los pasos realizados para implementar un temporizador de cuenta regresiva dentro de una escena en Unity. Este temporizador se visualizará en pantalla y comenzará en 100 segundos, disminuyendo progresivamente hasta llegar a cero.
Primero, dentro de la escena del juego, creamos un nuevo objeto Canvas, el cual servirá como contenedor para los elementos de la interfaz gráfica (UI). Dentro de este Canvas, añadimos un objeto de tipo Texto (Text), que será el encargado de mostrar el valor del temporizador.
El componente de texto se ajusta visualmente para que se vea de forma clara durante la partida. Como configuración inicial, se define el contenido del texto como “00”, esto con el fin de mantener el formato visual adecuado para mostrar números con decimales.
Posteriormente, se crea un Empty Object (objeto vacío) dentro de la escena. Este objeto será utilizado para ejecutar la lógica del temporizador. A este objeto le asignamos el script llamado Timer, el cual se encargará de controlar el comportamiento del contador.
En el objeto vacío al que se le asignó el script Timer, se deben realizar dos configuraciones importantes desde el Inspector:
- En el campo Texto Timer, se arrastra y se asigna el objeto de texto previamente creado dentro del Canvas.
- En el campo Timer, se define el valor inicial como 100, lo cual indica que la cuenta regresiva comenzará desde 100 segundos.
Para mantener el proyecto ordenado, dentro de la carpeta Assets se creó un nuevo folder llamado “Scripts”, y dentro de él se generó el script Timer.cs, que contiene la lógica de funcionamiento del contador.
El script Timer está programado en C# y tiene la función de reducir el tiempo, mostrarlo visualmente en pantalla y también reiniciar automáticamente el nivel cuando el temporizador llega a cero. A continuación, se explica en detalle su contenido:
Explicación del funcionamiento:
- public float timer = 0;: Declara una variable pública que almacena el valor del temporizador. Este valor se puede establecer manualmente desde el Inspector de Unity (por ejemplo, iniciar desde 100 segundos).
- public Text textoTimer;: Hace referencia al componente de texto en la UI donde se mostrará el valor actual del temporizador.
- En el método Update(), que se ejecuta en cada frame del juego:
- if (timer > 0): Comprueba si el temporizador aún tiene tiempo restante.
- timer -= Time.deltaTime;: Resta al contador la cantidad de segundos que han transcurrido desde el último frame, lo que produce una cuenta regresiva.
- timer = Mathf.Max(timer, 0);: Asegura que el valor nunca baje de cero, evitando números negativos.
- textoTimer.text = timer.ToString(“f1”);: Actualiza el contenido del texto, mostrando el tiempo restante con un solo decimal (por ejemplo: 99.2, 88.7, etc.).
- Cuando el tiempo llega a cero o menos:
- SceneManager.LoadScene(SceneManager.GetActiveScene().name);: Esta línea reinicia la escena actual, permitiendo que el nivel vuelva a comenzar desde el inicio automáticamente.
Con esta mejora, al ejecutar la escena ya se puede observar el temporizador funcionando en tiempo real, contando regresivamente desde el valor inicial definido. Y ahora, una vez el tiempo llega a cero, el juego reinicia automáticamente el nivel, lo que agrega un nuevo nivel de dificultad y presión al jugador, ideal para desafíos contrarreloj o mecánicas de pérdida por tiempo agotado.
Recolectables en Unity
Primero, se deben crear los objetos coleccionables (por ejemplo, gemas, monedas, esferas, etc.) dentro de la escena. A cada uno de estos objetos se le debe añadir el componente Box Collider (con la opción Is Trigger activada), y se les asigna el script ObjectInteract para que puedan detectar la interacción con el jugador y ser recogidos.
Dentro del Canvas de la escena, se debe crear un nuevo objeto de tipo UI > Text (o TextMeshPro, si se está usando TMP). Este objeto será el encargado de mostrar el número de objetos atesorados.
Es importante dejar este campo sin valor visible al inicio (puede decir “0”, “Objetos: 0”, o simplemente estar vacío) porque su contenido será actualizado automáticamente por el script.
Se crea un Empty Object (objeto vacío) en la escena llamado, por ejemplo, ControladorInventario. A este objeto se le añade el script Inventario.
Luego, en el campo público Texto Inventario del script, se debe arrastrar el objeto de texto del Canvas creado anteriormente para establecer la conexión entre ambos.
Para asegurar que el script ObjectInteract encuentre y acceda al sistema de inventario, también se debe asignar el script Inventario al jugador (el objeto que tenga el tag “Player”).
Además, en ese mismo script, también se debe arrastrar el objeto del texto en el Canvas al campo Texto Inventario, igual que en el paso anterior.
- Solo una de las dos instancias del script Inventario será usada por el objeto acumulable, dependiendo de a cuál se acceda desde el tag “Player”. Es recomendable que el objeto “Player” tenga el control central del inventario para evitar conflictos.
Explicación del código ObjectInteract
Este script se encarga de detectar cuando el jugador entra en contacto con el objeto. Al ocurrir la colisión:
- Se incrementa la cantidad de objetos reunidos mediante el método AumentarCantidad().
- El objeto se destruye con Destroy(gameObject) para simular su colección.
Explicación del código Inventario
Este script lleva el control del número de objetos reunidos:
- La variable Cantidad almacena el total.
- AumentarCantidad() incrementa esa cantidad y actualiza el texto.
- ActualizarTexto() se encarga de reflejar en la interfaz gráfica el nuevo valor.
También incluye una verificación que emite una advertencia si no se ha asignado el campo del texto en el Inspector.
Una vez completadas todas las configuraciones anteriores, al ejecutar el juego se puede observar el sistema de recopilación en funcionamiento de la siguiente manera:
- Cuando el jugador se acerca y entra en contacto con un objeto coleccionable, este desaparece automáticamente al ser recogido.
- Al mismo tiempo, el contador de objetos en el Canvas se actualiza en tiempo real, incrementando su valor y mostrando al jugador cuántos objetos ha recogido hasta el momento.
- Esta interacción es fluida y visualmente clara, aportando una retroalimentación inmediata al jugador sobre su progreso en la colección.
Este sistema no solo mejora la experiencia de juego, sino que también permite implementar mecánicas adicionales como misiones, desbloqueo de niveles o recompensas basadas en la cantidad de objetos atesorados.
Exportación Android
El juego fue preparado para ejecutarse correctamente en dispositivos Android. Se configuraron los ajustes del proyecto para:
- Plataforma Android (ARM64)
- Orientación horizontal (landscape)
- Scripting backend IL2CPP
- API mínima Android 7.0 (API 24)
Esto permite compilar el juego como archivo .apk desde Build Settings, y probarlo en teléfonos o tablets.
Autores: Alexander Forero, Manuel Pinzón y Jean Carlo Plata
Editor: Magister Ingeniero Carlos Iván Pinzón Romero
Codigo: UCMV-10
Universidad: Universidad Central
Referencias
Como hacer un Menú principal en Unity || Tutorial 2025. (2023, May 21). YouTube.de May 24, 2025, de https://www.youtube.com/watch?v=cuXoOKSZ00M
Caminiti, G. (2024, April 28). ¡Cómo Crear un Personaje en Unity 3D! (Fácil y Rápido). YouTube. de http://www.youtube.com/watch?v=FURegpjm9sY
LuisCanary [@LuisCanary]. (s.f.). Cómo hacer un TIMER en Unity 🕒💯 [Video]. YouTube. https://youtu.be/dgMImeoZG5w?si=nW4WF1f-DLBHDqO9