‫Hola y bienvenido de nuevo.
‫Ahora hemos creado un tanque que puede moverse e incluso girar su torreta.
‫Y ahora estamos listos para crear una clase de torre que pueda heredar parte de la funcionalidad que el
‫tanque heredó de la clase base de pod.
‫Ahora, una vez que hayamos creado una clase de torre, vamos a anular la función de tic para poder
‫rotar su torreta también.
‫Así que nuestro objetivo aquí es hacer que las torretas giren para que siempre estén mirando al tanque.
‫De esta manera, cuando comiencen a disparar proyectiles, a veces golpearán el tanque siempre que el tanque
‫no se mueva rápidamente.
‫Y también vamos a averiguar cómo podemos conseguir el tanque --.
‫De esa manera podemos apuntar al tanque y girar la torreta de las torres hacia el tanque.
‫Nos estamos preparando para un combate de proyectiles.
‫Así que estoy aquí en el editor y voy a ir a nuestra carpeta tune tanks donde están la base
‫y las clases de tanques.
‫Ahora, me gustaría crear una clase de torre basada en la clase base.
‫Ahora, la forma en que hicimos esto con la clase de tanque fue correcta.
‫Se hizo clic en la base y se seleccionó crear una clase de C++ derivada de una forma alternativa que consiste
‫en ir a herramientas y seleccionar una nueva clase de C++.
‫Y desde aquí podemos hacer clic en la pestaña que dice todas las clases y buscar base --.
‫Y aquí vemos nuestra clase base.
‫Si selecciono esto y hago clic en siguiente, ahora crearé una nueva clase basada en la base --.
‫Lo dejaré en el mismo camino que todas nuestras otras clases de C++ y lo llamaré torre.
‫Así que hagamos clic en Crear clase.
‫Así que aquí está mi nueva era de la torre y Tower Dot.
‫CP Ahora, lo primero que necesitamos es la función de tic porque la torre va a querer rotar su
‫torreta para mirar hacia --.
‫Así que vamos a anular la función de marca aquí.
‫Así que voy a hacer una nueva sección pública y vamos a escribir virtual void tick, que toma un valor
‫flotante llamado Delta Time, y esto es una anulación.
‫Ahora entraremos en más detalles sobre virtual y override en videos futuros, pero esencialmente estamos tomando la
‫función de marca heredada y creando una nueva implementación para ella.
‫Así que tomemos la función tick e implementémosla aquí en Tower CP.
‫Ahora necesitamos prefijar el nombre de la función tick con una torre y los dos puntos dobles.
‫Y como siempre, es una buena idea llamar a super tick y necesitamos pasar en tiempo Delta.
‫Ahora lo que me gustaría hacer aquí es rotar la torreta del tanque para que la torre amenace al tanque y
‫esté lista para disparar proyectiles.
‫Pero me gustaría hacer esto solo si el tanque está dentro del alcance.
‫Ahora, para saber si el tanque está o no dentro del alcance, necesitamos saber la distancia desde la torreta
‫hasta el tanque.
‫Ahora, aquí hay un pequeño artilugio que representa el origen del mundo.
‫En otras palabras, el punto en el espacio donde X, Y y Z son cero.
‫Ahora, cuando hablamos de la ubicación de un actor, estamos hablando del vector desde el origen hasta esa
‫ubicación.
‫Y siempre podemos obtener ese vector de ubicación usando obtener la ubicación del actor para que podamos obtener la ubicación de una
‫de las torres y la ubicación del tanque.
‫Y si conocemos esos dos lugares, podemos calcular la distancia entre ellos.
‫Ahora, podríamos hacer esto con matemáticas vectoriales, pero la clase de vectores F tiene una función llamada dist, y esta
‫función lleva a los vectores de ubicación y lo que devuelve es la distancia entre ellos.
‫Así que aquí en el archivo CP de la torre, en la función tick, voy a escribir un par de notas para que sepamos lo que
‫se supone que debemos hacer.
‫Primero, debemos encontrar la distancia al tanque después de verificar si el tanque está dentro del alcance y, si está
‫dentro del alcance, girar la torreta hacia el tanque.
‫Así que tenemos algunas cosas que hacer aquí.
‫Ahora, para encontrar la distancia al tanque, necesitamos agarrar el tanque.
‫Ahora, un buen lugar para hacerlo es Begin Play.
‫Entonces, además de la función de tic, sigamos adelante y anulemos Begin Play.
‫Ahora observe en el Tanque H, el comienzo del juego está en una sección protegida.
‫También lo mantendremos protegido en la torre.
‫Así que colocaremos la sección protegida justo debajo de la pública e implementaremos el inicio de reproducción justo debajo de la
‫marca.
‫Entonces, vayamos a Tower Dot, CP, implemente, comience a jugar, califique completamente el nombre de la función y, como
‫probablemente haya adivinado, lo llamamos Super Begin Play.
‫Ahora, para obtener el tanque y almacenarlo en una variable, necesitamos una variable de tipo tanque.
‫Así que vamos a colocar eso aquí en Towers H en una sección privada.
‫Ahora bien, esto va a ser un tanque A, es un puntero y simplemente podemos llamar a este tanque.
‫Y para evitar tener que incluir el Tanque H aquí, podemos declarar que hemos visto lo importante que
‫puede ser.
‫Así que ahora tenemos este puntero de tanque y si podemos averiguar cómo acceder al tanque, podemos guardarlo en nuestro puntero
‫de tanque aquí y comenzar a jugar.
‫Lo primero que voy a hacer es incluir el tanque H, de modo que podamos usar el tipo.
‫Entonces, ¿cómo accedemos al tanque?
‫Bueno, aquí está la documentación del motor irreal para una función útil llamada obtener el peón del jugador.
‫Existe en una estática de juego.
‫Así que como tengo esto abierto, voy a seguir adelante y copiar la inclusión para las estadísticas del juego y echar un
‫vistazo a la sintaxis.
‫Tiene dos entradas un objeto de contexto mundial.
‫Ya sabemos cómo manejar eso y un índice de jugadores.
‫Y como vimos para juegos de un solo jugador como el nuestro, el índice de jugador siempre será el jugador
‫cero y eso nos permitirá acceder al peón correspondiente al jugador cero.
‫Así que llamemos a esta función aquí en Tower Dot CP.
‫Voy a pegar la inclusión para sus estadísticas de juego y al comenzar a jugar voy a
‫configurar el tanque igual a sus estadísticas de juego para obtener el jugador, para el objeto de contexto mundial.
‫Puedo pasar esto y para el índice del jugador podemos pasar cero.
‫Ahora mira el ondulado rojo.
‫Dice que un valor de tipo peón no se puede asignar a una entidad de tipo tanque A.
‫Este es exactamente el mismo problema con el que nos encontramos cuando intentábamos llamar, obtener el controlador y almacenar el resultado
‫en un controlador de jugador A.
‫Un tanque es hijo de un peón, por lo que no podemos almacenar un tipo de padre en un puntero hijo.
‫Tenemos que.
‫Lo has adivinado, tenemos que lanzar.
‫Así que vamos a tomar el valor devuelto de esto y lo pondremos dentro de una llamada de función de conversión.
‫Así que vamos a decir cast y estamos lanzando a un tanque.
‫Y lo que vamos a pasar al elenco será esta llamada para conseguir un estanque de jugadores.
‫Así que vamos a poner eso justo ahí entre paréntesis.
‫Y tras el reparto tendremos acceso al tanque.
‫Ahora que tenemos acceso al tanque, podemos encontrar la distancia al tanque y una distancia es un flotador.
‫Entonces podemos hacer una variable flotante local llamada distancia.
‫Y a lo que vamos a igualarlo es al resultado de llamar a la función estática del vector F dist.
‫Ahora dist toma dos parámetros de entrada del vector tipo F.
‫Ahora queremos la distancia entre dos puntos en el espacio.
‫Uno es la ubicación de la torre.
‫Estamos en la clase de la torre, así que podemos pedir la ubicación del actor y eso nos da la ubicación de la torre.
‫Pero, ¿y el tanque?
‫Bueno, podemos llamar al tanque, obtener la ubicación del actor y ahora tenemos la distancia.
‫Ahora, el único problema es que estamos usando el puntero del tanque sin verificar primero para asegurarnos de que no
‫sea nulo.
‫Así que tenemos que decir if tank primero y luego podemos tomar esta llamada de función y arrastrarla aquí dentro de
‫la instrucción if.
‫Entonces, si el tanque es válido, podemos acceder a su ubicación con obtener la ubicación del actor.
‫Excelente.
‫Como estamos trabajando en esta declaración if, voy a mover estos otros comentarios aquí porque sabemos
‫que no podemos verificar si el tanque está dentro del rango, si el tanque ni siquiera es válido.
‫Así que me gustaría desafiarte a girar la torreta hacia el tanque.
‫Ahora, solo queremos hacer esto si el tanque está dentro del alcance, tenemos la distancia.
‫Así que ahora necesitamos una variable de alcance de fuego.
‫Así que cree un flotador llamado campo de tiro en la clase de torre y expóngalo con su propiedad.
‫Nos gustaría poder editar esto desde el editor.
‫Ahora vas a comprobar si el tanque está dentro del alcance.
‫Si se llama rotar torreta y rotar torreta necesita un vistazo al objetivo.
‫Vas a pasar en la ubicación de los tanques.
‫Así que pausa el video e implementa este comportamiento ahora.
‫Bueno.
‫Entonces necesitamos una variable de rango de fuego.
‫Así que aquí en la Torre H tenemos una sección privada.
‫Vamos a hacer un flotador.
‫Voy a llamar a este campo de tiro y voy a continuar e inicializarlo a un valor de,
‫digamos, 300 F.
‫Pero experimentaremos con esto porque será una propiedad suya.
‫Así que tu propiedad.
‫Y como me gustaría que todos los tanques tuvieran el mismo rango de fuego, voy a hacer esto y solo
‫por defecto.
‫De esa manera, solo podemos editarlo en el plano predeterminado.
‫Ahora, si hiciste la tuya editada en cualquier lugar o tal vez editaste solo una instancia, está totalmente bien.
‫Es realmente una cuestión de preferencia y podemos cambiarlo más tarde.
‫Voy a darle una categoría también y voy a llamar a esta categoría combate.
‫Vayamos a Tower CP y tenemos este siguiente punto aquí.
‫Verifique si el tanque está dentro del alcance, lo que significa que debemos verificar si la distancia es menor o
‫igual que el alcance del fuego.
‫Tenemos menor o igual que y no solo igual a, porque de un cuadro a otro, la distancia puede ser
‫mayor que el rango de tiro, un cuadro y menos que el rango de tiro en el siguiente cuadro pasando por completo el rango
‫de tiro.
‫Por lo tanto, es posible que nunca llegue a ser exactamente igual al rango de fuego.
‫De hecho, con valores de coma flotante, dos flotantes exactamente iguales son bastante raros.
‫Así que tenemos esto si marcamos y si llegamos al interior, eso significa que la distancia es menor o igual que el
‫alcance del fuego.
‫El tanque ahora está dentro del alcance, lo que significa que este comentario se puede mover allí mismo.
‫Ahora, si está dentro del alcance, gire la torreta hacia el tanque, eso significa que vamos a llamar a la función de rotación
‫de la torreta.
‫Esa es nuestra función protegida que ponemos en el pod base.
‫Ahora girar la torreta echa un vistazo al objetivo y necesitamos la ubicación del tanque.
‫Así que esa va a ser la ubicación del actor.
‫Y con eso ahora estamos llamando a girar la torreta solo si el tanque está dentro del alcance.
‫Así que vamos a compilar esto y ver cómo funciona.
‫Así que estamos de vuelta aquí en el editor y lo que tenemos que hacer es ir a planos, peones y encontrar una torreta
‫de peones BP y abrir el editor de planos completo.
‫Ahora, en la parte superior derecha, vemos el peón base de la clase principal, pero queremos que nuestra clase principal sea la torre para
‫que podamos ir a la configuración de la clase, la clase principal y buscar la torre y seleccionarla.
‫Ahora nuestra torreta de peones se basa en la clase torre.
‫Ahora veamos qué sucede cuando le damos al play.
‫Bien, entonces estoy moviendo el tanque.
‫No estamos dentro del alcance, así que no vemos ningún movimiento de las torres.
‫Pero si entro en rango, mira eso.
‫Ahora me están siguiendo y parece bastante amenazador.
‫Ahora 300 unidades no está tan lejos.
‫Entonces, lo que me gustaría hacer es editar esa distancia.
‫Así que desde aquí en BP Pawn Turret, voy a seleccionar yo mismo BP Pond Turret.
‫Y aquí está la sección de combate.
‫Voy a seguir adelante y establecer esto en alrededor de 700.
‫Ahora, si presiono reproducir, veré que no girarán mientras me muevo de regreso aquí.
‫Pero tan pronto como entro en rango, ahora me están mirando.
‫Perfecto.
‫En resumen, hemos creado la clase torre.
‫Ahora tenemos un enemigo para el tanque.
‫También rotamos la torreta de la torre hacia el tanque en la función de tic y solo lo hacemos si el tanque está
‫dentro del alcance de fuego.
‫También expusimos la variable de rango de fuego para que se pueda ajustar en el plano.
‫Estamos casi listos para el combate.
‫Comenzaremos a configurar eso en los próximos videos.
‫Te veré pronto.