﻿1
00:00:04,710 --> 00:00:06,600
‫Hola y bienvenido de nuevo.

2
00:00:06,630 --> 00:00:09,660
‫Ahora estamos listos para comenzar a manejar la entrada del usuario.

3
00:00:09,780 --> 00:00:15,000
‫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

4
00:00:15,000 --> 00:00:16,650
‫nuestro tanque reacciona a esa entrada.

5
00:00:16,770 --> 00:00:22,260
‫Ahora, para hacer eso, primero necesitamos obtener esa entrada y primero vamos a comenzar a

6
00:00:22,260 --> 00:00:24,450
‫hacerlo usando asignaciones de ejes.

7
00:00:24,450 --> 00:00:25,980
‫Así que hablemos de esto.

8
00:00:26,100 --> 00:00:30,600
‫Ahora aquí en el proyecto, vamos a editar y configurar el proyecto.

9
00:00:30,780 --> 00:00:35,340
‫Y si nos desplazamos hacia abajo y seleccionamos entrada, entonces vemos nuestros enlaces aquí.

10
00:00:35,340 --> 00:00:39,600
‫Y bajo los enlaces hay asignaciones de acción y asignaciones de ejes.

11
00:00:39,630 --> 00:00:42,300
‫Primero vamos a entrar en las asignaciones de ejes.

12
00:00:42,350 --> 00:00:47,370
‫Ahora es posible que tenga algo de experiencia con estos, pero vamos a profundizar un poco más

13
00:00:47,370 --> 00:00:49,700
‫en lo que hacen y cómo funcionan.

14
00:00:49,710 --> 00:00:51,150
‫Así que tenemos tres de ellos.

15
00:00:51,240 --> 00:00:58,800
‫Y si hago clic en la flecha desplegable, veré aquí W y SW y estos están hablando de las teclas W

16
00:00:58,800 --> 00:01:00,780
‫y SW en el teclado.

17
00:01:00,810 --> 00:01:06,960
‫Estos se asignan a este mapeo de ejes en particular, que se llama Mover hacia adelante.

18
00:01:06,960 --> 00:01:09,870
‫Entonces, analicemos cómo funciona este mapeo de ejes.

19
00:01:09,870 --> 00:01:17,280
‫Así que vimos en The Unreal Editor que tenemos este mapeo de ejes llamado Move Forward y tiene el W

20
00:01:17,280 --> 00:01:20,820
‫y el SCS asignados a este mapeo de ejes.

21
00:01:20,820 --> 00:01:22,950
‫Entonces, ¿qué significa esto exactamente?

22
00:01:23,730 --> 00:01:27,870
‫Bueno, en Unreal Engine, tenemos algo llamado mapeo de ejes.

23
00:01:27,870 --> 00:01:32,970
‫Y el mapeo de ejes es algo que procesa cada fotograma del juego.

24
00:01:33,000 --> 00:01:35,700
‫Asigne claves a un mapeo de ejes.

25
00:01:35,700 --> 00:01:38,460
‫En nuestro caso, hemos asignado W y S.

26
00:01:38,490 --> 00:01:41,370
‫Ahora eche un vistazo al lado de la tecla W aquí.

27
00:01:41,370 --> 00:01:45,060
‫En mi pequeña muestra de captura de pantalla a la derecha, dice escala.

28
00:01:45,060 --> 00:01:48,180
‫Y junto a la escala hay un número 1. 0.

29
00:01:48,300 --> 00:01:53,160
‫Y es posible que haya notado que junto al SQ, la escala es -1. 0.

30
00:01:53,160 --> 00:01:58,650
‫Entonces estos son valores que afectarán esa información de entrada.

31
00:01:58,650 --> 00:02:01,080
‫Así es como funciona un mapeo de ejes.

32
00:02:01,320 --> 00:02:08,580
‫Nuestro avance de mapeo de ejes tiene la capacidad de asociarse con una función en C++.

33
00:02:08,700 --> 00:02:15,060
‫Ahora, cuando se trata de mapeos de Axis, si asociamos una función con un mapeo de Axis, necesita tomar

34
00:02:15,060 --> 00:02:21,810
‫un parámetro de entrada de tipo float para que podamos crear una función en nuestro estanque llamada MOVE que toma un

35
00:02:21,810 --> 00:02:22,410
‫float.

36
00:02:22,410 --> 00:02:24,870
‫Llamaremos a este parámetro de entrada valor.

37
00:02:24,930 --> 00:02:30,570
‫Ahora hay una manera de tomar esta función y asociarla con nuestro mapeo de eje de avance.

38
00:02:30,570 --> 00:02:34,980
‫Dijo que unimos la función de movimiento al mapeo de ejes.

39
00:02:34,980 --> 00:02:41,430
‫Entonces, cada cuadro del sistema de entrada del motor Unreal Engine del juego verificará si estamos presionando la

40
00:02:41,430 --> 00:02:43,680
‫tecla W o la tecla.

41
00:02:43,680 --> 00:02:50,730
‫Y calculará un valor de eje dependiendo de si presionamos o no esas teclas y cada

42
00:02:50,730 --> 00:02:51,600
‫fotograma.

43
00:02:51,600 --> 00:02:58,080
‫Va a llamar a esta función que hemos vinculado para avanzar y pasar ese valor del eje.

44
00:02:58,080 --> 00:03:03,810
‫Lo que suceda dentro de esa función depende de nosotros como desarrolladores de C++.

45
00:03:03,840 --> 00:03:05,310
‫Ahora así es como funciona.

46
00:03:05,310 --> 00:03:10,860
‫Si no estamos presionando la W o las Teclas, este valor del eje tiene el valor cero.

47
00:03:10,860 --> 00:03:16,890
‫Entonces, la función de movimiento que está vinculada al mapeo del eje de avance se llama cada fotograma y

48
00:03:16,890 --> 00:03:19,620
‫el valor flotante que se pasa es cero.

49
00:03:19,620 --> 00:03:22,380
‫Ahora digamos que estamos presionando la tecla W.

50
00:03:22,620 --> 00:03:26,820
‫La tecla W tiene su escala establecida en 1. 0.

51
00:03:26,850 --> 00:03:33,870
‫Esto significa que nuestro valor de eje va a ser 1. 0 y eso es lo que pasa a la función MOV.

52
00:03:33,870 --> 00:03:39,090
‫Entonces, en cada cuadro, la función de movimiento se llama con un valor de 1. 0 pasó.

53
00:03:39,120 --> 00:03:44,910
‫Ahora digamos que estamos presionando el SRC que tiene un valor de escala de -1. 0.

54
00:03:44,940 --> 00:03:51,720
‫Esto significa que en cada fotograma se llamará a la función de movimiento y -1. Se pasará 0.

55
00:03:51,720 --> 00:03:58,260
‫Ahora, en el caso de que estemos presionando W y S, ambos valores se suman.

56
00:03:58,260 --> 00:04:05,040
‫Entonces obtenemos el 1. 0 al presionar la tecla W y obtenemos -1. 0 de presionar el SRC.

57
00:04:05,070 --> 00:04:07,200
‫Ahora ambos se anulan entre sí.

58
00:04:07,320 --> 00:04:13,350
‫Entonces, si estamos presionando ambos al mismo tiempo, la función de movimiento se llamará con cero pasado.

59
00:04:13,710 --> 00:04:19,020
‫Entonces, dependiendo de la combinación de teclas que estemos presionando, obtendremos un valor diferente pasado

60
00:04:19,020 --> 00:04:25,230
‫a nuestra función MOVER y podemos hacer lo que queramos con ese valor, como usarlo para mover el peón.

61
00:04:25,230 --> 00:04:28,500
‫Hablaremos de mover el peón muy pronto.

62
00:04:28,500 --> 00:04:34,620
‫Por ahora, trabajemos en configurarnos para que podamos manejar esta información del sistema de

63
00:04:34,620 --> 00:04:36,390
‫mapeo de Axis.

64
00:04:36,930 --> 00:04:43,260
‫Bien, ahora que sabemos cómo funciona la asignación de ejes, es hora de crear una función de devolución de llamada

65
00:04:43,260 --> 00:04:46,620
‫que podamos vincular a la asignación de ejes de avance.

66
00:04:46,620 --> 00:04:50,370
‫Así que voy a cerrar la configuración del proyecto y volver al código VS.

67
00:04:50,370 --> 00:04:58,470
‫Entonces, aquí en el código VS, nos gustaría crear una función que podamos vincular al mapeo del eje de avance.

68
00:04:58,470 --> 00:05:02,640
‫Así que aquí en el tanque H podemos crear una función privada.

69
00:05:02,640 --> 00:05:03,810
‫Ahora va a tener.

70
00:05:03,880 --> 00:05:07,180
‫El tipo de retorno nulo, y me gustaría llamar a este movimiento.

71
00:05:07,210 --> 00:05:11,950
‫Ahora necesita tener un parámetro de entrada flotante, y vamos a llamar a este valor.

72
00:05:12,010 --> 00:05:16,750
‫Así que tomemos nuestra función de movimiento y definámosla aquí en Tank.

73
00:05:16,970 --> 00:05:25,450
‫CP Lo pegaré aquí justo debajo del constructor y necesitamos un tanque con el operador de resolución de alcance antes del

74
00:05:25,450 --> 00:05:27,310
‫nombre de la función.

75
00:05:27,460 --> 00:05:33,550
‫Así que tenemos esta función de movimiento y estamos listos para vincularla a nuestro mapeo de eje de avance.

76
00:05:33,670 --> 00:05:39,340
‫Y eso se hace dentro de una función llamada configuración del componente de entrada del reproductor.

77
00:05:39,370 --> 00:05:40,630
‫Eso debería sonar familiar.

78
00:05:40,630 --> 00:05:48,130
‫De hecho, si abrimos nuestro explorador y volvemos a Base Pont H, podemos desplazarnos hacia abajo y ver en la sección pública

79
00:05:48,130 --> 00:05:51,910
‫el componente de entrada del reproductor de configuración de funciones.

80
00:05:51,910 --> 00:05:56,380
‫Veremos que esto es una anulación de una función virtual heredada.

81
00:05:56,950 --> 00:06:03,430
‫Ahora, la clase de generación base realmente no necesita configurar ninguna entrada, y eso es lo que esta función es

82
00:06:03,430 --> 00:06:06,010
‫para manejar la entrada de un jugador.

83
00:06:06,040 --> 00:06:10,810
‫Ahora, nuestra clase de enlace base no necesita manejar la entrada, pero nuestra clase de tanque sí.

84
00:06:10,810 --> 00:06:18,160
‫Entonces, lo que podemos hacer es sacar esta función del estanque base h, pero la voy a copiar porque la necesitamos

85
00:06:18,160 --> 00:06:19,240
‫en el tanque.

86
00:06:19,930 --> 00:06:26,380
‫Entonces, copiando esta función, voy a ir al Tanque H y aquí, en la sección pública, la voy

87
00:06:26,380 --> 00:06:27,190
‫a pegar.

88
00:06:27,190 --> 00:06:32,800
‫Y dado que no lo necesitamos en el estanque base, simplemente lo eliminaré de la clase estanque base.

89
00:06:32,800 --> 00:06:38,090
‫Y, de hecho, voy a ir al CP del estanque base y también lo quitaré de aquí.

90
00:06:38,110 --> 00:06:42,250
‫Así que sigamos adelante y eliminemos el componente de entrada del reproductor de configuración de Base Pond.

91
00:06:42,460 --> 00:06:46,540
‫CP Y ahora ya no está en la clase de estanque base.

92
00:06:46,540 --> 00:06:52,120
‫Así que sigamos adelante y guardemos nuestros cambios y cerremos la base Pond H y CP.

93
00:06:52,150 --> 00:06:59,410
‫Y ahora tenemos el componente de entrada de configuración del jugador declarado en Tank H, pero también queremos definirlo y tanque.

94
00:06:59,620 --> 00:07:01,540
‫CP Así que aquí en Tank.

95
00:07:01,720 --> 00:07:06,340
‫CP Voy a agregar la definición justo encima de la función de movimiento.

96
00:07:06,430 --> 00:07:12,880
‫Así que esto es nulo y es un componente de entrada de jugador configurado en un tanque.

97
00:07:13,510 --> 00:07:18,000
‫Ahora regresemos al Tanque H y veamos cuál es su tipo de parámetro de entrada.

98
00:07:18,010 --> 00:07:21,880
‫Verá que se declara hacia adelante aquí dentro de los paréntesis.

99
00:07:21,880 --> 00:07:27,070
‫Esto es algo que puede hacer si desea reenviar, declarar un tipo de clase en un archivo de encabezado.

100
00:07:27,070 --> 00:07:33,370
‫Por lo tanto, se declara hacia adelante aquí y necesitamos este tipo de puntero de componente de entrada y el parámetro se llama

101
00:07:33,370 --> 00:07:34,990
‫componente de entrada del jugador.

102
00:07:34,990 --> 00:07:37,450
‫Entonces necesitamos este parámetro de entrada en el tanque.

103
00:07:37,600 --> 00:07:44,980
‫CP Entonces, entre paréntesis para configurar el componente de entrada del reproductor, vamos a tener un componente de entrada U

104
00:07:45,040 --> 00:07:50,080
‫que es un puntero y se llama componente de entrada del reproductor.

105
00:07:50,320 --> 00:07:55,300
‫Así que ahora la firma de la función coincide con la de la declaración de la función.

106
00:07:55,450 --> 00:08:02,050
‫Ahora de vuelta en el archivo CP, vamos a darle a esta función un cuerpo de función y estamos sobreescribiendo

107
00:08:02,050 --> 00:08:07,450
‫esta función y es una buena idea llamar al componente de entrada del reproductor superconfigurado.

108
00:08:07,480 --> 00:08:13,030
‫Ahora, dado que estamos llamando a la versión principal del componente de entrada del reproductor de configuración, tenemos que pasar

109
00:08:13,030 --> 00:08:15,460
‫una entrada del tipo de componente de entrada.

110
00:08:15,460 --> 00:08:19,900
‫Vamos a pasar el parámetro de entrada a esta función aquí.

111
00:08:19,900 --> 00:08:23,430
‫Entonces, de esta manera, la clase principal llamará a su versión.

112
00:08:23,440 --> 00:08:26,620
‫Ahora el tanque del estanque base no está implementando esta función.

113
00:08:26,620 --> 00:08:27,700
‫Lo acabamos de quitar.

114
00:08:27,700 --> 00:08:31,930
‫Pero la clase principal a la base llamará a su versión.

115
00:08:31,930 --> 00:08:38,410
‫Y cada vez que anule una función virtual como esta, llamar a la versión super es una buena idea.

116
00:08:38,410 --> 00:08:43,090
‫Por lo tanto, no nos perdemos ninguna funcionalidad implementada en la versión principal.

117
00:08:43,090 --> 00:08:44,440
‫Entonces ¿por qué estamos haciendo esto?

118
00:08:44,470 --> 00:08:47,150
‫¿Para qué sirve el componente de entrada del reproductor de configuración?

119
00:08:47,170 --> 00:08:51,730
‫Bueno, una de las cosas para las que es bueno es vincular funciones para acceder a asignaciones.

120
00:08:51,730 --> 00:08:56,140
‫Nos gustaría vincular nuestra función de movimiento al mapeo del eje de avance.

121
00:08:56,140 --> 00:08:57,250
‫Y eso lo hacemos aquí.

122
00:08:57,250 --> 00:09:01,180
‫Lo hacemos usando este componente de entrada del reproductor de parámetros de entrada.

123
00:09:01,180 --> 00:09:04,360
‫Para eso está diseñado este objeto.

124
00:09:04,390 --> 00:09:12,160
‫Tomamos el componente de entrada del jugador y en este puntero usamos el operador de flecha para acceder a una

125
00:09:12,160 --> 00:09:14,110
‫función llamada eje de enlace.

126
00:09:14,590 --> 00:09:17,890
‫Ahora Bind Axis toma algunos parámetros de entrada.

127
00:09:17,890 --> 00:09:22,450
‫El primero es un literal de cadena, lo que significa que vamos a usar la macro de texto.

128
00:09:22,600 --> 00:09:24,430
‫Ahora, ¿qué ponemos entre comillas?

129
00:09:24,520 --> 00:09:27,160
‫Ponemos el nombre del mapeo de ejes.

130
00:09:27,160 --> 00:09:31,690
‫Vimos en el editor que este mapeo de ejes se llama avanzar.

131
00:09:32,020 --> 00:09:36,970
‫Así que estamos eligiendo esa asignación de ejes para enlazar con el segundo parámetro de entrada.

132
00:09:36,970 --> 00:09:43,690
‫Este será un puntero al objeto donde vincular la función para esto es un puntero a la instancia

133
00:09:43,690 --> 00:09:50,590
‫de la clase particular donde n y dado que estamos en la clase tanque, esto apuntará a la instancia

134
00:09:50,590 --> 00:09:53,280
‫del peón tanque en el juego.

135
00:09:53,290 --> 00:09:58,120
‫Ahora el tercer parámetro es la dirección de la función que estamos vinculando.

136
00:09:58,120 --> 00:10:01,720
‫Así que tenemos un movimiento de tanque.

137
00:10:01,750 --> 00:10:03,550
‫Muy importante que tenemos que hacerlo plenamente.

138
00:10:03,660 --> 00:10:06,900
‫Califique el nombre de la función con el nombre de la clase.

139
00:10:06,900 --> 00:10:13,200
‫Y justo aquí delante del nombre de la función, necesitamos la dirección del operador.

140
00:10:13,230 --> 00:10:18,450
‫Ahora, si no está familiarizado con hacer algo como esto, esto es simplemente tomar la dirección de

141
00:10:18,450 --> 00:10:19,220
‫una función.

142
00:10:19,230 --> 00:10:23,040
‫Las funciones pueden tener direcciones al igual que las variables.

143
00:10:23,040 --> 00:10:28,320
‫Entonces, usar la dirección del operador es una forma de pasar funciones a otras funciones.

144
00:10:28,320 --> 00:10:31,380
‫Por eso necesitamos esa dirección del operador.

145
00:10:31,380 --> 00:10:34,050
‫Entonces tenemos nuestra llamada de función para vincular el acceso.

146
00:10:34,200 --> 00:10:40,650
‫Ahora probablemente esté notando que el indicador de error de IntelliSense para el tipo de clase incompleto que su componente de entrada

147
00:10:40,650 --> 00:10:41,700
‫no está permitido.

148
00:10:41,850 --> 00:10:43,710
‫Ahora sabemos qué puede causar esto.

149
00:10:43,710 --> 00:10:46,950
‫Por un lado, podría significar que necesitamos incluir un archivo de encabezado.

150
00:10:47,220 --> 00:10:50,430
‫Otra posibilidad es que sea un falso error.

151
00:10:50,430 --> 00:10:55,110
‫Puede averiguarlo fácilmente compilando, así que intentemos compilar.

152
00:10:55,440 --> 00:10:57,600
‫Veremos que tenemos una compilación exitosa.

153
00:10:57,600 --> 00:10:59,640
‫Entonces sabemos que esto es un error falso.

154
00:10:59,640 --> 00:11:04,290
‫Pero nuevamente, si lo desea, puede agregar la inclusión solo para eliminar eso.

155
00:11:04,290 --> 00:11:05,790
‫Así que no te molesta.

156
00:11:05,820 --> 00:11:10,890
‫Ahora sabemos que el tipo de clase del que se queja es su componente de entrada.

157
00:11:11,280 --> 00:11:16,290
‫Así que aquí está su componente de entrada en la documentación y aquí está el include.

158
00:11:16,290 --> 00:11:23,100
‫Y si agregamos esto aquí en la parte superior del archivo CP del tanque, nos desharemos de ese molesto error falso.

159
00:11:23,100 --> 00:11:29,280
‫Y nuevamente, debido a que estos tienen la pragya quiere incluir guardias, sabemos que los componentes de entrada no se

160
00:11:29,280 --> 00:11:34,080
‫incluirán más de una vez y ahí van los garabatos que se han ido.

161
00:11:34,350 --> 00:11:39,900
‫Entonces, ahora sabemos que esta función de movimiento se llamará en cada cuadro y el valor tendrá un

162
00:11:39,900 --> 00:11:44,280
‫valor flotante particular dependiendo de si estamos presionando la W o las preguntas.

163
00:11:44,670 --> 00:11:50,490
‫Ahora, simplemente saber que la función de movimiento está destinada a avanzar no es suficiente.

164
00:11:50,490 --> 00:11:54,750
‫Como desarrolladores, es bueno tener algún tipo de confirmación de que las cosas funcionan.

165
00:11:54,750 --> 00:12:01,110
‫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

166
00:12:01,110 --> 00:12:04,950
‫el valor que se está pasando para mover ese valor flotante llamado.

167
00:12:04,980 --> 00:12:13,110
‫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

168
00:12:13,110 --> 00:12:17,020
‫y presione esas teclas y vea lo que obtiene impreso en el registro.

169
00:12:17,040 --> 00:12:20,370
‫Pausa el video y agrega esto a la función de movimiento ahora.

170
00:12:23,280 --> 00:12:23,590
‫Bueno.

171
00:12:23,610 --> 00:12:27,960
‫Así que aquí en la función mov, voy a agregar un registro de uii.

172
00:12:30,200 --> 00:12:33,680
‫Y esto puede ser una advertencia de temperatura de registro.

173
00:12:33,770 --> 00:12:35,960
‫Y para la macro de texto.

174
00:12:36,230 --> 00:12:42,440
‫Simplemente voy a poner valor por ciento F y valor.

175
00:12:42,710 --> 00:12:43,520
‫Ahora está bien.

176
00:12:43,520 --> 00:12:48,500
‫Si usó una verbosidad o tipo de advertencia diferente, si sabe cómo hacer esas cosas.

177
00:12:48,950 --> 00:12:49,960
‫Eso está totalmente bien.

178
00:12:49,970 --> 00:12:56,090
‫Solo voy a usar una advertencia aquí y sé que ha usado cosas como percent se y formateado su

179
00:12:56,090 --> 00:12:58,100
‫registro con un valor de cadena.

180
00:12:58,130 --> 00:13:04,300
‫El porcentaje F, si no lo sabe, es cómo puede formatear su registro de UI con un valor flotante.

181
00:13:04,310 --> 00:13:12,380
‫Entonces, compilemos esto y volvamos al editor, abriré el registro de salida y presionaré reproducir y verificaré dónde enviar

182
00:13:12,380 --> 00:13:16,190
‫spam al registro de salida con innumerables mensajes.

183
00:13:16,190 --> 00:13:19,000
‫Ahora voy a hacer clic en la ventana gráfica y presionar la tecla W.

184
00:13:19,010 --> 00:13:22,030
‫Ahí está mi valor de uno que voy a lanzar.

185
00:13:22,040 --> 00:13:23,180
‫Ha vuelto a cero.

186
00:13:23,210 --> 00:13:26,570
‫Voy a apretar la tecla y es negativa.

187
00:13:26,570 --> 00:13:30,500
‫Y si presionamos ambos al mismo tiempo, obtenemos cero.

188
00:13:30,500 --> 00:13:33,620
‫Y así es exactamente como esperábamos.

189
00:13:33,800 --> 00:13:34,650
‫Perfecto.

190
00:13:34,670 --> 00:13:35,390
‫Está bien.

191
00:13:35,390 --> 00:13:39,320
‫Entonces, en este video, configuramos nuestro estanque para manejar algunas entradas de los usuarios.

192
00:13:39,560 --> 00:13:46,180
‫Hablamos sobre asignaciones de acceso y vinculamos nuestra función de movimiento a la asignación de acceso de avance.

193
00:13:46,190 --> 00:13:53,300
‫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

194
00:13:53,300 --> 00:13:57,130
‫en lugar de solo imprimir algunos valores en el registro de salida.

195
00:13:57,140 --> 00:14:02,720
‫Entonces, en las próximas conferencias, vamos a configurarlo para que podamos comenzar a mover nuestro tanque.

196
00:14:03,290 --> 00:14:04,310
‫Te veré pronto.

