‫Oye.
‫Bienvenido de nuevo.
‫Ahora sabemos que necesitamos obtener el resultado del golpe debajo del cursor.
‫Vamos a hablar un poco más sobre cómo funciona y qué significa en este video.
‫Entonces, nuestro objetivo es obtener los resultados de aciertos debajo del cursor y mostrar esta ubicación, y podemos hacerlo dibujando
‫una esfera de depuración.
‫También aprenderemos a hacerlo.
‫Así que hablemos de algo llamado resultado de éxito.
‫En los juegos a menudo querrás hacer algo como esto.
‫Tendremos un punto en el espacio.
‫Llamaremos a este punto inicio y tiene el vector tipo F y tendremos una ubicación final.
‫Este será también un punto en el espacio de vector tipo F.
‫Ahora digamos que nos gustaría dibujar una línea invisible desde el punto inicial hasta el punto final.
‫Y en el momento en que dibujamos esta línea, nos gustaría ver si hay algún objeto entre las
‫ubicaciones inicial y final.
‫Ahora, si los hay, entonces esta línea que estamos dibujando en el espacio va a golpear ese objeto.
‫En la superficie, cuando esto sucede, lo llamamos un evento de éxito.
‫Ahora, cuando dibujamos una línea invisible como esta, se llama realizar un trazado de línea.
‫Y cuando golpeamos algo, decimos que tenemos un rastro de golpe.
‫Ahora, si acertamos con algo y obtenemos un evento de acierto, entonces el acierto de rastreo almacena información en una estructura
‫llamada resultado de acierto.
‫Su tipo es resultado de hit F.
‫Ahora, la estructura de resultados de hit F contiene variables que almacenan información sobre el evento de hit,
‫incluida la ubicación de hit como un vector f en el espacio y el actor que golpeamos, entre otra información.
‫Ahora, cuando realizamos un seguimiento de línea, lo hacemos especificando un canal de colisión.
‫Por lo general, con los trazos de línea, elegimos el canal llamado visibilidad.
‫Existe una enumeración llamada E Collision Channel, y en esta enumeración hay una constante de enumeración llamada
‫visibilidad XY.
‫Este es uno de los parámetros que especificamos al realizar un seguimiento de línea.
‫Ahora, si especificamos el canal de visibilidad, eso significa que los objetos que están configurados para bloquear el canal
‫de visibilidad en su configuración de colisión registrarán eventos de impacto.
‫Cualquier objeto que no esté configurado para bloquear el canal de visibilidad no generará eventos de hit.
‫Ahora nos gustaría el resultado de la traza debajo del cursor.
‫Imagina que tenemos la pantalla aquí y aquí está nuestro cursor ahora.
‫En la punta de nuestro cursor, tenemos un punto en la pantalla cuando usamos la función para obtener el resultado del
‫golpe debajo del cursor.
‫Lo que sucede es que tenemos nuestra cámara y es posible que vea algunos objetos en el mundo, como el piso aquí.
‫Y estamos realizando un trazo de línea desde la cámara en el punto de la pantalla correspondiente a la ubicación
‫de nuestro cursor, y estamos disparando el trazo de línea directamente hacia el mundo.
‫Y si acertamos con algo, generaremos un evento de acierto y almacenaremos la información en una estructura de resultado de acierto.
‫Entonces, averigüemos cómo podemos hacer esto.
‫Estoy aquí en Tank CP y lo que me gustaría hacer es obtener el resultado del éxito debajo del cursor en cada cuadro, lo que significa
‫que necesitamos la función de marca.
‫Entonces, de nuevo, vamos a volver a la base y encontrar nuestra función de tic aquí.
‫Ahora no lo estamos usando para nada en el peón base, por lo que podemos mover esta función a la clase de tanque tal como
‫lo hicimos con Begin Play.
‫Así que resaltaré la declaración de la función junto con su comentario y la copiaré.
‫Y después de eso, eliminaré toda esta sección, pública y todo, y luego regresaré al Tanque H y aquí,
‫en la sección pública, pegaré la declaración de la función tick.
‫Ahora no lo estamos usando en el peón base, así que quitaré la función de tic del pont base.
‫CP Ahora se ha ido del peón base.
‫Ahora lo tenemos aquí como intención declarada, pero también necesitamos definir la función en tank.
‫CP Voy a hacerlo aquí en el tanque DHCP, justo debajo del componente de entrada del reproductor de configuración.
‫Así que vamos a decir tick nulo.
‫Se necesita un flotador llamado Delta Time.
‫Y ahí está nuestro cuerpo.
‫Ahora nuevamente, necesitamos un tanque justo antes de la función de marca, junto con el operador de resolución de alcance.
‫Y también necesitamos llamar a super tick y pasar en tiempo Delta.
‫Así que ahora tenemos una marca en la clase de tanque.
‫Lo que queremos hacer es obtener los resultados de acierto debajo del cursor.
‫Así es como lo hacemos.
‫La función que vamos a usar existe en el controlador del reproductor llamada obtener el resultado del golpe debajo del cursor.
‫Hemos estado hablando de esto.
‫Ahora aquí está la sintaxis.
‫Se necesita un canal de seguimiento.
‫Recuerde, necesitamos especificar un canal de rastreo y vamos a usar la visibilidad.
‫Ahora tenemos dos parámetros de entrada adicionales.
‫El primero es un bool llamado complejo de trazas B.
‫Hablaremos de lo que eso significa en un segundo.
‫Y el tercer parámetro de entrada es un resultado de acierto F.
‫Ahora voy a hacer clic en F hit result solo para ver este tipo aquí en la documentación.
‫Y si me desplazo hacia abajo, veremos algunas de las variables.
‫Uno de ellos se llama actor y su descripción dice Actor Hit by the Trace.
‫También tenemos este golpe de bloqueo B, que dice que indica si este golpe fue el resultado de una colisión de bloqueo.
‫Ahora, entre las otras variables, tenemos cosas como el punto de impacto.
‫Esta es la ubicación en el espacio donde realmente golpeamos algo.
‫Entonces, ¿por qué no seguimos adelante e intentamos llamar a esta función?
‫Primero queremos nuestro jugador, controlador y gracias a lo que hicimos aquí y comenzamos a jugar, tenemos
‫jugador, controlador, ref.
‫Ahora, lo primero que debemos hacer es verificar si la referencia del controlador del jugador es válida.
‫Siempre podemos pasar un puntero a una sentencia if.
‫Devolverá verdadero si el puntero en sí no es un puntero nulo.
‫Si es un puntero nulo, devolverá falso en una declaración if y nunca llegaremos al interior de la
‫declaración if.
‫Siempre es una buena idea verificar nuestros punteros y asegurarse de que no sean nulos antes de usarlos.
‫Ahora vamos a obtener nuestro jugador, la referencia del controlador y vamos a usar el operador de flecha
‫para llamar a la función, obtener el resultado del golpe debajo del cursor.
‫Ahora podemos ver con la ventana emergente que tenemos tres parámetros de entrada.
‫El primero es el canal de seguimiento.
‫Vamos a usar EA Collision Channel y si escribimos dos puntos, obtenemos un menú desplegable que nos muestra todas las
‫diferentes constantes de enumeración en la enumeración de EA Collision Channel.
‫Queremos usar visibilidad, así que vamos a escribir visibilidad XY para especificar que estamos usando el canal de
‫visibilidad.
‫Ahora, el siguiente parámetro se llama B Trace Complex y vamos a pasar falso a este.
‫Ahora discutiremos en unos minutos lo que esto significa.
‫Pero por ahora vamos a usar falso.
‫Ahora, para el tercer parámetro, necesitamos un resultado de éxito.
‫Esta es una estructura de resultado de acierto de tipo F.
‫Ahora, si pasa el cursor sobre esto, verá que el resultado de la coincidencia F se pasa como una referencia, como
‫lo indica el operador de referencia que parece un ampersand.
‫Ahora, por lo general, cuando pasa algo como referencia, es una referencia de costo, lo que significa que la
‫función no podrá cambiarlo.
‫Pero aquí estamos pasando un resultado de acierto F como una referencia no constante.
‫Esto es generalmente una pista de que la función está diseñada para cambiar este parámetro de entrada directamente.
‫Lo que va a hacer obtener el resultado de acierto bajo el cursor es completar esas variables en el resultado de acierto con información sobre
‫el resultado de acierto.
‫Esto significa que necesitamos pasar uno de estos resultados de f hit.
‫Vamos a crear una variable local aquí en el resultado de verificación de tipo F.
‫Y podemos llamar a este resultado de éxito y simplemente podemos pasar esta N como el tercer parámetro de entrada.
‫Ahora, después de haber llamado a esta función, este resultado de acierto se completará con datos sobre el seguimiento de
‫esta línea.
‫Por ejemplo, podemos acceder a hit result dot actor para obtener el actor que fue golpeado o dot impact point para obtener el punto
‫en el espacio donde tuvimos el evento hit.
‫Entonces, el resultado del golpe es lo que usaremos para obtener información sobre el seguimiento de la línea.
‫Ahora, a menudo es bueno poder ver el resultado de un trazo de línea.
‫Podemos visualizar fácilmente el resultado de un trazado de línea dibujando una esfera de depuración.
‫Las esferas de depuración son formas simples que dibujamos en el espacio, y son excelentes para mostrar una ubicación
‫y las usamos al depurar.
‫En realidad, no usamos esferas de depuración en un juego de cambio.
‫Entonces, veamos cómo podemos dibujar una de estas esferas de depuración.
‫Ahora aquí está la documentación para una función llamada dibujar esfera de depuración.
‫Existe en los ayudantes de depuración de dibujo.
‫Así que podemos copiar este encabezado e incluirlo donde queramos llamar dibujar esfera de depuración.
‫Ahora mire todos los parámetros de entrada.
‫Primero, toma un mundo de esta manera, sabe en qué mundo dibujar la esfera.
‫Toma un vector F para el centro de la esfera así como un flotador para el radio.
‫Se necesita un N 32 para el número de segmentos de esa esfera.
‫Cuantos más segmentos, más redonda la esfera toma un color F.
‫De esta manera sabe en qué color dibujar esta esfera.
‫Quiere saber si quieres líneas persistentes.
‫En otras palabras, ¿las líneas deben desaparecer inmediatamente o deben persistir?
‫Si persisten, quiere saber el tiempo de vida de la esfera.
‫¿Cuándo debería dejar de dibujar la esfera?
‫Si no dibuja líneas persistentes, digamos que le gustaría dibujarlo para un solo cuadro, entonces pasaría
‫uno negativo como el tiempo de vida.
‫Ahora, los dos últimos parámetros son opcionales, así que mantendremos esto simple discutiendo solo los primeros
‫siete parámetros.
‫Veamos cómo funciona esto.
‫Voy a dibujar una esfera de depuración ahora arriba, voy a incluir asistentes de depuración de dibujo.
‫Ahí es donde se declara esta función de dibujar esfera de depuración.
‫Ahora bajemos para comenzar a jugar y simplemente dibujemos una esfera de depuración para ver cómo funciona.
‫Así que voy a llamar a dibujar esfera de depuración y el.
‫El primer parámetro de entrada es un nuevo mundo.
‫Podemos obtener nuestro mundo en cualquier momento llamando a Obtener Mundo, Obtener Mundo Devuelve un nuevo indicador de mundo a nuestro
‫mundo actual.
‫Entonces eso satisfará la primera entrada.
‫Luego, necesitamos un vector f para el centro de la esfera.
‫Ahora llamamos a esto y comenzamos a jugar, así que simplemente puedo llamar a obtener la ubicación del actor y esto obtendrá la
‫ubicación de nuestro estanque de tanques.
‫Ya que estamos en la clase de tanques.
‫Ahora voy a levantar la esfera un poco.
‫Así que voy a agregar un vector F con cero punto F para la x cero punto F para la Y y digo 200 F para la
‫Z.
‫Ahora voy a colocar estos parámetros de entrada cada uno en su propia línea.
‫Así que está claro lo que estamos pasando para cada entrada.
‫La segunda entrada es obtener esta expresión, que es la ubicación del actor, más un vector que apunta hacia arriba con
‫una longitud de 200.
‫La suma de estos dos vectores me dará la ubicación del tanque elevado en el eje Z por 200
‫unidades.
‫Ahora, el siguiente parámetro de entrada será el radio de la esfera.
‫Voy a elegir 100 F solo para que podamos ver cómo se ve una esfera de depuración con un radio de 100.
‫El siguiente es el número de segmentos.
‫Voy a elegir 12.
‫Veremos qué aspecto tiene.
‫Ahora, para un color F, existe una clase de color F y tiene muchos colores incorporados, como el rojo.
‫Ahora, para las líneas persistentes booleanas llamadas B, elegiré verdadero.
‫Y para el siguiente parámetro de entrada tenemos el aviso de por vida.
‫Tiene un valor predeterminado de uno negativo.
‫Eso significa que, de forma predeterminada, dibujará la esfera de depuración para un solo cuadro.
‫Pero voy a pasar 30 F para que tengamos la esfera durante 30 segundos y puedo omitir los dos últimos parámetros.
‫Así que aquí está nuestra llamada de función para dibujar la esfera de depuración.
‫Vamos a compilar esto y ver qué aspecto tiene.
‫Bien, estoy de vuelta en el editor.
‫Voy a abrir una segunda ventana para que podamos ver esto en pantalla completa.
‫Puedo ir a los puertos de visualización de ventanas y seleccionar el puerto de visualización dos y ahora veo esta segunda ventana.
‫Puede que no esté en pantalla completa cuando se abre, pero siempre puedes maximizarlo.
‫Ahora desde aquí puedo jugar el juego con alt p.
‫Ahora mira esto.
‫Aquí está nuestra esfera de depuración.
‫Fíjate que no es perfectamente redondo.
‫Elegimos 12 por el número de segmentos.
‫Cuantos más segmentos elijas, más líneas se necesitan para dibujar la esfera.
‫Ahora, esta es una esfera con un radio de 100.
‫Es bastante grande y el centro de la esfera está en la ubicación del tanque, más 200 unidades en el
‫aire.
‫Así es como podemos dibujar esferas de depuración.
‫Entonces, su desafío es dibujar una esfera de depuración usando el resultado de seguimiento debajo de nuestro cursor.
‫Entonces dibuje una esfera de depuración en nuestra nueva declaración if donde estamos verificando si la referencia del controlador del jugador no
‫es nula.
‫Ahora, usando nuestro resultado de golpe, obtenga el punto de impacto del resultado de golpe y utilícelo como el Centro de
‫la Esfera.
‫Ahora, para el parámetro de entrada de líneas persistentes, use falso y para la duración use uno negativo.
‫Y esto resultará en dibujar la esfera para un solo cuadro, lo cual está bien porque estamos llamando a
‫esto cada cuadro dentro de la función tic.
‫Así que pausa el video y dibuja la esfera de depuración en la función de marca.
‫Bueno.
‫Así que estoy de vuelta aquí en Tank.
‫Ahora tengo esta llamada de función de esfera de depuración dibujada aquí y comienzo a reproducir, así que puedo continuar y copiar eso
‫y simplemente eliminarlo de comenzar a reproducir y vamos a volver a marcar aquí dentro de nuestra instrucción if y solo estoy
‫vamos a pegarlo aquí y vamos a cambiar algunos de los parámetros de entrada.
‫Por un lado, estamos cambiando la ubicación del centro de la esfera.
‫Vamos a utilizar el resultado del golpe.
‫Así que voy a decir punto de impacto de punto de resultado de golpe.
‫Ahora para el radio, me gustaría hacerlo un poco más pequeño.
‫Hagamos que sea alrededor de 25.
‫Esta bien.
‫Si no hiciste eso, solo estoy haciendo esto.
‫Así que la esfera no es tan grande.
‫Ahora, el penúltimo parámetro que estamos pasando es para líneas persistentes.
‫Voy a pasar en falso y por la duración en lugar de 30 segundos, voy a usar un punto
‫F negativo.
‫De esa manera obtendremos una esfera para un solo cuadro, lo cual está bien, de nuevo, lo llamaremos en la función
‫de tic, así que lo llamaremos en cada cuadro.
‫Sigamos adelante y compilemos esto.
‫Ahora, de vuelta en el editor.
‫Si le doy al play ahora, mira esto.
‫Tengo una esfera de depuración y se está dibujando en el punto de impacto para el trazo de línea debajo del cursor.
‫Ahora podemos mover esto hacia arriba en las paredes y en otros objetos y el trazo está golpeando estos objetos porque están configurados
‫para bloquear el canal de visibilidad.
‫Bastante impresionante en este momento.
‫Prometí que discutiríamos el rastreo complejo versus el rastreo simple.
‫Te voy a mostrar algo mientras jugamos.
‫Hagamos clic en la ventana gráfica para tener control sobre nuestra palma.
‫Ahora presione la tecla de tilde y escriba el comando de consola mostrar colisión.
‫Ahora puede que no sea tan fácil de ver en mi pantalla, pero definitivamente puedes verlo en tu pantalla.
‫Observe la colisión de nuestros peones.
‫No solo podemos ver la cápsula, sino que también podemos ver este volumen de colisión alrededor de las mallas de nuestro tanque y torreta.
‫Esta es una colisión simple.
‫Déjame mostrarte rápidamente dónde podemos ver la colisión simple.
‫Voy a ir a activos y mallas y si hago doble clic en, digamos, base de tanque aquí, estamos viendo
‫la colisión compleja.
‫Si hago clic en este ícono de mostrar aquí en la parte superior y selecciono colisión compleja, puedo ver todos los polígonos
‫en la colisión compleja y hay muchos de ellos.
‫Si vuelvo a hacer clic en el ícono de mostrar y esta vez marco la casilla de verificación junto a Colisión simple, observe que
‫hay otro volumen de colisión.
‫Esto se llama casco de colisión y tiene mucha menos geometría.
‫Hay un número menor de polígonos con este volumen de colisión.
‫Esto es lo que usa el motor de física para detectar la superposición en los eventos de éxito.
‫Si estuviera usando la colisión compleja, requeriría muchos más cálculos.
‫Esta es la razón por la que tenemos volúmenes de colisión simples, por lo que es mucho mejor para el rendimiento cada vez
‫que se realiza un seguimiento de línea si rastreamos una colisión simple en lugar de una colisión compleja.
‫Así que ahora tenemos el resultado del éxito debajo del cursor.
‫Tomó algo de trabajo llegar allí, pero ahora lo tenemos y lo hemos probado al mostrar esta ubicación con
‫una esfera de depuración.
‫Esta es una buena manera de confirmar que nuestro hit de seguimiento está funcionando.
‫Entonces, ahora que sabemos que funciona, podemos usar esa ubicación para girar la torreta de nuestro tanque.
‫Y lo haremos en el siguiente video.
‫Te veré pronto.