GTA clon

Introducción

Este juego está desarrollado tomando como base el proyecto:

https://wordpress.com/post/diariodeunloco.org/535

Se han reutilizado scripts y assets del proyecto base. Otros han sido adaptados a los requisitos de la práctica, algunos actualizados y mejorados y se han creado scripts y assets nuevos para esta práctica.

Menú para iniciar partida y menú de opciones

He implementado un menú inicial con distintas opciones de configuración. Para ello he creado un panel con la componente “Layout gorup” para ordenar y colocar los elementos. Los submenús funcionan de la misma forma, con botones, opciones con sliders y opciones activables o des-activables. Los submenús son: Controls, gameplay y sound.

Controls: Opciones de control. Aquí se puede ver un esquema con los controles del juego.

Gameplay: Opciones de configuración de juego. En este menú se pueden escoger las configuraciones iniciales de la partida: El número de coches, el número de civiles y si se puede dañar a los civiles. La configuración se guarda en PlayerPrefs y se cargará al inicio de la partida para instanciar los objetos y configurar el script de “WeaponController”.

Sound: Opciones de configuración de sonido. Se puede controlar el nivel sonoro global, de la música o de los efectos. Mediante Audio Mixers, y sus variables expuestas, se controla todos los niveles de audio según sea necesario.

Ciudad con edificios, vegetación y zombis

La ciudad ha sido construida usando diferentes assets de la unity asset store.

Comportamiento de los zombis

En este punto he utilizado la IA de la PEC3. En ella ya programé el comportamiento de vagabundeo de los zombis. Desde el estado de “idle” busca una posición válida para calcular la ruta con los métodos del “NavMeshAgent”, también se comprueba que la ruta sea válida.

Una vez alcanzado el destino, el zombi espera una cantidad aleatoria de segundos hasta que pasa de nuevo a vagabundear eligiendo un nuevo punto aleatorio.

Si el jugador entra dentro del radio de detección del zombi, este empezará a correr hacia el jugador. Si el jugador huye, el zombi lo irá persiguiendo hasta la posición en la que salió de su radio de detección. Lo mismo pasará si detecta a un civil.

IA de los peatones

Para restringir el movimiento de los peatones a la acera he creado rutas con waypoints. Las rutas sirven tanto para restringir y controlar su movimiento como para instanciar a los peatones de forma aleatoria.

Para instanciar los peatones, el algoritmo escoge un waypoint aleatorio y calcula una posición aleatoria entre ese punto y el siguiente de la lista, interpola con un factor igualmente aleatorio y le instancia. Una vez instanciado se configura y se pasa al siguiente.

El movimiento se hace con NavMeshAgent usando las funciones habituales de la API.

Si el jugador dispara a un civil, este huirá hasta que se aleje del jugador. En ese momento volverán a su comportamiento normal.

Los vehículos funcionan igual salvo en el modo de instanciarse. Se carga una lista con todos los waypoints y se escoge uno aleatorio, se comprueba que sea válido y una vez instanciado el coche, el waypoint se elimina de la lista. Si algún waypoint ha fallado en la fase de comprobación, se eliminará de la lista igualmente para evitar repetirlo.

Los peatones huyen si detectan a un zombi. Si consiguen evadirlo volverán a deambular.

El algoritmo funciona igual que la detección del jugador por el zombi. Un trigger collider que avisa cuando entran en contacto y un sistema de etiquetas para filtrar y controlar el comportamiento según el activador del evento.

Coches y conducción

Los vehículos incorporan los scripts para su comportamiento automático y para ser conducidos por el jugador. Una vez el jugador pulsa la tecla de acción al estar cerca del vehículo, este dispara un evento que desactiva al jugador, lo coloca en el centro del coche y desactiva el control automático del vehículo. Ahora el jugador puede controlar el coche.

Cuando el jugador vuelve a pulsar la techa de acción, este saldrá del vehículo. Se vuelve a activar el jugador y el vehículo seguirá teniendo el control automático desactivado hasta el final de la partida, no se moverá.

Control de tráfico con semáforos

Los semáforos controlan el tráfico de forma automática. Su script de control controla el ciclo verde, ámbar y rojo con los tiempos de verde y ámbar especificados (el tiempo en rojo es el tiempo en verde más el tiempo en ámbar). Mediante coroutines se optimiza el código para evitar constantes consultas.

Los semáforos directamente no harán nada. Tienen que ser marcados como master para ejecutar el código del ciclo. El semáforo cambiará el color de los semáforos que se enlacen con él. En el inspector podemos añadir otros semáforos a las listas de sincronización en fase directa (si el master cambia a verde ellos también cambiarán) y fase inversa (si el master cambia a rojo ellos cambiarán a verde). De esta manera, un semáforo se encargará de dirigir el comportamiento de un cruce, incluso se pueden sincronizar varios cruces con un solo semáforo, según nos interese.

Para las luces he creado unos materiales con emisión y los he colocado en el prefab sin animación del semáforo, activándolos y desactivándolos mediante código del ciclo.

Mecánica de atropello peatones

Cuando un peatón muere, reaparece como un zombi a los pocos segundos. Si se quisiera limitar el comportamiento de resurrección a únicamente cuando son atacados por un zombi, únicamente habría que dejar el código que detecta quien ha hecho el daño y eliminar el código que permite la resurrección del atropello o por un ataque del jugador.

Mecánica de atropello zombies

Implementando la función “OnColliderEnter” en lugar de “OnTriggerEnter” podemos comprobar los tags y ejecutar el código que instancia la explosión y mata al objeto atropellado. En el caso de los civiles resucitarán como zombis después de unos segundos.

La detección de colisión tiene en cuenta la velocidad del vehículo, esto evitará que los civiles y zombis exploten cuando toquen un coche parado.

Armas recolectar

Ya implementado en la PEC2 y PEC3. El código utilizado es el de la PEC3 que ha mejorado desde la PEC2, no se han introducido más cambios en las armas o la mecánica de recolección.

Deja un comentario