﻿1
00:00:04,580 --> 00:00:05,390
‫Hola y bienvenido.

2
00:00:05,390 --> 00:00:10,730
‫En esta conferencia, vamos a conectar nuestro sistema de salud al modelo de animación para que

3
00:00:10,730 --> 00:00:13,700
‫pueda filmar a este personaje hasta que muera.

4
00:00:13,700 --> 00:00:15,380
‫Vamos a sumergirnos y ver cómo funciona.

5
00:00:16,580 --> 00:00:22,580
‫Por lo tanto, desea que este booleano en los planos de animación se establezca automáticamente desde el juego.

6
00:00:23,180 --> 00:00:29,270
‫Y si pasamos al gráfico de eventos y observamos cómo funciona esto actualmente, otras propiedades como esta,

7
00:00:29,270 --> 00:00:34,370
‫como obtener velocidad, activarse, transformar, vamos al peón y estamos haciendo una función de

8
00:00:34,370 --> 00:00:38,270
‫obtención en él. cada vez que queremos actualizar la animación.

9
00:00:38,810 --> 00:00:43,910
‫Así que queremos seguir este modelo en el que vamos a ir y saber si nuestro jugador está

10
00:00:43,910 --> 00:00:45,020
‫muerto o no.

11
00:00:45,320 --> 00:00:52,130
‫Tal es así que necesitamos exponer alguna funcionalidad, alguna función invocable desde nuestro C++.

12
00:00:52,670 --> 00:00:57,050
‫Así que vayamos a C++ y echemos un vistazo a lo que hay.

13
00:00:57,230 --> 00:01:02,300
‫Así que podríamos crear una función pública, pero eso no necesariamente la hace accesible.

14
00:01:03,140 --> 00:01:09,740
‫Para hacer la accesibilidad, necesitamos tener una nueva función que lo haga visible para los planos y el sistema de herramientas de

15
00:01:09,740 --> 00:01:10,850
‫encabezado en rieles.

16
00:01:11,120 --> 00:01:15,050
‫Pero tenemos que ir un paso más allá de simplemente tenerlo como una nueva función.

17
00:01:15,050 --> 00:01:20,090
‫Así que comenzamos con la macro de función, pero queremos que sea invocable mediante blueprint.

18
00:01:20,090 --> 00:01:22,910
‫Entonces esa es la opción que podemos usar blueprint callable.

19
00:01:24,140 --> 00:01:29,660
‫Sin embargo, hay otra opción que anula el blueprint callable y implica que es

20
00:01:29,660 --> 00:01:32,420
‫blueprint callable y que es blueprint puro.

21
00:01:32,450 --> 00:01:36,620
‫Ahora veremos la diferencia entre blueprint pure y Blueprint callable en solo un segundo.

22
00:01:36,920 --> 00:01:43,400
‫Pero solo sepa que si usa blueprint pure, está haciendo lo mismo que Blueprint Callable y algo más.

23
00:01:43,400 --> 00:01:45,410
‫Por lo tanto, está haciendo un poco más que un plano invocable.

24
00:01:46,100 --> 00:01:50,600
‫Y luego lo que queremos es una función que devuelva un valor booleano que diga si este personaje está muerto

25
00:01:50,600 --> 00:01:51,110
‫o no.

26
00:01:52,230 --> 00:01:54,240
‫Eso nos va a ser útil saberlo.

27
00:01:54,540 --> 00:01:58,500
‫Y finalmente, queremos que esto sea una función de miembro del concierto.

28
00:01:58,860 --> 00:02:00,740
‫Ahora bien, ¿por qué quiere ser concierto?

29
00:02:00,750 --> 00:02:08,010
‫Porque cuando llamamos a esta función, no esperamos que cambie ninguno de los estados del carácter "Preguntarle", por lo que podemos

30
00:02:08,010 --> 00:02:11,790
‫decir con seguridad que debería ser una función de concierto.

31
00:02:12,270 --> 00:02:19,770
‫Y, de hecho, concert y blueprint pure a menudo van juntos porque blueprint pure significa que si vamos a

32
00:02:19,770 --> 00:02:24,120
‫cualquier blueprint, podemos echar un vistazo a algunas notas puras.

33
00:02:24,390 --> 00:02:26,070
‫Este de aquí tiene transformación activa.

34
00:02:26,070 --> 00:02:27,000
‫Esa es una nota pura.

35
00:02:27,000 --> 00:02:30,690
‫Obtener la velocidad es una nota pura La velocidad establecida no es una nota pura.

36
00:02:30,690 --> 00:02:33,240
‫¿Puedes ver lo que podría estar uniendo estos juntos?

37
00:02:33,240 --> 00:02:37,170
‫¿Qué pasa con estos hace que este no sea puro y este sea puro?

38
00:02:37,530 --> 00:02:43,440
‫Bueno, en términos generales, es el hecho de que esta pluma de ejecución, un nodo puro, es uno que no tiene

39
00:02:43,440 --> 00:02:44,700
‫un pin de ejecución.

40
00:02:45,090 --> 00:02:51,300
‫Y, por lo general, es seguro decir que algo no tiene un pin de ejecución cuando no tiene ningún impacto en

41
00:02:51,300 --> 00:02:53,910
‫lo que está llamando solo en su resultado.

42
00:02:54,240 --> 00:03:00,270
‫Esencialmente, esto significa que no importa cuántas veces llamemos a esta función, siempre generará

43
00:03:00,270 --> 00:03:01,590
‫el mismo resultado.

44
00:03:01,590 --> 00:03:04,950
‫Siempre va a tener el mismo efecto en el programa.

45
00:03:05,280 --> 00:03:06,690
‫Es una función pura.

46
00:03:06,690 --> 00:03:09,000
‫No cambia nada cuando se llama.

47
00:03:09,360 --> 00:03:14,760
‫Así que es más o menos lo mismo que const, aunque es un poco más fuerte porque lo que

48
00:03:14,760 --> 00:03:20,190
‫dice no es solo que no cambia nada aquí en el personaje de disparo, sino que no cambia nada

49
00:03:20,190 --> 00:03:21,960
‫global, ningún estado, en ninguna parte.

50
00:03:21,960 --> 00:03:22,650
‫Punto final.

51
00:03:22,950 --> 00:03:28,740
‫La única entrada, el único efecto que tiene está en las salidas que produce.

52
00:03:29,700 --> 00:03:32,280
‫Es por eso que estamos eligiendo hacer este modelo puro.

53
00:03:32,280 --> 00:03:36,930
‫Elimina la necesidad de un pin de ejecución, lo que lo hace mucho más agradable en los planos.

54
00:03:37,290 --> 00:03:43,110
‫Y también expresa el hecho de que no estamos haciendo ningún cambio en el estado de nuestro juego cuando llamamos

55
00:03:43,110 --> 00:03:44,130
‫a esta función.

56
00:03:44,640 --> 00:03:48,630
‫Así que sigamos adelante y tratemos de crear una implementación para esto.

57
00:03:48,630 --> 00:03:54,120
‫De hecho, les dejaré la implementación como un desafío, y vamos a repasar y

58
00:03:54,120 --> 00:03:59,820
‫conectar esto en un gráfico, lo siento, un gráfico de eventos del proyecto de animación.

59
00:04:00,300 --> 00:04:03,780
‫Así que vamos a hacer esto al tener un nuevo conjunto aquí.

60
00:04:03,780 --> 00:04:12,660
‫Queremos establecer la variable booleana is dead al final y queremos obtener el propietario del peón y queremos lanzar eso

61
00:04:12,660 --> 00:04:18,630
‫porque debe ser un personaje disparado para tener esta propiedad is dead.

62
00:04:18,630 --> 00:04:20,160
‫Así que queremos lanzarlo también.

63
00:04:20,490 --> 00:04:24,030
‫Y en este caso, quiero convertirlo en el personaje del tirador de C++

64
00:04:24,030 --> 00:04:30,120
‫porque no necesito ir hasta el final para decir que definitivamente es una versión modelo de esto porque esta función existe realmente en

65
00:04:30,120 --> 00:04:31,410
‫el nivel de C++.

66
00:04:31,800 --> 00:04:33,480
‫Así que vamos a seguir adelante y lanzar.

67
00:04:33,480 --> 00:04:36,690
‫Si tenemos éxito en el reparto, estableceremos la propiedad is dead.

68
00:04:37,230 --> 00:04:42,360
‫Ahora déjame poner algunos nodos de redirección aquí para hacer que nuestro proyecto se vea un poco

69
00:04:42,750 --> 00:04:43,320
‫mejor.

70
00:04:44,190 --> 00:04:48,750
‫Y luego, lo que queremos hacer es usar this shoots una referencia de personaje ahora que

71
00:04:48,750 --> 00:04:54,840
‫lo hemos convertido en un personaje shoots y sabemos que debería tener esta propiedad muerta, por lo que deberíamos poder hacer eso.

72
00:04:55,020 --> 00:04:59,940
‫Una vez que haya compilado y hecho funcionar, puede obtener esta propiedad muerta y configurarla aquí.

73
00:05:00,860 --> 00:05:04,860
‫Así que es hora de que tu desafío calcule si estamos muertos o no.

74
00:05:04,860 --> 00:05:08,190
‫Así que devuelve el valor booleano correcto de nuestra función is dead.

75
00:05:08,190 --> 00:05:08,970
‫Ese es el primer paso.

76
00:05:09,240 --> 00:05:15,690
‫Es posible que desee usar algunas desigualdades con una variable de salud para eso y luego conectar nuestra variable.

77
00:05:15,690 --> 00:05:17,370
‫El muerto es muerto variable.

78
00:05:17,610 --> 00:05:20,280
‫En el modelo de animación nos quedamos cortos de hacer eso.

79
00:05:20,280 --> 00:05:23,250
‫Solo necesitábamos básicamente una compilación antes de hacerlo.

80
00:05:23,580 --> 00:05:25,980
‫Pausa el video y arregla eso.

81
00:05:27,460 --> 00:05:27,750
‫Bueno.

82
00:05:27,760 --> 00:05:28,270
‫Bienvenido de nuevo.

83
00:05:28,300 --> 00:05:31,630
‫Así que vayamos al código, en primer lugar.

84
00:05:31,930 --> 00:05:36,550
‫Entonces, de manera bastante directa, voy a devolver una expresión que devuelve un valor booleano.

85
00:05:36,820 --> 00:05:43,180
‫Entonces queremos decir, ¿la salud es menor o igual a cero, en cuyo caso estamos realmente muertos?

86
00:05:43,450 --> 00:05:47,470
‫Eso es lo más simple que puede ser una función de expresión.

87
00:05:47,830 --> 00:05:49,720
‫Así que sigamos adelante y construyamos eso.

88
00:05:50,680 --> 00:05:55,540
‫Y una vez que se haya compilado, podemos ir a Unreal y conectarlo.

89
00:05:55,540 --> 00:06:02,260
‫Entonces, al arrastrar el personaje como tirador, somos un nodo, vamos a tener una referencia de disparar un personaje aquí.

90
00:06:02,530 --> 00:06:08,410
‫Así que lo que queremos hacer es muerto nos da esta es una función muerta, pueden ver que no tiene pin de ejecución

91
00:06:08,410 --> 00:06:09,340
‫porque es pura.

92
00:06:09,700 --> 00:06:14,770
‫Luego quitamos este booleano de eso y lo conectamos a nuestra variable is dead.

93
00:06:15,250 --> 00:06:21,280
‫Y ahora, si seguimos adelante y jugamos, deberíamos poder matar a ese personaje en el mundo.

94
00:06:21,280 --> 00:06:23,980
‫Le dispararemos hasta que su salud llegue a cero.

95
00:06:24,280 --> 00:06:25,240
‫Y ahí tienes

96
00:06:25,240 --> 00:06:28,450
‫La animación lo ha matado con éxito.

