El comportamiento del enemigo, el
veneno, está formado por una serie de animaciones y funciones
pseudoaleatórias, es tan sencillo que no me he atrevido a titular al
artículo como inteligencia artificial, creo que es abusar del
término la chorrada que yo he hecho.
Lo primero es que no todos los enemigos
se mueven y evalúan su inteligencia artificial todo el tiempo. Solo
lo hacen los que están a una cierta distancia del héroe. Cada
segundo se evalúa la distancia de todos los venenos vivos al
personaje, y si están a una cierta distancia se activan y sino se
desactivan. Esto, de estar bien hecho no debería afectar mucho a la
hora de jugar, ya que los personajes que no vemos en pantalla ni
están cerca, nos da igual si se mueven o están quietos, y así
vamos ahorrando procesamiento de comportamiento.
La animación interna del veneno es muy
sencilla y procedural, no lleva animaciones. Solo se mueve
verticalmente un poco, como un bamboleo. Esto le da un poco de
sensación de ligereza y de movimiento, no es algo suspendido en el
aire, fijo, sino que vuela.
Y la parte que la mayor parte de la
gente consideraría IA: Las rutinas de decisión se ejecutan 2 veces
por segundo. Hace 2 cosas: la primera comprobar la altura del suelo.
El bicho flota en el aire, pero a una cierta altura del suelo, y
necesita saber la altura del suelo, y lo hace con un raycast, por eso
no lo hago en cada frame. Esto provoca que si hay durante ese medio
segundo ha ido avanzando por una cuesta de repente pegue un subidón.
Lo voy a arreglar cambiando la forma de hacer el bamboleo vertical,
para que siempre sea suave. La segunda cosa es decidir si ataca o no
(en el caso de estar en reposo), que se decide con un número
aleatorio. Y si ataca mira donde está el jugador y va a por él,
carga directamente, spear. Cada 2 segundos actualiza la posición del
personaje, sino, si estabas lejos, el enemigo podía venir a tu
encuentro y en lo que llegaba tu ya estabas en Sebastopol, y quedaba
raro. Una vez que el veneno llega a destino o colisiona con el
personaje, traza un punto al azar de retirada y se dirige allí. Al
retirarse en una dirección al azar se hace más difícil adivinar
sus movimientos, si tienes varios venenos, parece que revolotean un
poco alrededor. Si el veneno es herido hay una posibilidad al azar de
que se enfade, nos muestre su cara mala, y en ese estado es más
agresivo (más probabilidad de ataque) y es más rápido.
Con esto, aun sin las mejoras que he
ido proponiendo durante el artículo se consigue un comportamiento
bastante aceptable. Me gustaría añadir un segundo tipo de enemigo,
inicial, más fácil que se mueva en patrones fijos, sin atacar al
personaje y en partes más avanzadas se mezclen los dos tipos de
enemigo.
No hay comentarios :
Publicar un comentario