﻿1
00:00:04,350 --> 00:00:05,430
‫Hola y bienvenido.

2
00:00:05,430 --> 00:00:12,630
‫En esta lección, vamos a aprender cómo podemos obtener un indicador del acto de propiedad de un componente.

3
00:00:12,840 --> 00:00:16,680
‫Vamos a averiguar qué es un puntero, qué direcciones hay en la memoria y

4
00:00:16,680 --> 00:00:19,560
‫también las vamos a imprimir en nuestros mensajes de registro.

5
00:00:19,710 --> 00:00:20,370
‫Sumerjámonos.

6
00:00:21,150 --> 00:00:27,570
‫Entonces, tomemos un segundo para comprender un concepto central de lo que sucede en la programación en general

7
00:00:27,570 --> 00:00:29,100
‫sobre las direcciones variables.

8
00:00:29,100 --> 00:00:30,750
‫¿Qué es una dirección de una variable?

9
00:00:30,750 --> 00:00:41,280
‫Bueno, almacenamos todas nuestras variables en la memoria porque hay chips RAM en su computadora y las variables requieren memoria

10
00:00:41,280 --> 00:00:43,890
‫para almacenar sus datos.

11
00:00:43,890 --> 00:00:51,790
‫Entonces, un número de coma flotante requiere 32 bits de datos o 64, si es un número entero doble, requiere cierta cantidad

12
00:00:51,790 --> 00:00:52,680
‫de memoria.

13
00:00:52,680 --> 00:00:58,080
‫Además, cuanto más grandes sean las estructuras que tenga o más grandes las clases que tenga, los actores pueden ser

14
00:00:58,080 --> 00:01:03,600
‫muy grandes y abarcar una gran cantidad de datos que pueden requerir incluso unos pocos kilobytes de memoria por actor, cosas

15
00:01:03,600 --> 00:01:03,960
‫así.

16
00:01:04,620 --> 00:01:12,270
‫Bueno, esa memoria tiene que vivir en algún lugar de este gran campo de datos vacíos que son sus bancos de memoria.

17
00:01:12,750 --> 00:01:16,290
‫Y esa ubicación se conoce como una dirección.

18
00:01:16,440 --> 00:01:18,180
‫Entonces, ¿cómo funciona esto en la práctica?

19
00:01:18,540 --> 00:01:21,840
‫Bueno, imagina que tenemos este gran campo de ceros y unos.

20
00:01:21,840 --> 00:01:24,900
‫Esos son los datos en tu ram.

21
00:01:25,410 --> 00:01:32,550
‫Bueno, entonces la variable, una variable de actor llamada mi actor, necesita tener una cierta ubicación dentro de esa

22
00:01:32,550 --> 00:01:36,900
‫memoria que se asigna para almacenar los datos en el actor.

23
00:01:37,260 --> 00:01:42,030
‫Entonces, esta sección roja de la memoria podría ser donde almacenamos los datos

24
00:01:42,420 --> 00:01:50,580
‫para este actor en particular, y tiene una dirección que generalmente se indica en binario o hexadecimal, que es esencialmente solo la ubicación.

25
00:01:50,580 --> 00:01:57,780
‫Si empiezas a contar todos los bytes, todos los unos y ceros aquí, de hecho, en realidad no contamos los unos

26
00:01:57,780 --> 00:01:59,160
‫y ceros individuales.

27
00:01:59,160 --> 00:02:03,300
‫Contamos en pasos de ocho, pero eso no es demasiado importante.

28
00:02:03,300 --> 00:02:04,170
‫Contamos los bytes.

29
00:02:04,680 --> 00:02:07,770
‫Esa es esencialmente la dirección donde comenzamos.

30
00:02:08,780 --> 00:02:10,880
‫Hablando de nuestro actor.

31
00:02:11,090 --> 00:02:14,150
‫Y luego cada tipo tiene un cierto tamaño.

32
00:02:14,150 --> 00:02:17,960
‫Entonces sabemos que el actor requeriría tantos bytes de datos.

33
00:02:17,960 --> 00:02:22,940
‫Y eso nos dice dónde encontrar los datos sobre nuestro actor en particular.

34
00:02:23,450 --> 00:02:24,830
‫Entonces, ¿por qué es importante?

35
00:02:24,860 --> 00:02:29,360
‫Bueno, echemos un vistazo a la situación en la que podríamos querer hacer una toma.

36
00:02:29,720 --> 00:02:30,650
‫dos actores

37
00:02:30,650 --> 00:02:34,070
‫Solo tenemos dos variables que hacen referencia a los mismos datos.

38
00:02:34,640 --> 00:02:38,200
‫Bueno, en el caso ingenuo, simplemente copiaríamos esto.

39
00:02:38,200 --> 00:02:46,820
‫Así que tenemos una parte de la memoria asignada a la variable mi actor por otra parte de la memoria asignada a una variable

40
00:02:46,820 --> 00:02:52,040
‫vacía llamada tu actor, a la que aún no le hemos asignado nada.

41
00:02:52,640 --> 00:02:59,000
‫Y luego, lo que queremos hacer porque queremos que contengan los mismos datos, es simplemente asignar uno al

42
00:02:59,000 --> 00:02:59,450
‫otro.

43
00:02:59,720 --> 00:03:07,010
‫Y eso esencialmente resulta en que hacemos una copia de todos los bits de datos que estaban en mi actor y los

44
00:03:07,010 --> 00:03:10,190
‫ponemos en todos los bits que componen su actor.

45
00:03:10,820 --> 00:03:17,930
‫Entonces, este puede ser un procedimiento bastante costoso porque su CPU tiene que pasar y evaluar cada pieza de memoria en

46
00:03:17,930 --> 00:03:22,550
‫el original y colocarla en la nueva ubicación, lo que lleva tiempo.

47
00:03:22,670 --> 00:03:25,750
‫Ahora hay una forma de evitar esto usando algo llamado puntero.

48
00:03:25,760 --> 00:03:33,470
‫Así que aquí, en lugar de almacenar la totalidad de Mi actor, tenemos una variable llamada mi actor

49
00:03:33,470 --> 00:03:38,770
‫o un puntero actor a actor que no almacena todo el actor.

50
00:03:38,780 --> 00:03:42,100
‫Simplemente almacena la dirección donde puede encontrar un acto.

51
00:03:42,110 --> 00:03:46,520
‫Entonces puede ver que en realidad usa mucha menos memoria para almacenar una dirección.

52
00:03:46,520 --> 00:03:53,930
‫Y luego lo que hacemos es en su actor, almacenamos la dirección de mi actor, por lo que termina apuntando al actor

53
00:03:54,260 --> 00:03:58,880
‫original en lugar de copiar los datos, de ahí el puntero del nombre.

54
00:03:59,360 --> 00:04:01,820
‫Ahora bien, esta no es la sintaxis real en C++.

55
00:04:01,820 --> 00:04:04,130
‫En C++, la sintaxis es mucho más condensada.

56
00:04:04,640 --> 00:04:09,610
‫Decimos que algo es un puntero poniendo una estrella después del tipo.

57
00:04:09,620 --> 00:04:17,930
‫Entonces, una estrella de actor significa que este es un puntero de actor y para obtener la dirección de una variable, usamos un

58
00:04:17,930 --> 00:04:19,670
‫ampersand que no usaremos.

59
00:04:19,670 --> 00:04:24,680
‫Haga mucho uso de esta dirección desactivada todavía porque hay muchas funciones en irreal que devuelven

60
00:04:24,680 --> 00:04:25,190
‫punteros.

61
00:04:25,190 --> 00:04:30,860
‫Entonces, solo necesitamos saber cómo usar esos puntos en lugar de crearlos por el momento.

62
00:04:31,730 --> 00:04:40,060
‫Entonces, una de esas funciones que nos permite acceder a otros objetos en nuestra escena es get ona.

63
00:04:40,070 --> 00:04:46,310
‫Entonces, ¿por qué se aplica esto cuando tenemos un componente que es propiedad de un actor?

64
00:04:46,490 --> 00:04:53,600
‫Entonces, si queríamos que este componente hablara con nuestro actor, para obtener su ubicación, establecer su ubicación

65
00:04:53,600 --> 00:04:58,370
‫y hacer cosas así, entonces necesitamos poder apuntar a ese actor.

66
00:04:58,370 --> 00:04:59,780
‫No queremos tomar una copia de ella.

67
00:05:00,020 --> 00:05:03,290
‫De hecho, no queremos copiarlo porque queremos cambiar al actor.

68
00:05:03,290 --> 00:05:06,950
‫Si estamos haciendo un cambio en una copia, en realidad no aparecerá en la escena.

69
00:05:07,430 --> 00:05:13,640
‫Entonces necesitamos poder almacenar una variable que sea un puntero a un actor.

70
00:05:14,330 --> 00:05:19,580
‫La forma en que hacemos esto, como acabamos de ver en las diapositivas, es tener un tipo de actor.

71
00:05:19,760 --> 00:05:25,940
‫Pero luego ponemos una estrella al final que nos dice que este no es un actor que se almacena aquí, es

72
00:05:25,940 --> 00:05:28,670
‫solo la dirección de un actor que se almacena.

73
00:05:29,240 --> 00:05:36,530
‫Así que tomamos el actor y lo llamaremos propietario, y luego lo igualaremos al resultado

74
00:05:36,530 --> 00:05:39,080
‫de llamar a obtener propietario.

75
00:05:39,080 --> 00:05:47,010
‫Entonces, obtener propietario es una función de un componente de actor que le permite obtener un puntero de propietario, obtener un

76
00:05:47,030 --> 00:05:53,480
‫puntero de actor que apunta al propietario, poner un punto y coma al final de esa línea.

77
00:05:53,720 --> 00:06:00,740
‫Y lo que tenemos aquí es una variable que almacena la dirección de un actor que posee este componente en

78
00:06:00,740 --> 00:06:01,400
‫particular.

79
00:06:01,760 --> 00:06:07,550
‫Así que me gustaría desafiarte a que hagas algo imprimiendo la dirección de esta variable.

80
00:06:07,550 --> 00:06:12,530
‫Entonces use la variable actor y use el porcentaje que formatea.

81
00:06:12,590 --> 00:06:14,690
‫Especifique finalizar los registros.

82
00:06:14,690 --> 00:06:19,490
‫Entonces, el porcentaje de usted esencialmente significa que está usando un número entero sin signo.

83
00:06:19,490 --> 00:06:24,980
‫Eso significa un número entero que no puede ser negativo, lo cual tiene sentido porque las direcciones no

84
00:06:25,790 --> 00:06:32,060
‫pueden ser negativas cuando hablamos de dónde encontrar memoria y luego averiguar qué imprime, ve a jugar, mira el mensaje de

85
00:06:32,060 --> 00:06:33,710
‫registro, mira qué se imprime.

86
00:06:34,190 --> 00:06:37,760
‫¿Cambia entre diferentes jugadas si dejas de jugar y empiezas a jugar de nuevo?

87
00:06:38,090 --> 00:06:41,720
‫¿Y si la película cuenta con varios actores?

88
00:06:41,900 --> 00:06:45,650
‫¿Hay varias direcciones diferentes impresas en la consola?

89
00:06:45,650 --> 00:06:48,380
‫Pausa el video e investiga un poco.

90
00:06:51,940 --> 00:06:52,360
‫Bueno.

91
00:06:52,360 --> 00:06:53,050
‫Bienvenido de nuevo.

92
00:06:53,500 --> 00:07:03,370
‫Vamos a ir a este otro registro y vamos a decir empresa de mudanzas, dirección propia, porcentaje de dos puntos.

93
00:07:03,400 --> 00:07:07,270
‫Ya sabes, ahí es donde va a poner el punto de valor.

94
00:07:07,990 --> 00:07:10,150
‫Y luego vamos a poner el puntero real.

95
00:07:10,150 --> 00:07:12,160
‫Así que vamos a tener al dueño aquí.

96
00:07:12,940 --> 00:07:16,120
‫Así que va a imprimir la dirección del propietario.

97
00:07:16,540 --> 00:07:18,970
‫Pasemos a lo irreal.

98
00:07:19,180 --> 00:07:21,670
‫Golpea control alt f 11.

99
00:07:21,940 --> 00:07:24,550
‫Y cuando termine de compilarse, vamos a darle al play.

100
00:07:24,550 --> 00:07:29,680
‫Y lo que estamos viendo es que el mensaje de registro mueve la dirección del propietario y nos está dando

101
00:07:29,680 --> 00:07:32,050
‫un número muy grande en realidad para esta dirección.

102
00:07:32,440 --> 00:07:36,250
‫¿Qué pasa si dejo de jugar y vuelvo a jugar solo por un segundo?

103
00:07:36,490 --> 00:07:42,700
‫Puedes ver que la dirección es sustancialmente diferente y eso se debe a que cada vez

104
00:07:43,180 --> 00:07:51,250
‫que presionamos reproducir, Unreal está creando un conjunto completamente nuevo de actores en la escena, básicamente listos para jugar, comenzando desde

105
00:07:51,250 --> 00:07:51,810
‫cero.

106
00:07:51,820 --> 00:07:57,160
‫Es por eso que vemos nuevas ubicaciones de direcciones cada vez que presionamos reproducir.

107
00:07:57,190 --> 00:08:04,900
‫¿Qué sucede si fui a este pilar, por ejemplo, y agregué un movimiento, un componente al pilar también, y presionamos reproducir y nos

108
00:08:04,900 --> 00:08:07,990
‫desplazamos hacia abajo hasta el final de mis registros?

109
00:08:07,990 --> 00:08:15,220
‫Puede ver que aquí se imprimen dos direcciones diferentes para cada marca porque hay dos actores

110
00:08:15,220 --> 00:08:20,680
‫diferentes que se almacenan en dos ubicaciones diferentes en la memoria.

111
00:08:21,010 --> 00:08:25,930
‫Entonces, estas son las dos direcciones y pueden ver que en realidad

112
00:08:25,930 --> 00:08:31,660
‫hay bastantes megabytes de diferencia entre estas dos direcciones, lo que solo indica cuánta información Unreal

113
00:08:31,870 --> 00:08:38,040
‫almacena en la memoria y también por qué es importante ser eficiente con no hacer demasiadas copias.

114
00:08:38,350 --> 00:08:39,490
‫Eso es todo por esta conferencia.

115
00:08:39,760 --> 00:08:40,840
‫Te veré adentro.

116
00:08:40,840 --> 00:08:43,330
‫El próximo será hacer cosas más divertidas con punteros.

