﻿1
00:00:04,260 --> 00:00:05,890
‫Hallo en welkom terug.

2
00:00:05,910 --> 00:00:11,130
‫Nu hebben we onze projectielklasse al gemaakt, en we zijn klaar om deze dingen in het level te

3
00:00:11,130 --> 00:00:15,660
‫spawnen, zodat we ze bij de torens kunnen lanceren en ze uiteindelijk kunnen vernietigen.

4
00:00:15,660 --> 00:00:19,950
‫Nu zullen spawning-acteurs de spawn-acteurfunctie betrekken.

5
00:00:19,950 --> 00:00:22,470
‫Dus we gaan in deze video leren hoe dat werkt.

6
00:00:22,470 --> 00:00:25,290
‫Laten we het nu hebben over het spawnen van het projectiel.

7
00:00:25,320 --> 00:00:29,130
‫Dit is iets wat we graag willen doen vanuit de C++-kant van de zaak.

8
00:00:29,130 --> 00:00:34,590
‫We gaan C++-functies aanroepen om dynamisch nieuwe objecten in de wereld te maken.

9
00:00:34,590 --> 00:00:41,610
‫Nu spawnen we vanaf de C++-kant van de dingen, maar we willen graag een object spawnen op basis van de

10
00:00:41,610 --> 00:00:43,110
‫blauwdruk van onze projectielklasse.

11
00:00:43,110 --> 00:00:50,040
‫De reden is dat we een blauwdruk hebben op basis van de klasse A Projectile C++, die aanvullende

12
00:00:50,040 --> 00:00:51,030
‫informatie bevat.

13
00:00:51,030 --> 00:00:54,270
‫In het bijzonder heeft het die mesh-eigenschap ingesteld.

14
00:00:54,270 --> 00:00:57,780
‫We kozen de mesh voor onze statische mesh-component.

15
00:00:57,780 --> 00:01:00,510
‫We kunnen dus niet zomaar de C++-versie spawnen.

16
00:01:00,510 --> 00:01:04,590
‫We moeten de blauwdrukversie spawnen om die mesh te krijgen.

17
00:01:04,590 --> 00:01:10,650
‫Dus de vraag is hoe we een object spawnen in C++, dat is gebaseerd op een blauwdruk?

18
00:01:10,650 --> 00:01:15,810
‫Welnu, we gaan leren over iets dat PT-subklasse wordt genoemd, nu is dit een sjabloon.

19
00:01:15,810 --> 00:01:20,730
‫En zoals veel sjablonen, hebben de punthaken een type nodig.

20
00:01:20,730 --> 00:01:24,480
‫Dus het gebruik van de PT-subklasse van vereist een typeparameter.

21
00:01:24,480 --> 00:01:29,790
‫En dit stelt ons in staat om een variabele te hebben die iets opslaat dat een U-klasse wordt genoemd.

22
00:01:29,790 --> 00:01:36,690
‫U-klasse vertegenwoordigt een klassetype, maar het heeft ook de mogelijkheid om te communiceren met het reflectiesysteem van de onwerkelijke

23
00:01:36,690 --> 00:01:37,350
‫motor.

24
00:01:37,350 --> 00:01:43,290
‫Als ik reflectie zeg, bedoel ik het uitwisselen van informatie tussen de C++ en de blauwdrukkant.

25
00:01:43,320 --> 00:01:50,700
‫Met PT-subklasse van, zoals de naam al doet vermoeden, kunnen we een variabele opslaan die een klasse vertegenwoordigt op basis van het

26
00:01:50,700 --> 00:01:54,870
‫type dat we doorgeven of een subklasse van dit gekozen type.

27
00:01:54,870 --> 00:02:01,560
‫Dit betekent dat we een type kunnen kiezen en dat de subklasse t een u-klasse kan bevatten die dat type of een

28
00:02:01,560 --> 00:02:02,880
‫daarvan afgeleid type vertegenwoordigt.

29
00:02:02,880 --> 00:02:06,360
‫En dit omvat blauwdrukken op basis van het type.

30
00:02:06,360 --> 00:02:09,090
‫Dus laten we eens kijken hoe deze t-subklasse van dingen werkt.

31
00:02:09,090 --> 00:02:09,380
‫Oké.

32
00:02:09,390 --> 00:02:15,270
‫Dus ik ben hier terug in de basis pom en de reden dat ik in de basis pod ben, is omdat we willen dat dit

33
00:02:15,270 --> 00:02:17,880
‫projectiel zowel op de tank als op de torenklassen zit.

34
00:02:17,880 --> 00:02:20,910
‫Beide klassen zullen projectielen voortbrengen.

35
00:02:20,910 --> 00:02:23,700
‫Dus ik wil hier een t-subklasse van variabele.

36
00:02:23,700 --> 00:02:30,930
‫Dus ik ga zeggen t subklasse van en tussen de punthaken moeten we een type doorgeven.

37
00:02:30,930 --> 00:02:34,740
‫Nu kunnen we op deze manier zelfs tussen punthaken declareren.

38
00:02:34,740 --> 00:02:37,440
‫En ik ga van het type een projectiel maken.

39
00:02:37,440 --> 00:02:42,690
‫En de reden is dat we de projectielklasse hebben gemaakt en het type ervan is een projectiel.

40
00:02:42,690 --> 00:02:47,940
‫Dus ik ga deze variabele maken en ik noem het projectielklasse.

41
00:02:47,940 --> 00:02:54,960
‫Dit stelt ons in staat om een C++-variabele te hebben die een klassetype vertegenwoordigt, en het type kan

42
00:02:54,960 --> 00:02:59,670
‫gebaseerd zijn op een projectiel, zelfs een blauwdrukklassetype dat hierop is gebaseerd.

43
00:02:59,670 --> 00:03:02,100
‫Nu ga ik het een U-eigenschap geven.

44
00:03:02,730 --> 00:03:07,620
‫En omdat ik dit graag zou willen kunnen bewerken, in ieder geval in de standaardblauwdruk, ga ik

45
00:03:07,620 --> 00:03:09,060
‫deze bewerking als standaard instellen.

46
00:03:09,060 --> 00:03:12,540
‫Pas nu kunnen we dit een categorie geven.

47
00:03:13,530 --> 00:03:16,170
‫Ik plaats het in een categorie genaamd gevecht.

48
00:03:16,200 --> 00:03:18,240
‫Laten we nu doorgaan en dit compileren.

49
00:03:18,270 --> 00:03:23,130
‫Oké, dus ik ben terug in de editor en ik ga naar de map met blauwdrukken en van daaruit

50
00:03:23,130 --> 00:03:24,330
‫naar de map Pons.

51
00:03:24,330 --> 00:03:29,580
‫En ik ga gewoon BP openen -- tank en de volledige blauwdruk-editor openen.

52
00:03:29,580 --> 00:03:32,910
‫Als ik nu in het detailvenster kijk, kan ik naar gevechten zoeken.

53
00:03:32,910 --> 00:03:33,840
‫Hier is het.

54
00:03:33,840 --> 00:03:36,540
‫En hier is de projectielklasse variabele.

55
00:03:36,540 --> 00:03:40,410
‫Dit is die subklasse die we projectielklasse noemden.

56
00:03:40,410 --> 00:03:44,250
‫Merk nu op dat we het hier kunnen instellen en we kunnen het instellen met behulp van een vervolgkeuzelijst.

57
00:03:44,250 --> 00:03:47,910
‫En als we op de vervolgkeuzelijst klikken, hebben we drie opties.

58
00:03:47,910 --> 00:03:53,340
‫We kunnen het op geen zetten, wat het standaard is ingesteld, wat in feite betekent dat het een null-aanwijzer is.

59
00:03:53,340 --> 00:03:57,960
‫Of we kunnen het instellen op projectiel of BP-projectiel.

60
00:03:57,990 --> 00:04:04,740
‫Dat is wat subklasse van ons in staat stelt om deze projectielklasse in te stellen op een bepaald type op basis van projectiel,

61
00:04:04,740 --> 00:04:08,880
‫aangezien dat het type is dat we kozen toen we de variabele maakten.

62
00:04:08,880 --> 00:04:10,140
‫Nu projectiel hier.

63
00:04:10,140 --> 00:04:14,520
‫Dit is de C++-klasse die in C++ projectiel wordt genoemd.

64
00:04:14,520 --> 00:04:22,260
‫Het is een projectiel, maar BP-projectiel is een blauwdruk gebaseerd op de C++-projectielklasse en we kunnen dit

65
00:04:22,260 --> 00:04:22,920
‫kiezen.

66
00:04:22,920 --> 00:04:27,870
‫En nu is de projectielklasse ingesteld op het BP-projectieltype.

67
00:04:27,870 --> 00:04:32,610
‫Dit is geen onderdeel en het is geen BP-projectielobject.

68
00:04:32,610 --> 00:04:33,540
‫Dat is niet wat het is.

69
00:04:33,540 --> 00:04:36,480
‫Het slaat een type op, meer specifiek een U.

70
00:04:36,480 --> 00:04:37,260
‫Klasse soort.

71
00:04:37,260 --> 00:04:44,730
‫En zoals ik al zei, je klas heeft ingebouwde functionaliteit waarmee reflectie kan werken tussen C++ en

72
00:04:44,730 --> 00:04:45,390
‫blauwdrukken.

73
00:04:45,390 --> 00:04:48,690
‫Informatie kan tussen C++ en blauwdrukken stromen.

74
00:04:48,690 --> 00:04:55,710
‫Dus nu hebben we projectielklasse, een PT-subklasse die is ingesteld op het BP-projectielblauwdruktype.

75
00:04:55,710 --> 00:04:59,790
‫Dus waarom al die moeite doen om een subklasse van variabelen te creëren?

76
00:04:59,790 --> 00:05:03,750
‫Welnu, we moeten bespreken hoe de spawn-acteurfunctie werkt.

77
00:05:04,200 --> 00:05:08,400
‫Spawn-acteur is een functie die behoort tot de nieuwe wereldklasse.

78
00:05:08,400 --> 00:05:12,120
‫Dus als we de wereld in handen krijgen, kunnen we Spawn acteur noemen.

79
00:05:12,120 --> 00:05:19,620
‫En Spawn-acteur is een andere sjabloonfunctie en is ontworpen om nieuwe objecten te maken die vergelijkbaar zijn met het maken

80
00:05:19,620 --> 00:05:21,060
‫van een standaardsubobject.

81
00:05:21,060 --> 00:05:28,260
‫Maar create default sub-object is ontworpen voor het maken van componenten en we kunnen het alleen in de

82
00:05:28,260 --> 00:05:35,520
‫constructor gebruiken voor een bepaalde klasse. spawn-acteur kan tijdens runtime worden aangeroepen terwijl het spel draait en het kan

83
00:05:35,520 --> 00:05:36,360
‫actoren maken.

84
00:05:36,360 --> 00:05:39,450
‫Nu is het een sjabloon, dus het vereist een type.

85
00:05:39,480 --> 00:05:45,780
‫Als we een projectiel willen spawnen, dan zouden we hier een projectiel van het type C++ klasse doorgeven.

86
00:05:45,810 --> 00:05:52,590
‫Dit is de C++-klasse die wordt geretourneerd door de spawn-acteurfunctie in C++.

87
00:05:52,620 --> 00:05:57,060
‫Nu nemen de haakjes een aantal parameters, waaronder een U-klasse.

88
00:05:57,060 --> 00:06:02,190
‫Nu zijn er meerdere overbelastingen van deze functie die verschillende invoerparameters vereisen.

89
00:06:02,190 --> 00:06:07,590
‫De meest eenvoudige is misschien wel de versie die een U-klasse, een A-locatie en een rotatie nodig heeft.

90
00:06:07,590 --> 00:06:08,010
‫de u.

91
00:06:08,010 --> 00:06:11,280
‫Klasse is wat het type vertegenwoordigt om te spawnen.

92
00:06:11,310 --> 00:06:16,020
‫Dit is het werkelijke type van het object dat wordt voortgebracht.

93
00:06:16,050 --> 00:06:18,300
‫Dit kan een blauwdrukklasse zijn.

94
00:06:18,330 --> 00:06:25,890
‫De locatie is een F-vector die aangeeft waar het object moet spawnen en de rotatie zal de rotatie ervan specificeren.

95
00:06:25,890 --> 00:06:28,710
‫Dus een voorbeeld van de syntaxis ziet er als volgt uit.

96
00:06:28,710 --> 00:06:35,580
‫We zouden spawn-acteur noemen, het klassetype specificeren en vervolgens die u-klasse-informatie doorgeven samen

97
00:06:35,580 --> 00:06:38,820
‫met de locatievector en rotatierotator.

98
00:06:38,820 --> 00:06:41,160
‫Dus laten we het even over je klas hebben.

99
00:06:41,160 --> 00:06:44,970
‫Zoals we al zeiden, je klasse vertegenwoordigt een klassetype.

100
00:06:44,970 --> 00:06:51,480
‫Wanneer we Spawn-acteur aanroepen, passeren we een U-klasse om de spawn-acteurfunctie te voorzien van informatie over

101
00:06:51,480 --> 00:06:53,550
‫het te spawnen object.

102
00:06:53,910 --> 00:07:01,320
‫Ja, we hebben een type tussen de punthaken doorgegeven, maar dat vertelt Spawn-acteur eenvoudig het C++-type dat moet worden

103
00:07:01,320 --> 00:07:01,860
‫gemaakt.

104
00:07:01,860 --> 00:07:04,890
‫Terwijl je klas meer informatie bevat.

105
00:07:04,890 --> 00:07:11,070
‫Laten we zeggen dat we een blauwdruk hebben gemaakt op basis van een projectiel en dat we in de blauwdruk enkele eigenschappen hebben

106
00:07:11,070 --> 00:07:14,580
‫ingesteld, zoals het kiezen van de statische mesh voor de statische mesh-component.

107
00:07:14,580 --> 00:07:21,480
‫Als we nu gewoon een onbewerkte C++-klasse zouden spawnen, dan zal die statische mesh niet worden ingesteld op het

108
00:07:21,480 --> 00:07:22,860
‫nieuw voortgebrachte projectielobject.

109
00:07:22,860 --> 00:07:26,250
‫In wezen zouden we gewoon een onzichtbare nieuwe acteur voortbrengen.

110
00:07:26,430 --> 00:07:30,780
‫Een nieuwe klassevariabele kan echter een blauwdrukklasse vertegenwoordigen.

111
00:07:30,930 --> 00:07:37,140
‫Je klasse geeft ons de mogelijkheid om een variabele aan de C++-kant te hebben, die een blauwdruk,

112
00:07:37,140 --> 00:07:38,730
‫klassetype en spawn vertegenwoordigt.

113
00:07:38,730 --> 00:07:45,900
‫Actor kan die klasse als invoerargument nemen, zodat het een nieuw object kan voortbrengen op basis van de blauwdruk die

114
00:07:45,900 --> 00:07:48,060
‫door die nieuwe klasse wordt vertegenwoordigd.

115
00:07:48,060 --> 00:07:54,810
‫Dus een nieuw projectiel heeft zijn statische mesh-eigenschap ingesteld omdat we een nieuw object voortbrengen op basis

116
00:07:54,810 --> 00:07:58,560
‫van de blauwdruk en niet de onbewerkte C++-klasse.

117
00:07:58,560 --> 00:08:05,190
‫Dit is de reden waarom we onze subklasse van hebben gemaakt, omdat deze een nieuwe klasse kan opslaan

118
00:08:05,190 --> 00:08:10,050
‫en we deze gelijk konden stellen aan BP-projectiel uit onze BP - tankblauwdruk.

119
00:08:10,050 --> 00:08:13,020
‫Dus nu weet je hoe je acteurs moet spawnen.

120
00:08:13,170 --> 00:08:16,020
‫Spawn-acteur behoort tot de nieuwe wereldklasse.

121
00:08:16,020 --> 00:08:22,320
‫Dus als je get world aanroept en simpelweg Spawn actor aanroept, dan ken je de invoervereisten

122
00:08:22,320 --> 00:08:29,370
‫voor deze functie die je doorgeeft in het C++ type tussen punthaken en je classificeert een locatie en een

123
00:08:29,370 --> 00:08:30,750
‫rotatie tussen haakjes.

124
00:08:30,750 --> 00:08:35,820
‫Dus voor je uitdaging ga je het projectiel spawnen, doe dit in de vuurfunctie.

125
00:08:35,820 --> 00:08:41,760
‫Dus bel get world spawn actor en geef een projectiel door tussen de punthaken.

126
00:08:41,760 --> 00:08:45,390
‫Dit betekent dat je het headerbestand voor projectiel moet opnemen.

127
00:08:45,390 --> 00:08:52,170
‫Dus vergeet dat niet en gebruik onze nieuwe variabele projectielklasse als de invoerparameter van de U-klasse tussen

128
00:08:52,170 --> 00:08:52,920
‫haakjes.

129
00:08:52,920 --> 00:08:55,320
‫Nu hebben we een locatie en een rotatie nodig.

130
00:08:55,320 --> 00:09:00,480
‫Je gaat het spawn-punt van het projectiel gebruiken voor zowel locatie als rotatie.

131
00:09:00,480 --> 00:09:02,850
‫Van de projectiel spawn point component.

132
00:09:02,850 --> 00:09:09,000
‫U kunt componentlocatie ophalen en componentrotatie ophalen om toegang te krijgen tot deze waarden.

133
00:09:09,000 --> 00:09:14,040
‫Dus pauzeer de video en bel nu spawn-acteur in de vuurfunctie.

134
00:09:16,920 --> 00:09:17,310
‫Oké.

135
00:09:17,310 --> 00:09:22,880
‫Laten we dus naar Base Pond CP gaan waar we de vuurfunctie hebben gedefinieerd.

136
00:09:22,890 --> 00:09:25,230
‫Nu hebben we hier een debug-bol tekenen.

137
00:09:25,230 --> 00:09:27,450
‫Dat gaan we echt niet meer nodig hebben.

138
00:09:27,450 --> 00:09:33,270
‫Dus ik ga deze functieaanroep verwijderen en in plaats daarvan ga ik Spawn-acteur hier bellen.

139
00:09:33,270 --> 00:09:36,750
‫Nu hebben we al de locatie van het projectiel-spawnpunt.

140
00:09:37,050 --> 00:09:43,770
‫Ik ga deze lokale variabele hernoemen naar simpelweg locatie en ik ga een nieuwe F-rotator maken.

141
00:09:44,430 --> 00:09:45,810
‫Rotatie genoemd.

142
00:09:45,900 --> 00:09:50,010
‫En dit krijg ik ook van het spawnpunt van het projectiel.

143
00:09:50,010 --> 00:09:56,670
‫Dus het wordt een projectiel-spawn-punt om componentrotatie te krijgen.

144
00:09:56,670 --> 00:10:01,980
‫Dus nu heb ik de locatie en de rotatie om het projectiel te spawnen.

145
00:10:02,430 --> 00:10:07,050
‫Dus vervolgens moet ik spawn-acteur bellen, zodat ik get world kan bellen.

146
00:10:07,050 --> 00:10:11,910
‫En van de wereld die ik van deze functie krijg, kan ik spawn-acteur noemen.

147
00:10:12,240 --> 00:10:15,780
‫Dit heeft punthaken en haakjes, toch?

148
00:10:15,780 --> 00:10:19,740
‫Dus tussen de punthaken moet ik een projectiel gebruiken.

149
00:10:21,240 --> 00:10:25,640
‫En aangezien we een projectiel gebruiken, moeten we daarvoor de koptekst opnemen.

150
00:10:25,650 --> 00:10:32,760
‫Dus hier ga ik debug-helpers verwijderen, tekenen en vervangen door projectiel.

151
00:10:34,740 --> 00:10:37,260
‫Dus nu hebben we dat type opgenomen.

152
00:10:37,260 --> 00:10:44,070
‫Nu hebben we de U-klasse nodig en op basis van H heeft projectielklasse, kunnen we die gebruiken als de U-klasse.

153
00:10:44,070 --> 00:10:47,050
‫Dus we gaan slagen in de projectielklas.

154
00:10:47,070 --> 00:10:54,750
‫Nu kunnen we eindelijk de locatie en rotatie doorgeven en dit zal de spawn-acteurfunctie bevredigen.

155
00:10:54,750 --> 00:11:00,420
‫Dus laten we doorgaan en dit compileren en we zijn terug hier in de editor en we kunnen het spel testen.

156
00:11:00,420 --> 00:11:04,080
‫Dus ik ga door en klik en controleer dat.

157
00:11:04,080 --> 00:11:06,750
‫We hebben een nieuw projectiel voortgebracht.

158
00:11:06,750 --> 00:11:13,680
‫We spawnen het projectiel aan het uiteinde van onze loop en ze zweven daar gewoon in de lucht, wat

159
00:11:13,680 --> 00:11:15,660
‫er niet echt goed uitziet.

160
00:11:15,660 --> 00:11:16,430
‫Maar dat is oke.

161
00:11:16,440 --> 00:11:17,700
‫Dit is stap één.

162
00:11:17,700 --> 00:11:23,580
‫We moeten eerst het projectiel spawnen, zodat het als een projectiel gaat werken als de volgende stap.

163
00:11:23,580 --> 00:11:27,120
‫Dus kort samengevat, we spawnen nu projectielen.

164
00:11:27,150 --> 00:11:29,060
‫Dit is een geweldige mijlpaal.

165
00:11:29,070 --> 00:11:32,250
‫Het zijn echter nog niet echt projectielen.

166
00:11:32,280 --> 00:11:36,060
‫Ze zweven daar gewoon en projectielen zouden door de lucht moeten vliegen.

167
00:11:36,210 --> 00:11:41,490
‫Dus in de volgende video gaan we praten over hoe we onze projectielen echt door de lucht kunnen laten

168
00:11:41,490 --> 00:11:43,800
‫vliegen, zodat ze zich als projectielen gedragen.

169
00:11:43,830 --> 00:11:44,700
‫Ik zie je snel.

