Lo que vamos a hacer a continuación es a partir del enemigo fijo que hemos creado, vamos a crear un nuevo enemigo, pero que tenga movimiento, que se acerque al player y se ponga en una posición cercana al player y le dispare. Vamos a crear una máquina de estado, un animator como un controlador de personaje el que tenemos aquí, y tendremos un nuevo estado que será el run. Y como parámetro será este, para crear este personaje vamos a utilizar un componente nuevo que servirá de ensayo, nos permite mover un personaje por encima de un escenario, por encima de un navigation, de forma sencilla, mediante un ensayo. Vamos a seleccionar el fixedAI, de hecho lo vamos a meter entre los prefab. Vamos a duplicar el fixedAI, todavía no tiene el nombre. Vamos a ver, movementAI y el fixedAI animator me da resultado. Y para jugar el movementAI animator Vamos a ver, y ahora el animator y hemos dicho que vamos a usar un nuevo parámetro que va a ser el fixed tipo float. Y vamos a tener un nuevo estado que va a ser el run. [AUDIO EN BLANCO] [AUDIO EN BLANCO] Si la velocidad es mayor que el valor, 0,5, pasamos a run. Si la velocidad es menor que 0,5, pasamos al, ir de nuevo de entrar a dead. Pasaremos si dead está true le he marcado la animación de run y fin de run. Vamos a ver la animación, aquí vamos a coger [INAUDIBLE] Vamos a utilizar la animación que hemos dado al player. [AUDIO_EN_BLANCO] Vamos a rodar la repetición. [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] Vale. Así que esto se va a ver así. Y ahora tenemos que crear un movementAI con un nuevo componente, que va a ser un movementAI control, vamos a terminar un componente. Vamos a crear el nuevo componente que va a ser el movementAI. Aquí, aquí, aplicamos la función de controller, lo llamamos movementAI controller. MovementAI controller se basa en el fixedAI controller y le hemos dicho que vamos a añadirle un nav mesh contoller, nav mesh agent. Le damos editar y le damos agent, por tanto si añadimos la [INAUDIBLE] ahí entonces, vamos a crear una variable que nos diga si hemos establecido nuestro destino, y por defecto realmente estará un 8. Hemos establecido un destino. Ahora tenemos un destino al que queremos ir, y queremos ir a una posición cercana del player dentro de unos ángulos. Vamos a crear una variable de miembro, que va a ser ángulo, voy a hacer por aquí de 40 grados y una distancia una base de 5 metros y un random distance, y vamos a poner pista de 3, es la posición del plano. Para el aleatorio los ángulos, este ángulo con la exponente correcta en este caso. Pasamos a radianes, voy a calcular una distancia, se basará en el distance a un random value por random distance. [AUDIO_EN_BLANCO] Y el destino final será la posición del player más vector 3 coseno del ángulo, a 0.0f. [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] Y al coseno. Es decir si el ángulo es 0, será 90, el ángulo de 90 será 1, por tanto en z cuando vamos a la escena estará por aquí. Es el f x estando en z, en ángulo 0 por aquí. El ángulo 40 se hace aquí y el ángulo menos 40 se hace aquí. Entonces esto lo multiplico por la distancia, entonces ahí tendré el destino lo voy a guardar, guardar y hacer el número de vuelta. [AUDIO_EN_BLANCO] Voy a decirle que el destino es un set igual a true. Destination, vale, lo que voy a decir al nav mesh agent, set destination, m destination. Y metemos la dirección al nav mesh agent, y tenemos que decirle al nav mesh agent que actualice la rotación, que él la actualice, pero que no actualice la posición. La posición se mueve mediante el animador. [AUDIO_EN_BLANCO] Entonces de esa manera se irá a una posición delta del player. Vale. Por último voy a poner, voy a activar el debug. [AUDIO_EN_BLANCO] Una línea. [AUDIO_EN_BLANCO] Una línea hacia donde va el player, perdón el enemigo de color rojo. En posición vertical, entonces le voy a dar a terrain. [AUDIO_EN_BLANCO] Entonces creamos el componente, un aim número 2, vale. [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] Así, ahí, runner y le voy a crear un prefab, que va a ser el mismo que utilizamos con el otro enemigo. [AUDIO_EN_BLANCO] Le voy a decir, dónde está el output del arma. [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] Vale. [AUDIO_EN_BLANCO] Y hay una cosa dentro del prefab. Y esa es la posición a la que llega el objetivo. iii el player y le tenemos que decir la velocidad, el animator, float movement. Navmeshagent desiredvelocity, magnitud. Vale. Es así que hicimos el movimiento que tiene la velocidad que tiene iii. Lo vamos a ejecutar, se mueve, pero ha pasado iii. iii controller modificado en iii iii. Solo haremos esto, Navmeshagent desiredvelocity [AUDIO EN BLANCO] [AUDIO EN BLANCO] [AUDIO EN BLANCO] En ese caso [INAUDIBLE] Vale, si no vamos a ver si esto funciona. [AUDIO EN BLANCO] Vemos que empieza a dar vueltas alrededor de la escena. iii y se pare al destino y vamos a ver lo siguiente. Podemos dar vueltas alrededor del destino, donde vamos a poner iii Angular speed 300 y en stoping distance le vamos a poner, un metro que separe. iii [INAUDIBLE] [INAUDIBLE] Claro, ahora vemos la fase como hemos dicho previamente vamos a crear un prefab de nuestro dominio iii, y vamos a hacer otra cosa más. [INAUDIBLE] que si la bala que suena con un enemigo, cojemos el enemigo, el componente iii de controller [AUDIO EN BLANCO] Entonces esto si lo hacemos con el movement control no va a funcionar. Entonces lo que vamos a hacer va a ser una clase base. [AUDIO EN BLANCO] La voy a derivar del modo dominio, a tener el método kill y lo hace virtual. Tiene que ser iii y lo que voy a hacer. [AUDIO EN BLANCO] Sobreescribirlo en la clase movement AI controller y voy a derivar ahora de la ai controller iii y esto mismo, puedo decir a la clase controller va a derivarle en el fixed AI controller y va ser sobre iii. Y entonces ahora lo único que tengo que hacer es el ammo iii, lo pongo como AI controller, y lo mando, entonces ahora si lo ejecuto. [INAUDIBLE] [AUDIO EN BLANCO]