Tipo de proyecto:
Proyecto de la Universidad / Desarrollado en un equipo de 3 personas
Desarrollado en:
Unity 2021 / Programado en C#
Mi rol en el proyecto:
Programador general / Gameplay / UI
Jugabilidad y mecánicas principales
Sin duda la parte más importante de un videojuego de plataformas es el movimiento del personaje, que funciona mediante el Update que inicia comparando si el personaje Chip está saludando o muerto y por lo tanto no puede moverse, después ejecuta una función de movimiento dependiendo de si está en el suelo o subiendo las escaleras. Ya que el juego es AR y está hecho para ser visto desde diferentes perspectivas según el jugador se mueva, la función de movimiento inicia tomando la dirección de la cámara para saber cual es su frente para avanzar, después se compara si el valor de movimiento es mayor a cero para animar al personaje y se aplica la fuerza de la dirección al jugador, por último se establece la rotación siempre hacia donde está avanzando mediante Quaternions.
La función de subir escaleras inicia estableciendo el valor de XZ en 0 ya que este movimiento es únicamente vertical, después compara si el vector de movimiento no es igual a 0 y aplica el Trigger a la animación, luego de esto aplica la fuerza al RigidBody para mover al personaje y comparar si la velocidad es igual a 0 para mantener la posición, al final de la función se realiza la misma operación para mantener la dirección del jugador según su input, por último la fución de PerderJuego se llama cuando Chip recibe cualquier tipo de daño, iniciando la secuencia que reinicia el juego.
Para activar y desactivar el movimiento del jugador por las escaleras estas tienen un OnTriggerEnter que al detectar al jugador activa el botón de escaleras en el UI y su variable booleana de EnEscalera en su Script para activar su movimiento vertical, el OnTriggerExit compara si el jugador salió y convierte la variable booleana en falsa, por último cambia el icono de escaleras por el de interacción básica y cambia la animación.
Otro de los aspectos más importantes de un videojuego de plataformas son las trampas y los obstáculos, comenzando con las Tijeras que son una de las más peligrosas, las cuales constantemente abren y cierran esperando que el jugador pase en el momento exacto, el OnTriggerEnter compara si el jugador entra en el rango de corte de las Tijeras y vuelve verdadero el Bool, luego compara si la Tijera está cerrada y por lo tanto acaba de cortar, y si esto es verdadero se reproduce un sonido y el jugador pierde el juego. El OnTriggerExit simplemente detecta si el jugador salió del rango y vuelve falso el Bool, por último las funciones Abrir y Cerrar son Eventos, Abrir vuelve el Bool de TijeraCerrada falso y Cerrar verdadero, comparando si el jugador está dentro al ejecutar la función para matarlo y por lo tanto hacerlo perder el nivel.
Una trampa similar son los Pinchos, que en las función Subir actualiza el Bool de Arriba y compara si el jugador está dentro del área, si esto es verdadero reproduce un sonido y llama a la función PerderJuego, el Evento Bajar simplemente actualiza el Bool de Arriba como falso. El OnTriggerEnter compara si el jugador entra en el rango de los Pinchos y vuelve este Bool verdadero, después si los Pinchos acaban de subir y por lo tanto están arriba cuando el jugador entra se reproduce un sonido y se llama a la función PerderJuego, por último OnTriggerExit compara si el jugador sale del área y vuelve este Bool falso.
Un componente extra para las trampas es el activador, el cual es un área con un Collider, que en su OnTriggerEnter compara si el jugador entró en la zona y dependiendo de un Bool activa un Disparador de Flechas o una Estalactita, activando la animación para el Disparador o estableciendo las condiciones para que la Estalactita caiga del techo activando su gravedad y su Trigger.
La función del Disparador se ejecuta en un Evento en su animación, este inicia reproduciendo un sonido y después instanciando la Flecha que dispara, estableciendo su rotación, posición y su objetivo.
La Flecha tiene un Update para su movimiento mediante un Translate, la función TomarObjetivo es llamada por el Disparador al instanciar la Flecha, por último OnTriggerEnter compara si entra en contacto con el jugador, haciéndole perder el juego.
La Estalactita únicamente cuenta con un OnTriggerEnter que compara si se hizo contacto con el jugador, si esto es verdadero reproduce un sonido y llama la función PerderJuego, la Estalactita cae desde el techo mediante su RigidBody.
Una interacción importante para el juego son las Palancas, las cuales deben ser accionadas por el jugador para desbloquar áreas del nivel y poder pasar, estas tienen un OnTriggerEnter que compara que palanca es la que activó el Trigger, además de esto cambia el UI en el botón de interacción por el de Palanca, en el OnTriggerExit realiza la misma comparación para reestablecer el icono de interacción básica del jugador.
Como extra la mayoría de elementos visuales de Dioramaze tienen la propiedad de mirar continuamente a la cámara para que siempre se vean bien y orientados en perspectiva, esto se aplica en el Update que llama a la función MirarACamara que calcula la posición de la cámara para luego hacer que el objeto mire hacia esa dirección usando Quaternions con LookRotation.