﻿1
00:00:04,530 --> 00:00:06,030
‫Hallo en welkom.

2
00:00:06,060 --> 00:00:10,920
‫In deze lezing gaan we een pistool maken en leren we hoe we wapens

3
00:00:10,920 --> 00:00:17,250
‫voor deze game gaan ontwerpen, zodat ze kunnen worden verwisseld, zodat we verschillende eigenschappen van verschillende soorten wapens

4
00:00:17,250 --> 00:00:18,090
‫kunnen hebben.

5
00:00:18,480 --> 00:00:24,810
‫En dat is over het algemeen hoe de architecturen werken in shooters first person of third, laten we erin duiken en kijken hoe

6
00:00:24,810 --> 00:00:25,650
‫het werkt.

7
00:00:27,060 --> 00:00:27,300
‫Oké.

8
00:00:27,300 --> 00:00:30,630
‫We hebben dus al een tijdje niet meer ingecheckt op ons projectplan.

9
00:00:31,020 --> 00:00:32,600
‫We zijn nog niet bij de planbeweging.

10
00:00:32,610 --> 00:00:35,160
‫Het heeft de animatie voor nu gedaan, het is klaar.

11
00:00:35,520 --> 00:00:39,180
‫En het schieten, dat is het volgende waar we ons op gaan focussen.

12
00:00:39,690 --> 00:00:45,570
‫Het is hier een beetje verwarrend omdat onze mesh al een pistool lijkt te hebben, maar eigenlijk willen

13
00:00:45,570 --> 00:00:47,220
‫we dit pistool niet gebruiken.

14
00:00:47,220 --> 00:00:49,110
‫We willen het op een andere manier gebruiken.

15
00:00:49,650 --> 00:00:55,950
‫Omdat je in een schietspel zit, wil je vaak kunnen schakelen tussen wapens of op zijn minst

16
00:00:56,280 --> 00:00:59,160
‫verschillende karakters kunnen hebben, verschillende wapens hebben.

17
00:00:59,490 --> 00:01:05,790
‫En de gemakkelijkste manier om dat te doen is om het pistool als een apart ding voor het personage te ontwerpen, zodat

18
00:01:05,790 --> 00:01:09,720
‫je ze kunt verwisselen, zodat het verantwoordelijk kan zijn voor hoe het schiet.

19
00:01:09,780 --> 00:01:14,760
‫Of het nu een raketwerper is of een jachtgeweer of een geweer, ze gaan dingen op verschillende manieren doen.

20
00:01:15,450 --> 00:01:20,670
‫Nu, je zou kunnen zeggen, oké, laten we een wapencomponent maken en we kunnen die wapencomponenten

21
00:01:21,000 --> 00:01:22,380
‫onder ons gaas steken.

22
00:01:22,770 --> 00:01:30,390
‫Dat zou werken, behalve dat we dan de modulariteit verliezen die ons in staat stelt om meerdere componenten aan het pistool toe

23
00:01:30,390 --> 00:01:31,110
‫te voegen.

24
00:01:31,500 --> 00:01:38,700
‫Dus wat we echt willen doen, is de weg inslaan van het hebben van een acteur voor het pistool dat een kind-ID is voor het personage

25
00:01:38,700 --> 00:01:39,780
‫van de schutter.

26
00:01:39,810 --> 00:01:43,590
‫Dit is iets dat we nog niet eerder zijn tegengekomen, maar het werkt als volgt.

27
00:01:44,310 --> 00:01:51,150
‫Je kunt een shooter-personage en een pistool hebben als kind, en het shooter-personage kan meerdere componenten hebben die

28
00:01:51,150 --> 00:01:53,010
‫kind voor elkaar zijn.

29
00:01:53,010 --> 00:01:58,350
‫Dus je hebt de capsule, we hebben momenteel het gaas als een kind van de capsule,

30
00:01:58,350 --> 00:02:01,710
‫en de componenten van het pistool kunnen daartegen worden afgeschermd.

31
00:02:02,010 --> 00:02:05,700
‫Dus de mesh krijgt de onderliggende ID van de mesh van het personage.

32
00:02:06,150 --> 00:02:11,460
‫En als het nog andere componenten heeft, zoals misschien een deeltjeseffect op de loop van het pistool, kan dat een

33
00:02:11,460 --> 00:02:13,110
‫kind-ID van het gaas zijn.

34
00:02:13,410 --> 00:02:19,590
‫Je kunt dus zien dat deze hiërarchieën een beetje onafhankelijk zijn, dat je de scènecomponenten hebt,

35
00:02:19,590 --> 00:02:25,560
‫degene die aan de rechterkant zijn getransformeerd, en ze kunnen in een bepaalde hiërarchie zijn.

36
00:02:25,980 --> 00:02:31,280
‫En dan volgt de acteurshiërarchie eigenlijk de hiërarchie van de scènecomponenten.

37
00:02:31,290 --> 00:02:33,240
‫De acteurs hebben geen eigen hiërarchie.

38
00:02:33,240 --> 00:02:35,580
‫Dit is het beetje dat een beetje tijd kost om je hoofd rond te krijgen.

39
00:02:35,580 --> 00:02:38,070
‫Het was een aha-moment toen het voor mij klikte.

40
00:02:38,520 --> 00:02:44,580
‫Is dat in feite geen hiërarchie van acteurs, er is alleen een hiërarchie van scènecomponenten.

41
00:02:44,940 --> 00:02:50,430
‫Er zijn acteurs die dezelfde componenten bezitten en dus uiteindelijk een hiërarchie hebben

42
00:02:50,430 --> 00:02:55,950
‫omdat hun scènecomponenten aan elkaar gerelateerd zijn, maar ze hebben niet echt een onderlinge relatie.

43
00:02:56,670 --> 00:03:02,760
‫Dus dat gezegd hebbende, om de context te bepalen, is het eerste dat we willen gaan

44
00:03:02,760 --> 00:03:05,190
‫doen, onszelf een C++-pistoolacteur maken.

45
00:03:05,670 --> 00:03:11,730
‫En in dit geval wordt het geen pion of personage of iets dergelijks.

46
00:03:11,730 --> 00:03:14,400
‫Het wordt gewoon een rechttoe rechtaan acteur omdat we ons niet hoeven te gedragen.

47
00:03:14,400 --> 00:03:16,290
‫U hoeft het niet te bezitten, wij hoeven niets te doen.

48
00:03:16,290 --> 00:03:17,880
‫Het is gewoon een simpele, simpele acteur.

49
00:03:18,390 --> 00:03:19,710
‫Dus laten we doorgaan en dat doen.

50
00:03:19,710 --> 00:03:21,030
‫Eigenlijk een kleine uitdaging voor jou.

51
00:03:21,030 --> 00:03:26,190
‫Ga je gang en creëer die C++-acteur, iets dat je een kleine mini-uitdaging zou moeten kunnen doen, probeer het.

52
00:03:26,760 --> 00:03:27,780
‫Oké, ik ben weer binnen.

53
00:03:27,780 --> 00:03:28,860
‫Ik ga het doen.

54
00:03:28,890 --> 00:03:34,470
‫Nieuwe C++ klasse en we hoeven niet te hebben, laten we eens kijken, acteur.

55
00:03:34,470 --> 00:03:35,490
‫Dat is alles wat we willen kiezen.

56
00:03:35,910 --> 00:03:42,060
‫En we gaan door en noemen dit ene pistool, zo simpel als laten we die klasse creëren.

57
00:03:42,330 --> 00:03:42,550
‫Oké?

58
00:03:42,570 --> 00:03:46,350
‫En als dat eenmaal is gebeurd, verschijnt het in je code-editor.

59
00:03:46,380 --> 00:03:52,170
‫En we hoeven er nog niets mee te doen, want het eerste wat ik wil doen is een

60
00:03:52,530 --> 00:03:53,340
‫blauwdruk-subklasse maken.

61
00:03:53,340 --> 00:03:59,370
‫Dus klik met de rechtermuisknop op je klas in de inhoudsbrowser en in plaats van het Mike te noemen en ik weet niet welke

62
00:03:59,370 --> 00:04:04,530
‫automatische standaardinstellingen dat BP-onderstrepingsgeweer is, ga ik het aan de basis van inhoud vier plaatsen. Nu kunnen we een beetje

63
00:04:04,530 --> 00:04:06,630
‫van reorganiseren zodra we meer klassen hebben.

64
00:04:06,900 --> 00:04:09,750
‫Zoals ik al eerder heb gezegd, gaan we de Blueprint-klasse maken.

65
00:04:09,750 --> 00:04:10,890
‫Zoals je kunt zien, is het helemaal leeg.

66
00:04:10,890 --> 00:04:12,450
‫Het heeft deze standaard scene root.

67
00:04:12,840 --> 00:04:14,340
‫Dat willen we goedmaken.

68
00:04:14,470 --> 00:04:20,460
‫Wat we willen doen is eigenlijk een component in C++ toevoegen, omdat dit een C++-cursus is.

69
00:04:20,460 --> 00:04:23,970
‫Laten we oefenen met het toevoegen van componenten in C++.

70
00:04:24,150 --> 00:04:29,700
‫Het betekent ook dat we vanuit onze C++-code toegang krijgen tot die

71
00:04:29,700 --> 00:04:35,520
‫componenten om onze code te manipuleren en te schrijven. scene componenten en dan

72
00:04:35,520 --> 00:04:39,450
‫een mesh die daar een kind van is.

73
00:04:39,450 --> 00:04:40,230
‫Waarom willen we dat?

74
00:04:40,230 --> 00:04:47,730
‫Omdat we de positie van het gaas ten opzichte van de wortels van het pistool willen kunnen veranderen, zodat we het

75
00:04:47,730 --> 00:04:52,110
‫handvat in principe op verschillende locaties kunnen plaatsen voor verschillende mazen.

76
00:04:52,110 --> 00:04:55,440
‫Dus als we verschillende wapens hebben, kunnen we ervoor zorgen dat ze allemaal de handvatten op dezelfde plek hebben.

77
00:04:55,440 --> 00:05:00,300
‫Dus als we het aan de hand van het personage bevestigen, verschijnt het met het handvat in de hand van het

78
00:05:00,300 --> 00:05:00,540
‫personage.

79
00:05:01,230 --> 00:05:02,580
‫Oké, dus hoe gaan we dat doen?

80
00:05:02,580 --> 00:05:08,550
‫We gaan naar onze Visual Studio-code en ik ga hier een privégedeelte maken waar we de nieuwe

81
00:05:08,850 --> 00:05:12,630
‫eigenschappen gaan opslaan voor de verschillende componenten die we gaan

82
00:05:12,630 --> 00:05:13,050
‫bedenken.

83
00:05:13,590 --> 00:05:17,130
‫Dus ik ga een nieuwe eigenschap maken die overal zichtbaar is.

84
00:05:17,610 --> 00:05:21,210
‫We willen dat onze componenten overal zichtbaar zijn omdat hun point-pointers, we

85
00:05:21,210 --> 00:05:26,370
‫willen de pointers niet kunnen bewerken, maar we willen wel de eigenschappen van die pointers kunnen zien en kunnen.

86
00:05:26,600 --> 00:05:26,960
‫Die.

87
00:05:26,960 --> 00:05:30,830
‫En dat wordt dan het domein van de klas waarnaar we verwijzen.

88
00:05:30,950 --> 00:05:34,550
‫Dat bepaalt dan wat er getoond wordt, wat bewerkbaar is.

89
00:05:34,580 --> 00:05:38,240
‫Dus alles wat we hier willen zeggen, is dat het niet de bedoeling is dat het kan worden bewerkt.

90
00:05:38,510 --> 00:05:39,980
‫Dus daarom toch voor zichtbaar gaan.

91
00:05:40,580 --> 00:05:41,630
‫Hoe dan ook, een kleine herziening daar.

92
00:05:41,930 --> 00:05:44,960
‫Nu willen we dat dit een weergave is, omdat het een component is.

93
00:05:44,960 --> 00:05:48,470
‫Dan is het een scènecomponent die we willen.

94
00:05:49,250 --> 00:05:54,710
‫Als ik het correct kan typen, heb ik componenten gezien en het is een verwijzing ernaar en

95
00:05:54,710 --> 00:05:56,270
‫dit wordt onze rootcomponent.

96
00:05:57,690 --> 00:05:58,170
‫Zoals zo.

97
00:05:58,830 --> 00:06:01,410
‫En dan willen we een nieuw pand.

98
00:06:02,310 --> 00:06:03,610
‫Weer overal zichtbaar.

99
00:06:03,840 --> 00:06:05,460
‫Voor ons net.

100
00:06:07,080 --> 00:06:16,200
‫De klasse voor de mesh zal een paar statische MASH-componenten zijn, omdat dit geen skeletachtige puree is, het is

101
00:06:16,200 --> 00:06:19,620
‫stijf, het heeft geen skelet, geen botten.

102
00:06:20,040 --> 00:06:24,690
‫Dus ik wil dat dat een aanwijzing is en dit gaat de puree gewoon zo afkoelen.

103
00:06:25,750 --> 00:06:30,170
‫Feit, ik denk dat ik hier een beetje voorzichtig moet zijn, omdat ik denk dat de rootcomponent al bestaat

104
00:06:30,170 --> 00:06:31,770
‫in de bovenliggende klasse voor acteur.

105
00:06:31,790 --> 00:06:34,280
‫Dus ik ga gewoon deze route bellen.

106
00:06:35,180 --> 00:06:38,840
‫En dan hebben we al een constructor in C++.

107
00:06:38,840 --> 00:06:42,380
‫We hoeven alleen de juiste hier op te nemen.

108
00:06:42,410 --> 00:06:46,200
‫Nu, een kleine truc als je in Visual Studio-code bent, is om erachter te komen waar een bestand zich kan bevinden.

109
00:06:46,200 --> 00:06:50,600
‫Je gebruikt Control P en je gaat zoeken naar.

110
00:06:50,810 --> 00:06:53,090
‫In dit geval willen we de statische mesh.

111
00:06:53,090 --> 00:07:01,910
‫Dus statische mesh-componenten en we kunnen zien dat de statische mesh-componenten stip h als ik doorga en het open en over het

112
00:07:01,910 --> 00:07:07,400
‫tabblad zweef, je kunt zien dat het zich onder dit lange pad bevindt.

113
00:07:07,400 --> 00:07:12,590
‫Maar het interessante is dat het onder klassen valt, wat we dan kunnen opzoeken

114
00:07:12,590 --> 00:07:19,580
‫van dat het componenten zullen zijn, statische mesh-componenten, dus ik kan dat tabblad sluiten en net daarboven opnemen onder

115
00:07:19,580 --> 00:07:21,440
‫de opname voor een pistool.

116
00:07:21,740 --> 00:07:28,940
‫We gaan een hash-opname doen voor de componenten en vervolgens voor de statische mesh-componenten.

117
00:07:29,570 --> 00:07:35,630
‫Nu herinner ik me net dat de meshes die we om de een of andere reden hebben, niet echt statisch mesh zijn, zoals ik denk

118
00:07:35,630 --> 00:07:37,040
‫dat ze zouden kunnen zijn.

119
00:07:37,040 --> 00:07:43,790
‫Scott The Meshes, je kunt dit ontdekken door naar de activapakketten, schietspelwapens te gaan en deze meshes

120
00:07:43,790 --> 00:07:44,960
‫te bekijken.

121
00:07:44,960 --> 00:07:48,380
‫En ja hoor, als je erover zweeft, kun je zien dat het skeletachtige mazen zijn.

122
00:07:48,710 --> 00:07:49,760
‫Vraag me niet waarom.

123
00:07:49,820 --> 00:07:51,710
‫Om de een of andere reden zijn ze dat.

124
00:07:52,280 --> 00:07:56,780
‫Dus we willen het type veranderen in skeletal mesh in het headerbestand.

125
00:07:56,780 --> 00:08:01,310
‫Dus in plaats van het statische gaas, wordt het in plaats daarvan skeletachtig gaas gebruikt.

126
00:08:01,610 --> 00:08:05,990
‫En hetzelfde geldt voor de include, het wordt het skelet.

127
00:08:07,280 --> 00:08:09,500
‫Mesh component dot h die we willen onthouden.

128
00:08:09,500 --> 00:08:11,180
‫Er is geen jij in de header-bestanden.

129
00:08:12,420 --> 00:08:15,420
‫En ik geloof dat dezelfde componenten hier al standaard zijn opgenomen.

130
00:08:15,870 --> 00:08:20,260
‫Het is dus tijd voor een uitdaging om een eigen mesh-component toe te voegen.

131
00:08:20,280 --> 00:08:27,390
‫We gaan een root-scènecomponenten maken, deze instellen op de root en deze instellen op de root voor de klasse en een mesh-component

132
00:08:27,840 --> 00:08:33,240
‫maken en de bijlage tussen de twee instellen zodat de mesh-component een kind is van die

133
00:08:33,240 --> 00:08:37,320
‫root die wordt gezien componenten, pulseer video en ga aan de slag.

134
00:08:37,710 --> 00:08:38,790
‫Oké, welkom terug.

135
00:08:38,790 --> 00:08:42,660
‫Dus we gaan erheen om eerst en vooral onze wortels vast te stellen.

136
00:08:42,930 --> 00:08:48,180
‫Het wordt een create default sub-object van het type.

137
00:08:48,600 --> 00:08:56,100
‫Je hebt componenten gezien en dan gaan we het een naam geven die bij de tekstmacro hoort, we gaan het

138
00:08:56,100 --> 00:08:59,490
‫de wortels noemen en eindigen met de puntkomma.

139
00:08:59,490 --> 00:09:01,530
‫Dan gaan we het instellen als de root.

140
00:09:01,530 --> 00:09:06,180
‫Dus set root-componenten zal het instellen als de root-component voor de actor.

141
00:09:06,180 --> 00:09:07,890
‫Dus stel root in als de rootcomponent.

142
00:09:08,370 --> 00:09:09,180
‫Goed spul.

143
00:09:09,600 --> 00:09:12,270
‫Dan willen we onze mesh maken.

144
00:09:12,450 --> 00:09:21,420
‫Dus mesh is gelijk aan het maken van een standaard subobject en het is de skeletachtige mesh-component die we willen als de klasse

145
00:09:21,420 --> 00:09:27,720
‫en dan de tekstmacro om het mesh te noemen en een puntkomma toe te voegen.

146
00:09:27,790 --> 00:09:29,880
‫En dan willen we bijlage instellen.

147
00:09:30,210 --> 00:09:34,110
‫Dus het wordt een mesh-pijl die is opgezet.

148
00:09:35,210 --> 00:09:42,890
‫Stel bijlage in en we willen ons aan de root hechten als zulke coole dingen, zodat we dat

149
00:09:42,890 --> 00:09:50,420
‫kunnen opslaan en hopelijk kunnen compileren en bouwen en we zullen naar Unreal gaan en onze

150
00:09:50,420 --> 00:09:51,470
‫kindklasse bekijken.

151
00:09:51,890 --> 00:09:57,260
‫En ja hoor, hier hebben we de wortels, we hebben de sub-mesh, we hebben ook deze standaard scene-root die

152
00:09:57,260 --> 00:10:02,270
‫rondhangt. Ik denk dat we de editor opnieuw moeten starten en kijken of dat gewoon weggaat.

153
00:10:02,780 --> 00:10:06,980
‫Soms kunnen dingen bij het toevoegen van componenten zo blijven hangen en in de cache worden opgeslagen.

154
00:10:07,370 --> 00:10:11,840
‫En ja hoor, als we de blauwdrukken van het BP-pistool opnieuw openen, kun je zien dat we net die twee

155
00:10:11,840 --> 00:10:12,440
‫componenten hebben.

156
00:10:12,440 --> 00:10:18,530
‫We hebben de wortels en de mesh toegevoegd en we willen waarschijnlijk doorgaan en de mesh vervangen door een van

157
00:10:18,530 --> 00:10:21,470
‫de skeletachtige meshes uit de activapakketten van het schietspel.

158
00:10:21,950 --> 00:10:23,210
‫We hebben een geweer, we hebben een lanceerinrichting.

159
00:10:23,210 --> 00:10:25,670
‫Ik ga deze als geweer kiezen.

160
00:10:26,060 --> 00:10:30,230
‫Dus eigenlijk is het een beetje oneerlijk om het een BP-pistool te noemen.

161
00:10:30,230 --> 00:10:32,780
‫Dit zou waarschijnlijk het BP-geweer moeten zijn.

162
00:10:32,780 --> 00:10:40,130
‫Dus laten we doorgaan en dat hernoemen, naar de inhoudbrowser gaan en het hernoemen naar BP Rifle of

163
00:10:40,130 --> 00:10:41,570
‫BP Gun, onderstrepingsgeweer.

164
00:10:41,570 --> 00:10:44,660
‫Verzamel nu het BP-geweer direct als ze gaan.

165
00:10:45,080 --> 00:10:47,600
‫En dat heeft ons een wapen opgeleverd.

166
00:10:47,600 --> 00:10:54,350
‫Dit betekent natuurlijk dat we allerlei eigenschappen tegen deze actor kunnen hebben, zoals de sterkte

167
00:10:54,350 --> 00:11:00,950
‫van het wapen, het bereik, enzovoort, door nieuwe eigenschappen in C++ te creëren.

168
00:11:00,950 --> 00:11:08,030
‫En dat is de kracht van het hebben van deze architectuur is dat de wapens dan een beetje anders kunnen zijn.

169
00:11:08,030 --> 00:11:15,590
‫We kunnen verschillende schietmechanismen hebben voor geweren versus sluipschutters versus RPG en dat soort dingen.

170
00:11:16,040 --> 00:11:17,420
‫Dus dat is geweldig.

171
00:11:17,420 --> 00:11:18,800
‫En we kunnen ook verschillende statistieken hebben.

172
00:11:18,800 --> 00:11:23,480
‫We kunnen dus een sterk geweer en een zwak geweer hebben, afhankelijk van verschillende subklassen van de blauwdruk.

173
00:11:23,780 --> 00:11:24,320
‫Coole dingen.

174
00:11:24,320 --> 00:11:29,720
‫In de volgende lezing gaan we kijken hoe we dit wapen daadwerkelijk gaan produceren als

175
00:11:30,050 --> 00:11:32,420
‫een kind van ons huidige karakter.

176
00:11:32,660 --> 00:11:33,320
‫Ik zal dat zien.

