﻿1
00:00:04,520 --> 00:00:05,630
‫Hola y bienvenido.

2
00:00:05,630 --> 00:00:11,450
‫En esta lección, vamos a aprender acerca de las funciones que viven no en los planos de nivel, sino

3
00:00:11,690 --> 00:00:14,240
‫en una clase de plano en particular.

4
00:00:14,240 --> 00:00:19,880
‫Estas se denominan funciones miembro y son absolutamente cruciales para la programación orientada a objetos.

5
00:00:20,210 --> 00:00:22,400
‫Vamos a sumergirnos y ver cómo funcionan.

6
00:00:23,270 --> 00:00:31,370
‫Entonces, en nuestra función de proyectil de generación en los planos de nivel, tenemos un montón de nodos aquí relacionados con agregar

7
00:00:31,400 --> 00:00:36,590
‫el impulso, obtener la dirección del impulso y obtener el componente de malla estática.

8
00:00:37,010 --> 00:00:43,310
‫Todos estos nodos utilizan la instancia del proyectil BP en profundidad.

9
00:00:43,700 --> 00:00:50,600
‫¿No sería genial si pudiéramos tomar todo este código y moverlo al proyectil BP para que el código

10
00:00:50,600 --> 00:00:54,860
‫que trata con esos datos viva con los datos mismos?

11
00:00:55,370 --> 00:00:59,300
‫Bueno, ese es todo el punto de la programación orientada a objetos.

12
00:00:59,300 --> 00:01:06,770
‫Entonces podemos definir la programación orientada a objetos como funciones que viven con los datos que manipulan.

13
00:01:07,490 --> 00:01:09,020
‫Entonces, ¿cómo funciona esto?

14
00:01:09,020 --> 00:01:13,250
‫¿Cómo podemos hacer funciones en instancias particulares de cosas?

15
00:01:14,000 --> 00:01:20,060
‫Bueno, una forma en que podemos hacer esto, podemos ir a nuestra clase de proyectil BP y asegurarnos

16
00:01:20,060 --> 00:01:26,960
‫de hacer clic en abrir el editor de planos completo. Puede ver que en este editor de planos completo hay un

17
00:01:26,960 --> 00:01:35,270
‫panel de mi plano y una sección de funciones. entonces podemos presionar la flecha más aquí para crear una nueva función en la clase de proyectil

18
00:01:35,270 --> 00:01:35,780
‫BP.

19
00:01:35,780 --> 00:01:41,900
‫Y voy a nombrar esta función, imprime tu nombre y esto imprime tu nombre.

20
00:01:41,900 --> 00:01:43,940
‫La función debería hacer precisamente eso.

21
00:01:44,240 --> 00:01:49,850
‫Podemos ver que tenemos un nodo que inicia la ejecución en esta función para que podamos sacar su

22
00:01:49,850 --> 00:01:52,430
‫pin de ejecución y escribir cadena de impresión.

23
00:01:52,430 --> 00:01:53,750
‫Así que eso se va a imprimir.

24
00:01:53,750 --> 00:01:54,320
‫Hola.

25
00:01:54,320 --> 00:01:57,140
‫No es exactamente el nombre de esta función, ¿verdad?

26
00:01:57,170 --> 00:01:59,090
‫Pero lo solucionaremos en un segundo.

27
00:01:59,780 --> 00:02:04,070
‫Así que lo que tenemos aquí se conoce como función miembro.

28
00:02:04,070 --> 00:02:11,990
‫Una función miembro es una función en una clase que siempre se llama en una instancia particular de una clase.

29
00:02:11,990 --> 00:02:18,020
‫Entonces no dices, voy a llamar o imprimes tu nombre en todos los proyectiles de BP.

30
00:02:18,440 --> 00:02:24,950
‫Tienes que decir, quiero llamar, escribe tu nombre en el proyectil BP número uno, o en el proyectil BP

31
00:02:24,950 --> 00:02:26,420
‫que acaba de generarse.

32
00:02:26,870 --> 00:02:36,580
‫Entonces, si vamos a nuestro plano de nivel, lo que tendría que hacer es tomar la referencia que salió del

33
00:02:36,590 --> 00:02:38,540
‫proyectil BP de generación.

34
00:02:39,110 --> 00:02:47,990
‫Y a partir de esa referencia, puede llamar a imprimir su nombre y puede ver que se conecta automáticamente

35
00:02:47,990 --> 00:02:51,770
‫a una nota de entrada especial llamada Destino.

36
00:02:51,890 --> 00:02:54,380
‫Y obviamente también tienes que conectar tus pines de ejecución.

37
00:02:54,380 --> 00:02:58,430
‫Voy a conectarlo para que suceda después de agregar impulso.

38
00:02:58,610 --> 00:03:07,220
‫Pero lo interesante de este nodo de entrada de objetivo especial es que si pasa al proyectil BP, verá

39
00:03:07,310 --> 00:03:08,690
‫esa impresión.

40
00:03:08,690 --> 00:03:12,620
‫Su nombre no tiene tal carga de entrada.

41
00:03:12,920 --> 00:03:14,510
‫Entonces, ¿qué está pasando aquí?

42
00:03:15,080 --> 00:03:24,020
‫Bueno, implícitamente, cualquier función miembro tiene un parámetro que es su objetivo actual o la instancia actual.

43
00:03:24,620 --> 00:03:31,670
‫Y puede obtener esto haciendo clic con el botón derecho en el gráfico de eventos del modelo y escribiendo self.

44
00:03:32,510 --> 00:03:37,850
‫Y puede ver que hay un nodo llamado obtener una referencia a sí mismo y simplemente crea un nodo propio como

45
00:03:37,850 --> 00:03:38,210
‫este.

46
00:03:38,660 --> 00:03:45,920
‫Y luego puede usar esta referencia de objeto propio para obtener cualquiera de las propiedades de este objeto en

47
00:03:45,920 --> 00:03:46,340
‫particular.

48
00:03:46,340 --> 00:03:53,240
‫Entonces, si quisiéramos obtener el nombre de nuestro proyectil BP, puede sacar la referencia propia y escribir

49
00:03:53,240 --> 00:03:56,900
‫obtener nombre para mostrar, lo que hemos hecho antes.

50
00:03:57,200 --> 00:04:00,980
‫Y luego puede conectar el nombre para mostrar en nuestra cadena de impresión.

51
00:04:01,370 --> 00:04:09,650
‫Entonces, cuando jugamos y disparamos un nuevo proyectil, puede ver que está imprimiendo el nombre del proyectil y puede

52
00:04:10,280 --> 00:04:17,180
‫ver si cada nuevo proyectil crea el nombre es diferente porque el yo al que

53
00:04:17,180 --> 00:04:23,600
‫se refiere la función miembro es un yo diferente es un proyectil diferente.

54
00:04:23,780 --> 00:04:31,490
‫Así que hemos aprendido que self es un nodo disponible dentro de una función miembro que siempre apunta

55
00:04:31,490 --> 00:04:35,120
‫a la instancia actual específica que estamos usando.

56
00:04:35,270 --> 00:04:40,160
‫Entonces, el objetivo principal de ver las funciones miembro en primer lugar, la razón por la que comenzamos

57
00:04:40,160 --> 00:04:45,620
‫fue debido a estos nodos en los planos de nivel, la forma en que obtenemos la combinación estática, obtenemos el vector

58
00:04:45,620 --> 00:04:48,020
‫directo y luego agregamos un impulso a estos.

59
00:04:48,620 --> 00:04:51,860
‫Estos sienten que deberían vivir en el proyectil BP.

60
00:04:51,860 --> 00:04:55,100
‫Y eso es lo que me gustaría desafiarte a hacer.

61
00:04:55,430 --> 00:04:58,670
‫Este es un cargo un poco complicado, pero estamos llegando al final de la sección.

62
00:04:58,670 --> 00:05:01,490
‫Así que te llevaré paso a paso.

63
00:05:02,120 --> 00:05:03,850
‫Así que vamos a hacer una función de lanzamiento.

64
00:05:04,030 --> 00:05:07,470
‫Shine on the BP project, también creado en los proyectos de BP.

65
00:05:07,480 --> 00:05:09,720
‫Iré a esas partes positivas y agregaré una nueva.

66
00:05:09,730 --> 00:05:10,840
‫Llámalo lanzamiento.

67
00:05:11,500 --> 00:05:18,670
‫Luego corte y pegue los nodos de los planos de nivel en esta función suya recién creada y

68
00:05:18,670 --> 00:05:21,850
‫asegúrese de conectar pines de ejecución, etc.

69
00:05:22,600 --> 00:05:24,820
‫Ahora vas a intentar compilar.

70
00:05:25,120 --> 00:05:30,190
‫No hemos hecho esto muy a menudo en blueprints, pero la compilación solo le permite revisar

71
00:05:30,400 --> 00:05:36,730
‫la ortografía de su código y asegurarse de que no haya ningún error que el compilador de Blueprint pueda prever.

72
00:05:36,940 --> 00:05:43,570
‫Entonces, la forma de hacer esto es ir al botón en la parte superior izquierda y presionar compilar, y si

73
00:05:43,570 --> 00:05:48,550
‫hay algún error, aparecerá en la parte inferior del pequeño panel llamado resultados del compilador.

74
00:05:48,550 --> 00:05:53,470
‫Puede ver que tengo una compilación exitosa, pero cualquier error aparecerá aquí y, a veces, obtendrá un

75
00:05:53,470 --> 00:05:57,010
‫poco de rojo en un nodo para indicar dónde está el error.

76
00:05:57,910 --> 00:06:03,550
‫Y me gustaría ver si puede tratar de entender lo que dice ese error y tratar de corregir

77
00:06:03,760 --> 00:06:07,210
‫el error usando el nuevo nodo propio que hemos aprendido.

78
00:06:07,990 --> 00:06:15,730
‫Y luego debe continuar y llamar a esa función desde los planos de nivel arrastrando fuera de la instancia como lo hicimos para

79
00:06:15,730 --> 00:06:22,570
‫nuestro nodo de impresión usted mismo arrastrando fuera de la instancia del nuevo proyectil creado a partir del nodo de

80
00:06:22,570 --> 00:06:25,720
‫generación y llamar a la función de lanzamiento.

81
00:06:26,260 --> 00:06:28,150
‫Pausa el video y pruébalo.

82
00:06:31,280 --> 00:06:31,970
‫Bueno.

83
00:06:31,970 --> 00:06:32,780
‫Bienvenido de nuevo.

84
00:06:32,840 --> 00:06:39,260
‫Así que iré a nuestro proyectil BP, presionaré el botón más junto a las funciones en el

85
00:06:39,260 --> 00:06:47,030
‫panel de mi plano y escribiré para nombrar la función que vamos a volver a nuestro plano de nivel, cortar

86
00:06:47,030 --> 00:06:51,440
‫los nodos y entrar en el Proyectil BP y pégalos.

87
00:06:52,130 --> 00:06:58,460
‫Ahora tengo que conectar la ejecución desde el lanzamiento para agregar impulso y ahora voy a presionar, compilar

88
00:06:58,490 --> 00:07:04,580
‫y verán, obtengo un error en el macerado estático o obtengo un nodo de maceración estático.

89
00:07:05,120 --> 00:07:10,310
‫Y si observa los resultados del compilador, dice que usa un objetivo no válido.

90
00:07:10,820 --> 00:07:15,240
‫Entonces, apuntar esta entrada aquí no es correcto.

91
00:07:15,260 --> 00:07:24,470
‫Ahora, como le recomendé, puede hacer clic con el botón derecho y escribir self para obtener una referencia a sí

92
00:07:24,470 --> 00:07:28,190
‫mismo y luego llevar ese yo al objetivo.

93
00:07:28,850 --> 00:07:34,430
‫Ahora, si presiona compilar nuevamente, puede ver que el error desapareció y

94
00:07:34,430 --> 00:07:43,250
‫se compila correctamente porque lo que está sucediendo es que ahora puede obtener los componentes estáticos del proyectil actual.

95
00:07:43,490 --> 00:07:45,770
‫Esta función de lanzamiento está siendo llamada.

96
00:07:46,550 --> 00:07:56,030
‫Entonces, si volvemos a nuestros planos de nivel ahora, podemos tomar el pin de salida de nuestro actor de generación y podemos escribir

97
00:07:56,030 --> 00:07:59,890
‫lanzamiento para llamar a nuestra función de lanzamiento.

98
00:07:59,900 --> 00:08:06,050
‫Puede ver que el pin de ejecución se conectó automáticamente para mí y luego, después de la función

99
00:08:06,050 --> 00:08:12,140
‫de inicio, podemos conectar nuestra función de imprimir su nombre si queremos, aunque eso fue solo con

100
00:08:12,560 --> 00:08:18,920
‫fines de depuración y demostración y si lo prueba, usted puede ver que todavía se está lanzando con éxito,

101
00:08:18,920 --> 00:08:24,470
‫excepto que ahora el código que se ocupa del lanzamiento vive en el propio proyectil.

102
00:08:24,560 --> 00:08:25,190
‫Buena cosa.

103
00:08:25,190 --> 00:08:30,800
‫Hemos aprendido acerca de uno de los conceptos centrales de la programación orientada a objetos en esta lección sobre funciones miembro.

104
00:08:30,950 --> 00:08:32,510
‫Te veré en la próxima.

