﻿1
00:00:04,460 --> 00:00:05,180
‫Hola y bienvenido.

2
00:00:05,180 --> 00:00:10,490
‫En esta lección, vamos a crear un modo de juego KML, que será solo uno de los

3
00:00:10,490 --> 00:00:17,660
‫posibles modos de juego que podemos crear debido a que tenemos un método de muerte virtual que se puede invocar en cualquiera de los

4
00:00:17,660 --> 00:00:19,730
‫modos de juego. modos que queremos.

5
00:00:20,000 --> 00:00:24,290
‫Profundicemos y veamos cómo vamos a implementar este método virtual.

6
00:00:25,600 --> 00:00:28,600
‫Así que nos gustaría que nuestro juego pudiera terminar.

7
00:00:28,610 --> 00:00:29,710
‫¿Qué significa que un juego termine?

8
00:00:29,710 --> 00:00:34,720
‫Significa que entramos en algún tipo de estado en el que tenemos el uno o lo hemos perdido.

9
00:00:35,080 --> 00:00:37,210
‫Informamos al jugador usando alguna interfaz de usuario.

10
00:00:37,210 --> 00:00:42,880
‫Les damos la opción de reiniciar y jugar de nuevo, algo por el estilo.

11
00:00:43,000 --> 00:00:46,830
‫Ahora, las clases involucradas con esto generalmente son un modo de juego.

12
00:00:46,840 --> 00:00:52,210
‫El modo de juego es responsable de decidir las reglas del juego, como quién ganó y quién perdió.

13
00:00:52,840 --> 00:00:56,410
‫Y para eso, vamos a necesitar saber quién está siendo asesinado.

14
00:00:56,410 --> 00:01:02,440
‫Así que vamos a tener este método virtual aquí llamado peón muerto, que será llamado como peón

15
00:01:02,440 --> 00:01:03,940
‫tirador cuando muera.

16
00:01:03,940 --> 00:01:09,130
‫Sea o no el A. YO. o es el jugador el que está muriendo.

17
00:01:10,450 --> 00:01:15,280
‫Y además, quiero agregar una pequeña complicación aquí, y es que tendrá diferentes modos de juego

18
00:01:15,280 --> 00:01:18,310
‫derivados de nuestro modo principal de juego de disparos.

19
00:01:18,610 --> 00:01:20,290
‫Implementarán ese modo de juego.

20
00:01:20,290 --> 00:01:21,520
‫Eso es lo que significa la flecha aquí.

21
00:01:21,520 --> 00:01:25,780
‫A menudo es un poco contradictorio la forma en que va la flecha, pero mátalos a todos.

22
00:01:25,780 --> 00:01:33,250
‫El modo de juego hereda del modo de juego de disparos y anula el peón muerto para contar y decidir de manera

23
00:01:33,250 --> 00:01:35,710
‫diferente sobre las reglas del juego.

24
00:01:35,710 --> 00:01:41,740
‫Es por eso que quiero poner un método de muerte de peón virtual en el modo de juego de disparos principal

25
00:01:42,160 --> 00:01:48,100
‫y luego implementarlo o anularlo nuevamente en el modo de juego matar a todos, que será el modo de juego que

26
00:01:48,100 --> 00:01:49,360
‫estamos implementando para nosotros.

27
00:01:49,660 --> 00:01:54,430
‫Y puedes elegir hacer diferentes modos de juego en los que tal vez solo quieras matar a una cierta cantidad

28
00:01:54,430 --> 00:01:58,420
‫de enemigos en el nivel en lugar de a todos o algo por el estilo.

29
00:01:58,420 --> 00:02:00,430
‫Tal vez capturar la bandera, algo diferente.

30
00:02:01,960 --> 00:02:08,470
‫Pero básicamente lo que sucederá es que el tirador... encontrará el modo de juego que tiene el

31
00:02:08,470 --> 00:02:12,850
‫tipo de modo de juego de disparos y lo llamará muerto.

32
00:02:13,090 --> 00:02:18,970
‫Y luego, dependiendo de la implementación que realmente esté allí, pasará a la implementación a

33
00:02:18,970 --> 00:02:20,980
‫través de la anulación.

34
00:02:22,000 --> 00:02:28,330
‫Ahora, otra complicación aquí es que nuestra lógica de interfaz de usuario y la lógica de reinicio es realmente algo que

35
00:02:28,330 --> 00:02:35,140
‫debería suceder en la interfaz de usuario del controlador del jugador, siendo generalmente competencia del jugador en lugar de algo global como el

36
00:02:35,140 --> 00:02:36,070
‫modo de juego.

37
00:02:36,340 --> 00:02:42,790
‫Esto es especialmente cierto en los juegos multijugador porque el modo de juego en realidad no existe en la máquina

38
00:02:42,790 --> 00:02:45,100
‫del jugador, solo existe en el servidor.

39
00:02:45,110 --> 00:02:49,060
‫Entonces, cualquier cosa de la interfaz de usuario debería estar sucediendo en el controlador del reproductor.

40
00:02:49,600 --> 00:02:52,630
‫Esa es una complicación de la que no debemos preocuparnos porque este no

41
00:02:52,630 --> 00:02:57,190
‫es un juego multijugador, pero aún así es bueno usar las clases para lo que se espera que se usen en Unreal.

42
00:02:57,940 --> 00:03:04,690
‫Entonces, el controlador de jugador, la clase de controlador de jugador raíz real tiene un método virtual llamado juego que

43
00:03:04,690 --> 00:03:12,550
‫ha finalizado específicamente para este propósito, de modo que el modo de juego puede llamar a este método y podemos implementarlo en nuestro propio

44
00:03:12,550 --> 00:03:17,500
‫controlador de juego de disparos para hacer UI, reiniciar todo ese tipo de cosas.

45
00:03:17,950 --> 00:03:23,560
‫Pero necesitaremos llamarlo desde nuestro modo de juego cuando hayamos decidido que el juego ha terminado.

46
00:03:23,560 --> 00:03:29,950
‫Así que llamaremos que el juego virtual ha terminado en el controlador del jugador raíz y luego, debido a que el

47
00:03:29,960 --> 00:03:35,230
‫controlador del jugador raíz es en realidad un jugador de disparos, un controlador terminará desviándose y llamando.

48
00:03:35,230 --> 00:03:36,070
‫Este juego ha terminado.

49
00:03:36,070 --> 00:03:41,980
‫Así que parece una ruta tortuosa que vamos a llamar desde nuestro peón tirador a través del modo de juego tirador hasta

50
00:03:41,980 --> 00:03:46,360
‫el modo de juego matarlos a todos al controlador del jugador al controlador del jugador tirador.

51
00:03:46,690 --> 00:03:52,300
‫Pero esto nos permite mucha flexibilidad en términos de decir, bueno, podemos mezclar y combinar diferentes controladores de juego que

52
00:03:52,300 --> 00:03:55,720
‫mostrarán la interfaz de usuario de diferentes maneras, en diferentes niveles.

53
00:03:55,990 --> 00:04:00,070
‫Podemos mezclar y combinar diferentes modos de juego que funcionarán de diferentes maneras, y esa es la razón

54
00:04:00,070 --> 00:04:02,200
‫por la que lo diseñé de esta manera.

55
00:04:02,200 --> 00:04:07,720
‫Es un poco exagerado para nuestro proyecto, pero te muestra cómo esto podría extenderse a otros proyectos con

56
00:04:07,720 --> 00:04:11,740
‫modos de capturar el juego y diferentes tipos de controlador de jugador.

57
00:04:12,100 --> 00:04:14,170
‫Así que vamos a intentar implementarlo.

58
00:04:14,620 --> 00:04:18,010
‫Vamos a ir y antes que nada, encontrar un modo de juego de ruta.

59
00:04:18,010 --> 00:04:22,060
‫Ya hay uno creado porque comencé desde un proyecto de C++.

60
00:04:22,450 --> 00:04:28,090
‫Tenemos esta base de modo de juego de disparos simple y lo que quiero hacer aquí

61
00:04:28,090 --> 00:04:35,770
‫es crear una función pública que va a regresar vacía y va a ser... asesinado y vamos a tener que pasar en el...

62
00:04:35,770 --> 00:04:37,420
‫que fue asesinado aquí.

63
00:04:37,420 --> 00:04:42,310
‫Así que va a ser una... estrella llamada... muerta así.

64
00:04:42,400 --> 00:04:46,630
‫Y luego, al principio, vamos a hacer de esto un método virtual y vamos a

65
00:04:46,630 --> 00:04:50,680
‫seguir adelante y crear una implementación básica que esencialmente no hace nada aquí.

66
00:04:50,710 --> 00:04:52,900
‫Luego vamos a crear una subclase.

67
00:04:52,900 --> 00:05:00,280
‫Entonces, la nueva clase de C ++, va a mostrar todas las clases y vamos a buscar la base del

68
00:05:00,280 --> 00:05:10,240
‫modo de juego shooter simple shooter como nuestra clase base y vamos a llamar a esto el modo de juego kill em all así y seguir adelante

69
00:05:10,240 --> 00:05:11,830
‫y crear esa clase.

70
00:05:12,010 --> 00:05:17,950
‫Luego, cuando se haya compilado, quiero cambiar por un segundo e ir a nuestro personaje de tirador.

71
00:05:18,100 --> 00:05:23,350
‫CP Y puedes ver aquí que tenemos nuestro muerto en el método de recibir daño.

72
00:05:23,920 --> 00:05:30,430
‫Ahora, si esto está muerto, lo que quiero hacer es apoderarme de nuestro modo de juego y llamar a los

73
00:05:30,430 --> 00:05:30,880
‫muertos.

74
00:05:31,240 --> 00:05:37,660
‫Entonces, la forma en que hacemos esto es que comenzamos llamando para obtener el mundo para obtener el modo de juego.

75
00:05:37,900 --> 00:05:40,540
‫Entonces es salir del modo de juego.

76
00:05:40,720 --> 00:05:46,690
‫Y luego lo que queremos hacer es que este modo de juego sea del tipo correcto, que es el simple, el raíz,

77
00:05:46,690 --> 00:05:52,120
‫el modo de juego de disparos simple que nos permite luego cambiar este personaje, usarlo con diferentes modos de juego,

78
00:05:52,120 --> 00:05:54,670
‫como capturar los modos de juego de bandera.

79
00:05:55,210 --> 00:06:01,390
‫Entonces, la forma en que podemos hacer esto, podemos usar los paréntesis angulares en el modo obtener o jugar aquí.

80
00:06:01,510 --> 00:06:07,570
‫Y vamos a hacer un modo de juego de disparos simple y vamos a necesitar incluir eso en la parte superior.

81
00:06:08,440 --> 00:06:18,040
‫Por lo tanto, incluya la base del modo de juego de disparos simple, por lo que no entendí bien el nombre completo de la clase.

82
00:06:18,040 --> 00:06:18,460
‫Pienso.

83
00:06:18,460 --> 00:06:21,880
‫Así que va a ser una base de modo de juego de disparo simple.

84
00:06:22,450 --> 00:06:28,420
‫Eso es lo que estamos tratando de obtener y podemos continuar y almacenarlo en un puntero variable, llamémoslo el modo

85
00:06:28,420 --> 00:06:29,290
‫de juego.

86
00:06:29,290 --> 00:06:35,800
‫Y luego lo que queremos hacer es en esta nueva línea, probablemente queramos comprobar que tenemos esto y que no es

87
00:06:35,800 --> 00:06:36,730
‫un puntero nulo.

88
00:06:36,730 --> 00:06:40,570
‫Entonces, el modo de juego no es igual a un puntero nulo.

89
00:06:40,600 --> 00:06:47,560
‫Y luego, si no es igual a todos los puntos de ahí es donde queremos llamar al modo de juego peón de

90
00:06:47,680 --> 00:06:50,530
‫flecha muerto y el peón muerto es así?

91
00:06:50,620 --> 00:06:54,940
‫Así que ahora el modo de juego es consciente de que se ha matado a un peón.

92
00:06:55,220 --> 00:07:00,460
‫Pequeño mini desafío para que anules el modo de juego matarlos a todos para que puedas.

93
00:07:00,520 --> 00:07:06,670
‫Cierra la sesión cuando se elimine el -- y configúralo como el modo de juego predeterminado en tu mapa.

94
00:07:06,850 --> 00:07:07,210
‫Bueno.

95
00:07:07,210 --> 00:07:09,460
‫Así que espero que hayas probado ese pequeño mini desafío.

96
00:07:09,760 --> 00:07:11,770
‫Vamos a seguir adelante e implementar.

97
00:07:11,770 --> 00:07:17,680
‫Así que voy a hacer esto copiando la sección pública de nuestra base de modo de juego de disparos simple, y es difícil hacer

98
00:07:17,680 --> 00:07:19,240
‫un seguimiento de todas estas cosas.

99
00:07:19,660 --> 00:07:23,800
‫Luego vamos a pasar a nuestra base de modo de juego matarlos a todos, que hereda de ella.

100
00:07:24,430 --> 00:07:31,300
‫Y vamos a pegar el método virtual y vamos a agregar la palabra clave anular para asegurarnos de

101
00:07:31,300 --> 00:07:33,610
‫que estamos anulando este método correctamente.

102
00:07:34,760 --> 00:07:39,350
‫Luego voy a crear una implementación en C++ para nuestra base de modo de juego KML.

103
00:07:40,130 --> 00:07:42,920
‫Aquí es donde deberíamos recibir ese mensaje de registro.

104
00:07:42,920 --> 00:07:47,030
‫Y solo para tener mucho cuidado, sabemos que no hay nada en la implementación.

105
00:07:47,390 --> 00:07:48,380
‫Pero nunca se sabe.

106
00:07:48,390 --> 00:07:52,080
‫Las cosas podrían cambiar más adelante y podríamos ser mordidos en la bomba.

107
00:07:52,100 --> 00:07:54,950
‫Así que queremos hacer un peón muerto.

108
00:07:56,340 --> 00:07:58,830
‫Súper - asesinado con el - asesinado.

109
00:07:59,280 --> 00:07:59,820
‫Tiene sentido.

110
00:08:00,420 --> 00:08:07,830
‫Y luego queremos hacer un diálogo aquí básicamente diciendo que un... fue asesinado.

111
00:08:08,490 --> 00:08:15,900
‫Y podemos ver si eso funciona yendo a Unreal y compilando, luego yendo al elemento de planos en

112
00:08:15,900 --> 00:08:20,850
‫la barra de herramientas y seleccionando en la configuración del proyecto.

113
00:08:20,850 --> 00:08:27,420
‫El modo de juego predeterminado que queremos ser, si seleccionamos el modo de juego, la clase base, queremos que sea

114
00:08:27,420 --> 00:08:31,710
‫el modo de juego base matarlos a todos, básicamente seguir adelante y hacerlo.

115
00:08:31,710 --> 00:08:35,370
‫De hecho, eso no es exactamente lo que queremos hacer si vamos y seleccionamos.

116
00:08:35,730 --> 00:08:44,100
‫Queríamos que en realidad fuera un modelo secundario de eso y ya tenemos un modelo secundario que tiene muchas

117
00:08:44,100 --> 00:08:45,000
‫cosas configuradas.

118
00:08:45,000 --> 00:08:47,520
‫Así que hagamos un trabajo de crianza allí.

119
00:08:48,390 --> 00:08:53,850
‫Iremos a las raíces, encontraremos el modo de juego de disparos BP, que tenemos aquí.

120
00:08:54,360 --> 00:09:03,060
‫Vamos a cambiar el nombre de este modo de juego BP kill all y luego podemos abrirlo, acoplar la ventana, abrir el editor

121
00:09:03,060 --> 00:09:11,160
‫de planos completo, ir a la configuración de la clase y cambiar el padre al modo de juego KML, básicamente

122
00:09:11,160 --> 00:09:11,670
‫C++.

123
00:09:12,150 --> 00:09:18,360
‫Y de esa manera deberíamos estar ejecutando el código correcto si vamos a nuestro mensaje para

124
00:09:18,360 --> 00:09:26,490
‫generar el registro y presionamos reproducir y luego matamos a un personaje, tenemos un problema que parece no tener la configuración correcta,

125
00:09:26,820 --> 00:09:35,550
‫así que si volvemos a los valores predeterminados de clase y cambie la clase predeterminada para que sea el personaje tirador de BP, eso

126
00:09:35,550 --> 00:09:36,780
‫debería ser correcto.

127
00:09:36,960 --> 00:09:39,300
‫Guarde y compile en caso de que se haya equivocado.

128
00:09:39,300 --> 00:09:41,910
‫Y luego verifique mis planos desplegables aquí.

129
00:09:41,940 --> 00:09:44,640
‫Se ha seleccionado el juego KML, el de C++.

130
00:09:44,640 --> 00:09:49,470
‫Así que en realidad queremos elegir el modelo aquí y seguir adelante y presionar reproducir.

131
00:09:49,470 --> 00:09:50,820
‫Ahora tenemos nuestro peón.

132
00:09:50,820 --> 00:09:55,800
‫Podemos seguir adelante y matar a este tipo y puedes ver que un peón fue asesinado.

133
00:09:55,800 --> 00:09:57,090
‫¿Está Prince en el mensaje de registro?

134
00:09:57,420 --> 00:09:59,820
‫Eso está funcionando fantásticamente.

135
00:10:00,360 --> 00:10:05,070
‫Ahora, en la siguiente sección, veremos la segunda parte de esto, que

136
00:10:05,070 --> 00:10:12,630
‫dice que el juego ha terminado cuando en realidad queremos terminar el juego y poder reiniciarlo a partir de ahí.

137
00:10:13,110 --> 00:10:15,720
‫Así que te veré en esa conferencia.

