‫Hola y bienvenido de nuevo.
‫Ahora estamos listos para comenzar a manejar la entrada del usuario.
‫Eso significa que nos gustaría presionar las teclas del teclado y mover el mouse y hacer clic con el mouse y ver cómo
‫nuestro tanque reacciona a esa entrada.
‫Ahora, para hacer eso, primero necesitamos obtener esa entrada y primero vamos a comenzar a
‫hacerlo usando asignaciones de ejes.
‫Así que hablemos de esto.
‫Ahora aquí en el proyecto, vamos a editar y configurar el proyecto.
‫Y si nos desplazamos hacia abajo y seleccionamos entrada, entonces vemos nuestros enlaces aquí.
‫Y bajo los enlaces hay asignaciones de acción y asignaciones de ejes.
‫Primero vamos a entrar en las asignaciones de ejes.
‫Ahora es posible que tenga algo de experiencia con estos, pero vamos a profundizar un poco más
‫en lo que hacen y cómo funcionan.
‫Así que tenemos tres de ellos.
‫Y si hago clic en la flecha desplegable, veré aquí W y SW y estos están hablando de las teclas W
‫y SW en el teclado.
‫Estos se asignan a este mapeo de ejes en particular, que se llama Mover hacia adelante.
‫Entonces, analicemos cómo funciona este mapeo de ejes.
‫Así que vimos en The Unreal Editor que tenemos este mapeo de ejes llamado Move Forward y tiene el W
‫y el SCS asignados a este mapeo de ejes.
‫Entonces, ¿qué significa esto exactamente?
‫Bueno, en Unreal Engine, tenemos algo llamado mapeo de ejes.
‫Y el mapeo de ejes es algo que procesa cada fotograma del juego.
‫Asigne claves a un mapeo de ejes.
‫En nuestro caso, hemos asignado W y S.
‫Ahora eche un vistazo al lado de la tecla W aquí.
‫En mi pequeña muestra de captura de pantalla a la derecha, dice escala.
‫Y junto a la escala hay un número 1. 0.
‫Y es posible que haya notado que junto al SQ, la escala es -1. 0.
‫Entonces estos son valores que afectarán esa información de entrada.
‫Así es como funciona un mapeo de ejes.
‫Nuestro avance de mapeo de ejes tiene la capacidad de asociarse con una función en C++.
‫Ahora, cuando se trata de mapeos de Axis, si asociamos una función con un mapeo de Axis, necesita tomar
‫un parámetro de entrada de tipo float para que podamos crear una función en nuestro estanque llamada MOVE que toma un
‫float.
‫Llamaremos a este parámetro de entrada valor.
‫Ahora hay una manera de tomar esta función y asociarla con nuestro mapeo de eje de avance.
‫Dijo que unimos la función de movimiento al mapeo de ejes.
‫Entonces, cada cuadro del sistema de entrada del motor Unreal Engine del juego verificará si estamos presionando la
‫tecla W o la tecla.
‫Y calculará un valor de eje dependiendo de si presionamos o no esas teclas y cada
‫fotograma.
‫Va a llamar a esta función que hemos vinculado para avanzar y pasar ese valor del eje.
‫Lo que suceda dentro de esa función depende de nosotros como desarrolladores de C++.
‫Ahora así es como funciona.
‫Si no estamos presionando la W o las Teclas, este valor del eje tiene el valor cero.
‫Entonces, la función de movimiento que está vinculada al mapeo del eje de avance se llama cada fotograma y
‫el valor flotante que se pasa es cero.
‫Ahora digamos que estamos presionando la tecla W.
‫La tecla W tiene su escala establecida en 1. 0.
‫Esto significa que nuestro valor de eje va a ser 1. 0 y eso es lo que pasa a la función MOV.
‫Entonces, en cada cuadro, la función de movimiento se llama con un valor de 1. 0 pasó.
‫Ahora digamos que estamos presionando el SRC que tiene un valor de escala de -1. 0.
‫Esto significa que en cada fotograma se llamará a la función de movimiento y -1. Se pasará 0.
‫Ahora, en el caso de que estemos presionando W y S, ambos valores se suman.
‫Entonces obtenemos el 1. 0 al presionar la tecla W y obtenemos -1. 0 de presionar el SRC.
‫Ahora ambos se anulan entre sí.
‫Entonces, si estamos presionando ambos al mismo tiempo, la función de movimiento se llamará con cero pasado.
‫Entonces, dependiendo de la combinación de teclas que estemos presionando, obtendremos un valor diferente pasado
‫a nuestra función MOVER y podemos hacer lo que queramos con ese valor, como usarlo para mover el peón.
‫Hablaremos de mover el peón muy pronto.
‫Por ahora, trabajemos en configurarnos para que podamos manejar esta información del sistema de
‫mapeo de Axis.
‫Bien, ahora que sabemos cómo funciona la asignación de ejes, es hora de crear una función de devolución de llamada
‫que podamos vincular a la asignación de ejes de avance.
‫Así que voy a cerrar la configuración del proyecto y volver al código VS.
‫Entonces, aquí en el código VS, nos gustaría crear una función que podamos vincular al mapeo del eje de avance.
‫Así que aquí en el tanque H podemos crear una función privada.
‫Ahora va a tener.
‫El tipo de retorno nulo, y me gustaría llamar a este movimiento.
‫Ahora necesita tener un parámetro de entrada flotante, y vamos a llamar a este valor.
‫Así que tomemos nuestra función de movimiento y definámosla aquí en Tank.
‫CP Lo pegaré aquí justo debajo del constructor y necesitamos un tanque con el operador de resolución de alcance antes del
‫nombre de la función.
‫Así que tenemos esta función de movimiento y estamos listos para vincularla a nuestro mapeo de eje de avance.
‫Y eso se hace dentro de una función llamada configuración del componente de entrada del reproductor.
‫Eso debería sonar familiar.
‫De hecho, si abrimos nuestro explorador y volvemos a Base Pont H, podemos desplazarnos hacia abajo y ver en la sección pública
‫el componente de entrada del reproductor de configuración de funciones.
‫Veremos que esto es una anulación de una función virtual heredada.
‫Ahora, la clase de generación base realmente no necesita configurar ninguna entrada, y eso es lo que esta función es
‫para manejar la entrada de un jugador.
‫Ahora, nuestra clase de enlace base no necesita manejar la entrada, pero nuestra clase de tanque sí.
‫Entonces, lo que podemos hacer es sacar esta función del estanque base h, pero la voy a copiar porque la necesitamos
‫en el tanque.
‫Entonces, copiando esta función, voy a ir al Tanque H y aquí, en la sección pública, la voy
‫a pegar.
‫Y dado que no lo necesitamos en el estanque base, simplemente lo eliminaré de la clase estanque base.
‫Y, de hecho, voy a ir al CP del estanque base y también lo quitaré de aquí.
‫Así que sigamos adelante y eliminemos el componente de entrada del reproductor de configuración de Base Pond.
‫CP Y ahora ya no está en la clase de estanque base.
‫Así que sigamos adelante y guardemos nuestros cambios y cerremos la base Pond H y CP.
‫Y ahora tenemos el componente de entrada de configuración del jugador declarado en Tank H, pero también queremos definirlo y tanque.
‫CP Así que aquí en Tank.
‫CP Voy a agregar la definición justo encima de la función de movimiento.
‫Así que esto es nulo y es un componente de entrada de jugador configurado en un tanque.
‫Ahora regresemos al Tanque H y veamos cuál es su tipo de parámetro de entrada.
‫Verá que se declara hacia adelante aquí dentro de los paréntesis.
‫Esto es algo que puede hacer si desea reenviar, declarar un tipo de clase en un archivo de encabezado.
‫Por lo tanto, se declara hacia adelante aquí y necesitamos este tipo de puntero de componente de entrada y el parámetro se llama
‫componente de entrada del jugador.
‫Entonces necesitamos este parámetro de entrada en el tanque.
‫CP Entonces, entre paréntesis para configurar el componente de entrada del reproductor, vamos a tener un componente de entrada U
‫que es un puntero y se llama componente de entrada del reproductor.
‫Así que ahora la firma de la función coincide con la de la declaración de la función.
‫Ahora de vuelta en el archivo CP, vamos a darle a esta función un cuerpo de función y estamos sobreescribiendo
‫esta función y es una buena idea llamar al componente de entrada del reproductor superconfigurado.
‫Ahora, dado que estamos llamando a la versión principal del componente de entrada del reproductor de configuración, tenemos que pasar
‫una entrada del tipo de componente de entrada.
‫Vamos a pasar el parámetro de entrada a esta función aquí.
‫Entonces, de esta manera, la clase principal llamará a su versión.
‫Ahora el tanque del estanque base no está implementando esta función.
‫Lo acabamos de quitar.
‫Pero la clase principal a la base llamará a su versión.
‫Y cada vez que anule una función virtual como esta, llamar a la versión super es una buena idea.
‫Por lo tanto, no nos perdemos ninguna funcionalidad implementada en la versión principal.
‫Entonces ¿por qué estamos haciendo esto?
‫¿Para qué sirve el componente de entrada del reproductor de configuración?
‫Bueno, una de las cosas para las que es bueno es vincular funciones para acceder a asignaciones.
‫Nos gustaría vincular nuestra función de movimiento al mapeo del eje de avance.
‫Y eso lo hacemos aquí.
‫Lo hacemos usando este componente de entrada del reproductor de parámetros de entrada.
‫Para eso está diseñado este objeto.
‫Tomamos el componente de entrada del jugador y en este puntero usamos el operador de flecha para acceder a una
‫función llamada eje de enlace.
‫Ahora Bind Axis toma algunos parámetros de entrada.
‫El primero es un literal de cadena, lo que significa que vamos a usar la macro de texto.
‫Ahora, ¿qué ponemos entre comillas?
‫Ponemos el nombre del mapeo de ejes.
‫Vimos en el editor que este mapeo de ejes se llama avanzar.
‫Así que estamos eligiendo esa asignación de ejes para enlazar con el segundo parámetro de entrada.
‫Este será un puntero al objeto donde vincular la función para esto es un puntero a la instancia
‫de la clase particular donde n y dado que estamos en la clase tanque, esto apuntará a la instancia
‫del peón tanque en el juego.
‫Ahora el tercer parámetro es la dirección de la función que estamos vinculando.
‫Así que tenemos un movimiento de tanque.
‫Muy importante que tenemos que hacerlo plenamente.
‫Califique el nombre de la función con el nombre de la clase.
‫Y justo aquí delante del nombre de la función, necesitamos la dirección del operador.
‫Ahora, si no está familiarizado con hacer algo como esto, esto es simplemente tomar la dirección de
‫una función.
‫Las funciones pueden tener direcciones al igual que las variables.
‫Entonces, usar la dirección del operador es una forma de pasar funciones a otras funciones.
‫Por eso necesitamos esa dirección del operador.
‫Entonces tenemos nuestra llamada de función para vincular el acceso.
‫Ahora probablemente esté notando que el indicador de error de IntelliSense para el tipo de clase incompleto que su componente de entrada
‫no está permitido.
‫Ahora sabemos qué puede causar esto.
‫Por un lado, podría significar que necesitamos incluir un archivo de encabezado.
‫Otra posibilidad es que sea un falso error.
‫Puede averiguarlo fácilmente compilando, así que intentemos compilar.
‫Veremos que tenemos una compilación exitosa.
‫Entonces sabemos que esto es un error falso.
‫Pero nuevamente, si lo desea, puede agregar la inclusión solo para eliminar eso.
‫Así que no te molesta.
‫Ahora sabemos que el tipo de clase del que se queja es su componente de entrada.
‫Así que aquí está su componente de entrada en la documentación y aquí está el include.
‫Y si agregamos esto aquí en la parte superior del archivo CP del tanque, nos desharemos de ese molesto error falso.
‫Y nuevamente, debido a que estos tienen la pragya quiere incluir guardias, sabemos que los componentes de entrada no se
‫incluirán más de una vez y ahí van los garabatos que se han ido.
‫Entonces, ahora sabemos que esta función de movimiento se llamará en cada cuadro y el valor tendrá un
‫valor flotante particular dependiendo de si estamos presionando la W o las preguntas.
‫Ahora, simplemente saber que la función de movimiento está destinada a avanzar no es suficiente.
‫Como desarrolladores, es bueno tener algún tipo de confirmación de que las cosas funcionan.
‫Entonces, lo que me gustaría que hicieras como tu desafío es usar el registro de YUI en la función MOV para imprimir
‫el valor que se está pasando para mover ese valor flotante llamado.
‫Así que use el porcentaje f en el registro uiy para registrar el valor del valor flotante en el registro de salida y luego juegue a probar el juego
‫y presione esas teclas y vea lo que obtiene impreso en el registro.
‫Pausa el video y agrega esto a la función de movimiento ahora.
‫Bueno.
‫Así que aquí en la función mov, voy a agregar un registro de uii.
‫Y esto puede ser una advertencia de temperatura de registro.
‫Y para la macro de texto.
‫Simplemente voy a poner valor por ciento F y valor.
‫Ahora está bien.
‫Si usó una verbosidad o tipo de advertencia diferente, si sabe cómo hacer esas cosas.
‫Eso está totalmente bien.
‫Solo voy a usar una advertencia aquí y sé que ha usado cosas como percent se y formateado su
‫registro con un valor de cadena.
‫El porcentaje F, si no lo sabe, es cómo puede formatear su registro de UI con un valor flotante.
‫Entonces, compilemos esto y volvamos al editor, abriré el registro de salida y presionaré reproducir y verificaré dónde enviar
‫spam al registro de salida con innumerables mensajes.
‫Ahora voy a hacer clic en la ventana gráfica y presionar la tecla W.
‫Ahí está mi valor de uno que voy a lanzar.
‫Ha vuelto a cero.
‫Voy a apretar la tecla y es negativa.
‫Y si presionamos ambos al mismo tiempo, obtenemos cero.
‫Y así es exactamente como esperábamos.
‫Perfecto.
‫Está bien.
‫Entonces, en este video, configuramos nuestro estanque para manejar algunas entradas de los usuarios.
‫Hablamos sobre asignaciones de acceso y vinculamos nuestra función de movimiento a la asignación de acceso de avance.
‫Luego imprimimos ese valor de acceso usando el registro de YUI en nuestra función MOVER, pero en realidad nos gustaría mover nuestro tanque
‫en lugar de solo imprimir algunos valores en el registro de salida.
‫Entonces, en las próximas conferencias, vamos a configurarlo para que podamos comenzar a mover nuestro tanque.
‫Te veré pronto.