miércoles, 5 de noviembre de 2014

Ataque del personaje: detección de colisiones

Una vez que el protagonista lanza llamaradas, y que el veneno se mueve y embiste falta que eso sirva para algo. Hay que detectar si el veneno consigue golpear al protagonista, o la llama al veneno, y en ese caso bajar vida, hacer ver al jugador que eso ha sucedido, etc.

En este caso es un poco más fácil que en la versión final, ya que ahora tenemos fuego, externo al cuerpo del protagonista, partículas que pueden chocar o no con el veneno. Aquí las reglas son claras, si una partícula de fuego colisiona con el veneno, sufre daño. Si el protagonista colisiona con el veneno, el protagonista sufre daño. Pero en el caso de atacar con espada, si forma parte de la malla del personaje y van las animaciones juntas tendré problemas. ¿Cómo detectas si al atacar has dado con la espada o con otra parte del cuerpo al veneno? Si estás atacando y das con la espada es normal que el veneno sufra daño, pero ¿Y si el veneno embiste y choca contra la espada del héroe quieto? Sería muy raro que dejando al personaje quieto el veneno se fuera dañando al chocarse contra la espada. Con todo esto tendré que pegarme, ahora voy a volver a lo que ya he resuelto.


Sphere collider
El sphere collider no cubre el pico de arriba, pero se ajusta bastante bien.


Por un lado el sistema de partículas tiene una sección para las colisiones. Las activo, pongo que sean en espacio de mundo, que mande mensaje de colisión, y pongo una máscara para que solo calcule colisiones contra los enemigos.

De esta forma las partículas notifican colisiones al veneno, y en el script de IA del veneno puedo tener un método OnParticleCollision con el que ejecutar lo necesario. En este caso bajar la vida del veneno, hacer que se menee y si ya está en las últimas que las palme. Puedo utilizar el método onParticleCollision, ya que las únicas partículas del juego que producen colisiones son las del fuego que son dañinas, sino tendría que hacer comprobaciones de qué sistema de partículas las emite o ponerlas en una capa o un tag.

Por otro lado si el veneno choca contra el héroe también lo detecto desde la inteligencia del veneno. Se necesita también que las partes del personajes tengan Rigidbody y estén marcadas como kinemáticas. Funciona mejor así, ya que el veneno tiene un sphere collider, y es más fácil detectar allí las colisiones, además que ya comprobaba como parte de la inteligencia artificial los choques con paredes por ejemplo. Así que cuando el veneno detecta colisión con el personaje informa al persoje de la colisión, y ya es el héroe quien activa el proceso de bajar salud, mostrar por pantalla que está herido, reproducir sonido...

No hay comentarios :

Publicar un comentario