[AUDIO EN BLANCO] Una vez que hemos mejorado el diseño de nuestro nivel, vamos a hacer que cuando nos maten reinicie la partida al principio del nivel. Entonces, para ello vamos a reiniciar todos los elementos del juego. O sea, es decir, la cámara tiene que ir al estado inicial. El enemigo, los enemigos, perdón, y el player, los dos. Vamos a empezar por el player, por ejemplo, lo que vamos a hacer es. [AUDIO EN BLANCO] [AUDIO EN BLANCO] [AUDIO EN BLANCO] Cuando nos maten, si estamos en el estado de bool, si la animación que tenemos puesta es la de AI, de muerte. [AUDIO EN BLANCO] [AUDIO EN BLANCO] Tenemos la animación de muerte, el estado de muerte, mejor dicho. [AUDIO EN BLANCO] Vamos a hacer que cuando termine la animación. [AUDIO EN BLANCO] [AUDIO EN BLANCO] Vamos a sacar CurrentAnimatorStateInfo. [AUDIO EN BLANCO] [AUDIO EN BLANCO] En la capa 0, si Hash name, nameHash, es igual al DeadIdAnimation y. [AUDIO EN BLANCO] NormalizedTime mayor o igual que 1.0f, en ese caso RestartGame, return. Entonces, el Restart que habíamos hecho, se va a llamar RestartGame. Entonces, en el Kill, lo que haremos es decrementar en uno sus vidas, lo de arriba ahorita está bien. En el kill ponemos la animación de Dead, y cuando termine la animación de Dead, decrementaremos la vida y pondremos que no está muerto, que el CurrentShootTime es 0, que el granadas es 2, que es el inicial. [AUDIO EN BLANCO] Y lo que haremos es ponerlo en la posición inicial. Entonces, para ponerlo en la posición inicial lo que voy a hacer es crear una posición, una variable de posición StartPosition, y una flotación quartenion. Quaternion. StartRotation. Entonces, lo que voy a hacer es cuando arranco, copio mi posición y rotación. Y cuando reinicio, lo voy a hacer, lo ajusto otra vez. En RestartGame, voy a copiar la posición del transform, la posición del startPosition en transform, y lo mismo de la rotación; y lo que voy a hacer también es eliminar el contenedor de balas. Le voy a decir oye, reiníciate. Con esto se reiniciará el player y reiniciaremos las balas del player. Hemos dicho si se reinicia el juego, tenemos que reiniciar también el, la cámara y el y los enemigos. Entonces vamos a llamar al GameController, y le vamos a decir RestartGame. Entonces, con el RestartGame del GameControl, lo que voy a decir es a la cámara y a los enemigos que se reinicien. Es decir, a la cámara Component CamaraController, RestartGame y le vamos a decir a los enemigos que se reinicien. Entonces, para decírselo a todos los enemigos, lo que voy a hacer es una lista de enemigos. [AUDIO EN BLANCO] Del Generic y le voy a decir. [AUDIO EN BLANCO] Al AIController de inteligencia artificial que RestartGame. Entonces, a los enemigos, no, voy a empezar por la cámara primero. Entonces, para la cámara voy a coger nuestra [INAUDIBLE] de player. Cuando arranca, deja su posición. Ese MinZCamera, va a ser StartMinZCamera. Esta es lo que necesito. Es con el tipo float. Entonces, cuando hago el Restart, RestartGame, le puedo decir a la posición de la cámara que ya está en position, y MinZCamera es igual al StartMinZCamera, y tengo que darle el valor aquí. El Start me guardó esos valores. [AUDIO EN BLANCO] Vale. Entonces con esto reiniciaremos la cámara. Y hemos dicho que la otra parte que nos falta, la otra falta que, la otra parte que nos falta es reiniciar, reinicializar los controladores, los enemigos. Entonces, para ello yo voy a hacer dos cosas, por un lado avisarle al GameController cuando creo un enemigo. ¿Vale? Decirle oye, añádeme un enemigo. Le voy a crear un método, pues, va ser Public void AddEnemy, iniciar el controller AIController. Entonces ponemos enemigos y añadir ese AIController. Entonces, cada vez que creo un enemigo, en el Start le voy a decir a la cámara. [AUDIO EN BLANCO] [AUDIO EN BLANCO] [AUDIO EN BLANCO] Al GameController que me añada a mí como enemigo que me haga esto. Todo esto lo vamos a hacer tanto para los Fixer como para los Movement. [AUDIO EN BLANCO] Entonces, con eso conseguiremos añadir el enemigo a la cámara, al controlador del juego. Entonces, una vez que hemos hecho esto, cuando nos maten, tenemos que reiniciar el juego. Entonces, tenemos que llamar al método RestartGame de cada uno de los enemigos. Entonces, como el controlador del juego no entiende de Fixer o de Movement de AIController, él de lo que entiende es de AIController, vamos a subir un método virtual dentro de la clase AIController, como hicimos con el método virtual de Kill, y le vamos a llamar RestartGame, y lo vamos a sobreescribir en cada uno de los enemigos. Entonces vamos ahora a escribir en el movement y en el life. Entonces en el movement lo que vamos a hacer es cuando, vamos a hacer primero el shoot que es más sencillo. Entonces vamos a ver en el fixed AI lo mismo que hemos hecho antes con el player. Le damos una posición, esto es position, tengo la posición. [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] Le damos una posición inicial, cuando arranca el personaje, vale, y cuando nos matan hacemos justo lo inverso. Luego en caso de que reinicie el juego, lo que hacemos es animator, set bool, dead, false. [AUDIO_EN_BLANCO] Llamamos al método calc next shoot time, le decimos que elimine nuestras balas del contenedor. [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] Volvemos a activar el character controller. [AUDIO_EN_BLANCO] Vale, y esto sería todo. Pues esto que hemos hecho, lo vamos a hacer también con el de movement, añadiéndole las cosas. Entonces en el de movement vamos a crear el método, vamos a crear nuestras variables. [AUDIO_EN_BLANCO] Vamos a meter la parte de esta, le dimos la posición y la anotación, cuando se inicie se guardará esa posición y esa anotación. Entonces aquí tenemos que añadir el destination set. Nos activamos, nos establecimos, para que se establezca cuando arranque. Al dar mix agent le vamos a poner. [AUDIO_EN_BLANCO] Que se pare, y este lo vamos a coger. Vale, esto sería todo. Vale, grabamos entonces lo que nos faltará, está bien y no nos falta nada, vamos al juego y vamos a probarlo. [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] Está dejando porque se ha creado previamente, vamos a empezar aquí. [AUDIO_EN_BLANCO] El controller no existe, vámonos a start, vamos a coger la cámara principal. Tenemos un componente game controller, y le decimos que empiece la parte. Y ahora no tenemos la cosa, cuando no tenemos la variable del enemigo y sí hay que construirla. Esta, ahí está, vamos a a un sim. Vamos a probar, ahora vemos que pone el movement y da un error, vamos a alterar algunos valores. [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] Ahora, eso quiere decir que tenemos un problema de que se está creando ante los enemigos que hay que recuperar, en ese sentido lo vamos a poner. [AUDIO_EN_BLANCO] Vamos ahora a probar, vale, ahora está todo okey parece ser. Vamos a ver si nos matan. [AUDIO_EN_BLANCO] Me matan, termino la animación de muerte y luego reiniciamos la partida. Sin embargo nuestro player. [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] Vale, el problema está. [AUDIO_EN_BLANCO] Nuestro player está en la animación de dead. Entonces el animator se ha creado en la animación de nuestro player. Tenemos que decirle funciona a posición, voy a idle, cuando dead, ahora falso. [AUDIO_EN_BLANCO] Lo vamos a poner a un tiempo de transición 0. [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] Bien, entonces si esto es correcto, hay tenemos nuestro player. [AUDIO_EN_BLANCO] Le hemos quitado una vida, y se ha reiniciado. [AUDIO_EN_BLANCO] A nuestros enemigos les ha pasado lo mismo que con el player. De dead no vuelve al estado de dead. Entonces vamos a finalizar partida, y vamos a los objetivos, controlador, vamos a crear un lazo a idle. Y va a pasar nuestra transición cuando dead, sea falso. Y en el movement idle, nos está pasando lo mismo, entonces entro al sitio, dead, falso, vale. [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] Voy a hacer que me maten ahora, y reinicio la partida. Bien, vienen dos minas, vamos a ver si se van a reiniciar correctamente los enemigos, parece que sí, vale. [AUDIO_EN_BLANCO] Vamos a comprobar que el otro movimiento se ha reiniciado correctamente. [AUDIO_EN_BLANCO] [AUDIO_EN_BLANCO] Vamos a ver qué hace ese. [AUDIO_EN_BLANCO] Vale, entonces lo que voy a hacer es que si me matan, me quedo sin vida, vuelvo al menú principal. Entonces lo que voy a hacer con el código, simplemente, le doy al player controller como hemos llamado al restart. Lo que voy a hacer es llamar al restart si las vidas igual que 0, me quedo sin vidas. Le voy a decir al application que cargue el nivel, en menú scene. Entonces con esto conseguiremos el menú completo. Para hacerlo rápido, estamos más rápido. Voy a meterle al player, lo voy a meter solo una vida, o sea va a tener 0 vidas, 0 reintentos, y como todo pudiéramos tener vivos. Ya a que me maten, tendré que ir al menú principal, venimos y ha agarrado así un original, vale. Entonces le voy a dejar tres intentos para la escena. [AUDIO_EN_BLANCO]