﻿1
00:00:04,580 --> 00:00:05,390
‫Hallo en welkom.

2
00:00:05,390 --> 00:00:10,730
‫In deze lezing gaan we ons gezondheidssysteem aansluiten op de animatieblauwdruk, zodat ik

3
00:00:10,730 --> 00:00:13,700
‫dit personage kan fotograferen tot hij sterft.

4
00:00:13,700 --> 00:00:15,380
‫Laten we erin duiken en kijken hoe dat werkt.

5
00:00:16,580 --> 00:00:22,580
‫Je wilt dus dat deze boolean in de animatieblauwdrukken automatisch vanuit het spel wordt ingesteld.

6
00:00:23,180 --> 00:00:29,270
‫En als we naar de gebeurtenisgrafiek gaan en kijken hoe dit momenteel werkt, andere eigenschappen zoals deze,

7
00:00:29,270 --> 00:00:34,370
‫zoals snelheid krijgen, actief worden, transformeren, we gaan naar de pion en we doen er

8
00:00:34,370 --> 00:00:38,270
‫een get-functie op elke keer dat we animatie willen updaten.

9
00:00:38,810 --> 00:00:43,910
‫Dus we willen in dit model een beetje volgen waar we heen gaan om te zien of onze speler al

10
00:00:43,910 --> 00:00:45,020
‫dan niet dood is.

11
00:00:45,320 --> 00:00:52,130
‫Zodanig dat we wat functionaliteit moeten blootleggen, een aanroepbare functie uit onze C++.

12
00:00:52,670 --> 00:00:57,050
‫Dus laten we naar de C++ gaan en kijken wat er is.

13
00:00:57,230 --> 00:01:02,300
‫We hadden dus een publieke functie kunnen creëren, maar dat maakt het niet per se toegankelijk.

14
00:01:03,140 --> 00:01:09,740
‫Om de toegankelijkheid te doen, hebben we een nieuwe functie nodig die het zichtbaar maakt voor blauwdrukken en op

15
00:01:09,740 --> 00:01:10,850
‫rails header tool-systeem.

16
00:01:11,120 --> 00:01:15,050
‫Maar we moeten een stap verder gaan dan het alleen als een nieuwe functie te hebben.

17
00:01:15,050 --> 00:01:20,090
‫Dus we beginnen met de functie macro, maar we willen deze blauwdruk oproepbaar maken.

18
00:01:20,090 --> 00:01:22,910
‫Dus dat is de optie die we kunnen gebruiken blauwdruk callable.

19
00:01:24,140 --> 00:01:29,660
‫Er is echter nog een andere optie die de oproepbare blauwdruk overschrijft, in plaats daarvan impliceert dat deze oproepbaar is

20
00:01:29,660 --> 00:01:32,420
‫voor de blauwdruk en dat deze puur blauwdruk is.

21
00:01:32,450 --> 00:01:36,620
‫Nu zullen we in een oogwenk het verschil zien tussen blueprint pure en Blueprint callable.

22
00:01:36,920 --> 00:01:43,400
‫Maar weet dat als je blueprint pure gebruikt, het hetzelfde doet als Blueprint Callable en nog wat.

23
00:01:43,400 --> 00:01:45,410
‫Dus het doet een beetje meer dan blauwdruk oproepbaar.

24
00:01:46,100 --> 00:01:50,600
‫En wat we dan willen is een functie die Boolean retourneert die zegt of dit personage al dan niet

25
00:01:50,600 --> 00:01:51,110
‫dood is.

26
00:01:52,230 --> 00:01:54,240
‫Dat is handig voor ons om te weten.

27
00:01:54,540 --> 00:01:58,500
‫En tot slot willen we dat dit een concertlidfunctie wordt.

28
00:01:58,860 --> 00:02:00,740
‫Waarom wil het een concert zijn?

29
00:02:00,750 --> 00:02:08,010
‫Want als we deze functie aanroepen, verwachten we niet dat deze iets verandert aan de status van vraag je om karakter, dus

30
00:02:08,010 --> 00:02:11,790
‫we kunnen gerust zeggen dat dit een concertfunctie zou moeten zijn.

31
00:02:12,270 --> 00:02:19,770
‫En in feite gaan concert en blueprint pure vaak samen omdat blueprint pure betekent dat als we naar

32
00:02:19,770 --> 00:02:24,120
‫een blauwdruk gaan, we een paar pure noten kunnen bekijken.

33
00:02:24,390 --> 00:02:26,070
‫Deze hier krijgt een actieve transformatie.

34
00:02:26,070 --> 00:02:27,000
‫Dat is een zuivere noot.

35
00:02:27,000 --> 00:02:30,690
‫Get Velocity is een pure noot. Set-snelheid is geen pure noot.

36
00:02:30,690 --> 00:02:33,240
‫Kun je zien wat deze met elkaar verbindt?

37
00:02:33,240 --> 00:02:37,170
‫Hoe zit het met deze maakt dit niet puur en deze puur?

38
00:02:37,530 --> 00:02:43,440
‫Over het algemeen is het het feit dat dit een executiepen, een pure knoop, er een is die

39
00:02:43,440 --> 00:02:44,700
‫geen executiespeld heeft.

40
00:02:45,090 --> 00:02:51,300
‫En het is meestal veilig om te zeggen dat iets geen uitvoeringsspeld heeft als het geen enkele invloed heeft op het

41
00:02:51,300 --> 00:02:53,910
‫ding dat het alleen op het resultaat aanroept.

42
00:02:54,240 --> 00:03:00,270
‫Dit betekent in wezen dat het niet uitmaakt hoe vaak we deze functie aanroepen, het zal altijd

43
00:03:00,270 --> 00:03:01,590
‫hetzelfde resultaat opleveren.

44
00:03:01,590 --> 00:03:04,950
‫Het zal altijd hetzelfde effect hebben op het programma.

45
00:03:05,280 --> 00:03:06,690
‫Het is een pure functie.

46
00:03:06,690 --> 00:03:09,000
‫Het verandert niets als het wordt gebeld.

47
00:03:09,360 --> 00:03:14,760
‫Dus het is een beetje hetzelfde als const, hoewel het een beetje sterker is, want wat het

48
00:03:14,760 --> 00:03:20,190
‫zegt is niet alleen dat het hier niets verandert aan het schietkarakter, maar het verandert niets globaal, in

49
00:03:20,190 --> 00:03:21,960
‫welke staat, waar dan ook.

50
00:03:21,960 --> 00:03:22,650
‫Punt.

51
00:03:22,950 --> 00:03:28,740
‫De enige input, het enige effect dat het heeft, zit in de output die het produceert.

52
00:03:29,700 --> 00:03:32,280
‫Daarom kiezen we ervoor om deze blauwdruk puur te maken.

53
00:03:32,280 --> 00:03:36,930
‫Het maakt een executiespeld overbodig, wat het veel leuker maakt in blauwdrukken.

54
00:03:37,290 --> 00:03:43,110
‫En het drukt ook gewoon uit dat we geen wijzigingen aanbrengen in de staat van ons spel wanneer we

55
00:03:43,110 --> 00:03:44,130
‫deze functie aanroepen.

56
00:03:44,640 --> 00:03:48,630
‫Dus laten we doorgaan en proberen hiervoor een implementatie te maken.

57
00:03:48,630 --> 00:03:54,120
‫In feite ga ik de implementatie aan jou overlaten als een uitdaging, en

58
00:03:54,120 --> 00:03:59,820
‫we gaan dit bespreken en aansluiten in een grafiek, sorry, een gebeurtenisgrafiek van de animatieblauwdruk.

59
00:04:00,300 --> 00:04:03,780
‫Dus we gaan dit doen door hier een nieuwe set te plaatsen.

60
00:04:03,780 --> 00:04:12,660
‫We willen de is dead boolean-variabele aan het einde instellen en we willen de pioneigenaar krijgen en we willen die casten

61
00:04:12,660 --> 00:04:18,630
‫omdat het een schietkarakter moet zijn om dit een dode eigenschap te hebben.

62
00:04:18,630 --> 00:04:20,160
‫Dus we willen het ook casten.

63
00:04:20,490 --> 00:04:24,030
‫En in dit geval wil ik het casten naar het C++

64
00:04:24,030 --> 00:04:30,120
‫shooter-personage omdat ik niet helemaal hoef te zeggen dat het absoluut een blauwdrukversie hiervan is, omdat deze functie feitelijk

65
00:04:30,120 --> 00:04:31,410
‫op het C++-niveau bestaat.

66
00:04:31,800 --> 00:04:33,480
‫Dus we gaan door en casten.

67
00:04:33,480 --> 00:04:36,690
‫Als we erin slagen om te casten, gaan we de dode eigenschap instellen.

68
00:04:37,230 --> 00:04:42,360
‫Laat me hier wat omleidingsknooppunten plaatsen om onze blauwdruk er net iets mooier uit te laten

69
00:04:42,750 --> 00:04:43,320
‫zien.

70
00:04:44,190 --> 00:04:48,750
‫En wat we dan willen doen, is deze shoots een karakterreferentie gebruiken nu we het naar

71
00:04:48,750 --> 00:04:54,840
‫een shoots-personage hebben gecast waarvan we weten dat het dit dode eigendom zou moeten hebben, dus we zouden dat moeten kunnen doen.

72
00:04:55,020 --> 00:04:59,940
‫Als je eenmaal hebt gecompileerd en het werkend hebt gekregen, kun je dit dode eigendom krijgen en het hier instellen.

73
00:05:00,860 --> 00:05:04,860
‫Dus het is tijd voor jouw uitdaging om te berekenen of we dood zijn of niet.

74
00:05:04,860 --> 00:05:08,190
‫Dus retourneer de juiste boolean uit onze is dode functie.

75
00:05:08,190 --> 00:05:08,970
‫Dat is de eerste stap.

76
00:05:09,240 --> 00:05:15,690
‫Misschien wilt u daarvoor een aantal ongelijkheden met een gezondheidsvariabele gebruiken en vervolgens onze variabele aansluiten.

77
00:05:15,690 --> 00:05:17,370
‫De dood is dood veranderlijk.

78
00:05:17,610 --> 00:05:20,280
‫In de animatieblauwdruk kwamen we daar net te kort voor.

79
00:05:20,280 --> 00:05:23,250
‫We hadden eigenlijk gewoon een compilatie nodig om dat voor elkaar te krijgen.

80
00:05:23,580 --> 00:05:25,980
‫Pauzeer de video en regel dat.

81
00:05:27,460 --> 00:05:27,750
‫Oké.

82
00:05:27,760 --> 00:05:28,270
‫Welkom terug.

83
00:05:28,300 --> 00:05:31,630
‫Dus laten we eerst naar de code gaan.

84
00:05:31,930 --> 00:05:36,550
‫Dus dit is vrij eenvoudig, ik ga een uitdrukking retourneren die een boolean retourneert.

85
00:05:36,820 --> 00:05:43,180
‫Dus we willen zeggen, is de gezondheid kleiner dan of gelijk aan nul, in welk geval we inderdaad dood zijn?

86
00:05:43,450 --> 00:05:47,470
‫Dat is ongeveer net zo eenvoudig als een expressiefunctie kan krijgen.

87
00:05:47,830 --> 00:05:49,720
‫Dus laten we doorgaan en dat bouwen.

88
00:05:50,680 --> 00:05:55,540
‫En als dat eenmaal is gecompileerd, kunnen we naar Unreal gaan en het aansluiten.

89
00:05:55,540 --> 00:06:02,260
‫Dus het slepen van het personage als shooter, we zijn een knooppunt, we gaan hier een personagereferentie opnemen.

90
00:06:02,530 --> 00:06:08,410
‫Dus we willen doen is dood geeft ons dit is een dode functie, je kunt zien dat het geen uitvoeringspin heeft omdat

91
00:06:08,410 --> 00:06:09,340
‫het puur is.

92
00:06:09,700 --> 00:06:14,770
‫Dan nemen we deze boolean daarvan af en koppelen deze aan onze is dode variabele.

93
00:06:15,250 --> 00:06:21,280
‫En als we nu doorgaan en spelen, zouden we dat personage in de wereld eigenlijk moeten kunnen doden.

94
00:06:21,280 --> 00:06:23,980
‫We zullen op hem schieten tot zijn gezondheid tot nul is gedaald.

95
00:06:24,280 --> 00:06:25,240
‫En daar ga je.

96
00:06:25,240 --> 00:06:28,450
‫De animatie heeft hem met succes gedood.

