El enemigo fijo le vamos a añadir 2 componentes, primero un character controller. Vamos acá a colocarlo. Y, por otro lado, vamos a añadirle un componente nuevo que va a ser un fixed AI controller. voy a crearlo en create game, Fixed AI controller, y se lo vamos a agregar al enemigo. Ahora voy a implementar este código. Entonces este plano lo único que va a hacer estar encarado siempre hacia el extremo al que está encarado el player, por un lado, y por otro disparará a x segundos. Entonces, Vamos a digitar por un lado el player. [AUDIO EN BLANCO] Por otro lado les daremos el Ammo Prefab. [AUDIO EN BLANCO] Por un lado necesitaremos el game controller y el Ammo Container, y necesitaremos un tiempo base, el tiempo para disparar y un Random Time, para que no dispare siempre en ningún momento. Es decir, le diremos por ejemplo, que como mínimo necesitará 5 cinco segundos más 3 aleatorios, es decir, entre 5 y 8 segundos cada 5 u 8 segundos disparará. Entonces, vamos a agregar un método que se llamará CalcNextShootTime, que simplemente será mBaseTimetoShoot más Random.value por m_randomtimetoshoot. Calcula el tiempo de 7 disparos. Bien, si m_Current time lo voy incrementando se vuelve delta time y si m_current time es igual que 0.0 shoot, dispara. Bien, el disparo será parte de la parte de disparar, recalculará el siguiente disparo. Entonces, para disparar necesitamos el Ammo container, AddAmmo. Tenemos que pasar el prefab del Ammo, el ammo prefab. La posición de donde sale la bala, hemos dicho que será el Ammo Output, sitio y la dirección que será mi Forward. Entonces el Ammo transform todavía no está agregado aquí, tengo que crearlo, vale. Voy a crear un método, que me mate que lo que hará será Animator Set bool. Dead true. Voy a agregar animator que lo diciéndole mi componente animator. Entonces, en cada update lo haremos es si hay un animator con to get bool, Dead, return. No quiero que haga nada. También, quiero que si el player no está en la pantalla if is on screen, es decir, si no está en pantalla, no quiero que hagamos nada. [AUDIO EN BLANCO] Para saber si estoy en pantalla simplemente debo dejar el camera main y el World to viewport point. De paso la paso a mi posición y esto me lleva a un vector 3, donde la x y la y es posición de pantalla. Si l position.if mayor o igual que 0, 0 y l position.y mayor o igual que 1 quiere decir que estoy en pantalla. Si no, no estoy en pantalla. Entonces, recapitulando, Se actualizan a la c, si estoy muerto, no hago nada, si no estoy en pantalla, no hago nada, caso contrario voy a ir incrementando el current time hasta que llegue a 0. Llega a 0 disparo, añado una bala al contenedor de balas, mi contenedor de balas y calculo la próxima bala. Falta encarar al player, o sea el enemigo contra el player. Hubo algún error, [AUDIO EN BLANCO] Vale, entonces voy a encarar al enemigo contra el player. Para encararlo, simplemente voy a coger mi vector dirección entre el player y mi posición. Normalizo, y le digo al transform que mi forward es este vector director. Lo que voy a hacer es que el eje y lo voy a negar, lo voy a dejar a 0 para que solo se haga el vector de dirección respecto al plano x z, y player controller lo tengo que inicializar al player controller que lo tiene la cámara. La cámara punto main tiene GetComponent, Camera Controller que tiene el player controller. Player transform, que es el GameObject getcomponent, player controller. Bueno, si lo he hecho bien vamos a Fixed AI, vamos a añadir la bala, Ammo Enemy y el output que hemos dicho que va a estar [AUDIO EN BLANCO] Ammo del arma, bien. Vamos a ver qué pasa. [AUDIO EN BLANCO] [AUDIO EN BLANCO] Hemos puesto algún error. [AUDIO EN BLANCO] A la hora de construir AmmoContainer, por eso lo he asignado. El AmmoContainer le tengo que decir que lo coja de mi mismo. [AUDIO EN BLANCO] Vamos ahora a probar. [AUDIO EN BLANCO] Y ahí ya ha disparado. [AUDIO EN BLANCO] Y vuelve a disparar. Vale, entonces lo siguiente que vamos a hacer es 2 cosas, la bala en el momento de colisión encuentra con algo Que desaparezca. Si colisiona con el player que lo mate. Si yo disparo y colisiono y soy capaz de dispararle, que colisione contra alguien y lo mate. Entonces para ello vamos a ir a la clase ammo. Si colisiona contra el player lo mato y, a parte de matarlo. [AUDIO_EN_BLANCO] Me destruyo a mí mismo. Si contra el que colisiono, el tanque es de tipo enemy fixed id, voy a poner enemy, y las balas de tipo player. [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] Le digo al fixed controller que lo mate. Entonces para matarlo tengo que hacer el método público, establezco el estado dead y el character controller lo voy a deshabilitar, para que no, para que no nos deslicemos sobre él. Para que no tengamos colisión con un character controler, el personaje que ya está muerto. Vamos a comprobar, vamos a poner un debug log y lo mismo en el player. [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] Vamos a ver qué pasa. Vale. Vamos a ver si podemos, si nos mata primero. Vale. Vemos la animación. Vemos que muere. Luego vamos a poner que en el final se quede quieta la animación, que no haga el bucle. Entonces el player elemento. [AUDIO_EN_BLANCO] Vamos a quitar de momento la transición. Ahí no vuelvo de dead a live cuando termine. Vamos a comprobar. Disparan, nos matan y nos quedamos muertos. Ahora, si estamos muriéndonos no podemos ni movernos, ni transformarnos, ni mover la rotación ni nada. No tiene que hacer nada. Entonces en el player si m animator get bool dead return. Si estamos muertos. Vale. Entonces vamos a comprobar si podemos matar a los enemigos. [AUDIO_EN_BLANCO] Ahí muere. Perfecto. Y no colisionamos con él. Perfecto. [AUDIO_EN_BLANCO] Vale. Por útlimo a nivel de físicas, vamos a mirar una cosa más que es dentro de project settings tenemos la parte de física. Y aquí tenemos las capas que colisionan con qué capas. Entonces, lo que vamos a hacer es que las balas de enemigos no colisionen con las balas del player ni con las propias balas de enemigos. Que las balas del player no colisionen con las propias balas del player. Es decir si nosotros disparamos una bala y el enemigo nos dispara otra bala esta es colisionada con la otra, entonces desaparecería. No nos interesa. Nos interesa que las balas no colisionen unas con otras. También nos interesa que los ammo enemigos no colisionen con la física, ni colisionen las balas del player con la física. Player, physics. ¿Y qué es lo que te cuento? Solo esto hacemos. Vale. Con esto conseguimos que no se rompa la magia.