﻿1
00:00:04,080 --> 00:00:05,730
‫Hallo en welkom terug.

2
00:00:05,760 --> 00:00:10,380
‫Nu zijn we klaar om het torentje te draaien en we zouden dit graag doen met de muis.

3
00:00:10,380 --> 00:00:14,790
‫En die trefferlocatie van de treffer die we in de vorige video hebben gedaan.

4
00:00:14,880 --> 00:00:22,200
‫Dus terwijl ik mijn muiscursor beweeg, roteert het torentje en wijst het in de richting van de muiscursor.

5
00:00:22,320 --> 00:00:28,110
‫En zelfs als ik in de viewport klik en begin te spelen, kan ik de muiscursor nog steeds verplaatsen om de

6
00:00:28,110 --> 00:00:31,080
‫toren te draaien en de richting ervan in te stellen.

7
00:00:31,110 --> 00:00:35,850
‫Hierdoor kan ik richten als ik de mogelijkheid heb om projectielen af te vuren.

8
00:00:35,880 --> 00:00:36,200
‫Oké.

9
00:00:36,240 --> 00:00:41,770
‫Dus om dit te bereiken, moeten we de richting vinden waarin we willen dat onze toren wijst.

10
00:00:41,790 --> 00:00:46,410
‫En als we die richting eenmaal hebben gevonden, kunnen we de rotatie van het torentje instellen.

11
00:00:46,500 --> 00:00:52,470
‫Om de richting te krijgen waarnaar we willen dat de koepel wijst, moeten we een beetje

12
00:00:52,470 --> 00:00:53,500
‫vectorwiskunde doen.

13
00:00:53,520 --> 00:00:59,570
‫Wat we zoeken is een vector van de tankkoepel naar onze traceerlocatie.

14
00:00:59,580 --> 00:01:05,940
‫Nu kunnen we gemakkelijk de locatie van onze tank of een van zijn componenten achterhalen, zoals de locatie van de toren

15
00:01:05,940 --> 00:01:06,960
‫van de tank.

16
00:01:06,990 --> 00:01:09,600
‫We noemen deze locatie, torentje, locatie.

17
00:01:09,600 --> 00:01:13,440
‫En we weten ook hoe we de locatie van de traceerkop kunnen achterhalen.

18
00:01:13,470 --> 00:01:15,800
‫We noemen dit de locatie van de treffer.

19
00:01:15,810 --> 00:01:20,760
‫Waar we in geïnteresseerd zijn, is de vector van de locatie van de toren tot de locatie van de treffer.

20
00:01:20,760 --> 00:01:23,100
‫We noemen deze vector om te richten.

21
00:01:23,130 --> 00:01:27,030
‫Nu is de vectorwiskunde om het doel te bereiken eigenlijk vrij eenvoudig.

22
00:01:27,060 --> 00:01:33,120
‫Om een vector van een startpunt naar een eindpunt te krijgen is altijd het eindpunt minus het startpunt.

23
00:01:33,420 --> 00:01:39,270
‫Dus als we onze tracering nemen, de locatie raken en de locatie van de vectortoren aftrekken, dan is

24
00:01:39,270 --> 00:01:41,620
‫de vector die hieruit voortvloeit het doel.

25
00:01:41,640 --> 00:01:47,160
‫Nu we de twee doelrichtingsvectoren hebben, willen we die omzetten in een rotatie, zodat we de

26
00:01:47,160 --> 00:01:49,530
‫rotatie van de tankkoepel kunnen instellen.

27
00:01:49,530 --> 00:01:53,750
‫En het vectortype heeft een ingebouwde functie die rotatie wordt genoemd.

28
00:01:53,760 --> 00:02:01,230
‫Dus als we onze doelvector zouden nemen en er rotatie op zouden noemen, zou dit een F-rotator opleveren die overeenkomt met

29
00:02:01,230 --> 00:02:02,260
‫die richting.

30
00:02:02,280 --> 00:02:04,430
‫Nu moeten we wel iets in het achterhoofd houden.

31
00:02:04,440 --> 00:02:11,160
‫Het resultaat van de spoorslag zal vaak op de vloer zijn en de vector van de tankkoepel naar het resultaat

32
00:02:11,160 --> 00:02:14,620
‫van de spoorslag zal niet parallel zijn met de grond.

33
00:02:14,640 --> 00:02:20,850
‫Dit betekent dat als we de rotatie van de tank naar de rotator instellen, we uit die richtingsvector krijgen, we iets

34
00:02:20,850 --> 00:02:26,790
‫als dit kunnen krijgen waarbij de toren naar beneden gericht is naar de grond, maar we willen niet dat

35
00:02:26,790 --> 00:02:29,310
‫de toren van de tank naar beneden draait.

36
00:02:29,310 --> 00:02:31,350
‫We willen dat het nog steeds naar voren wijst.

37
00:02:31,350 --> 00:02:33,780
‫Dit is dus het resultaat dat we willen.

38
00:02:33,810 --> 00:02:39,180
‫Met andere woorden, we willen alleen de ja-component van de rotatie van de tankkoepel veranderen.

39
00:02:39,180 --> 00:02:44,550
‫Dus op die manier wijst het in de juiste richting, maar blijft toch evenwijdig aan de grond.

40
00:02:44,550 --> 00:02:51,060
‫We hebben alleen de gier veranderd, dus laten we teruggaan naar de VS-code en een functie maken voor het draaien van de

41
00:02:51,060 --> 00:02:51,600
‫tankkoepel.

42
00:02:51,630 --> 00:02:57,210
‫Nu gaan we het torentje op de tank draaien, maar we willen ook het torentje op

43
00:02:57,210 --> 00:03:04,290
‫onze torenvijand draaien en de toren zal binnenkort worden gemaakt afgeleid van base pon, wat betekent dat als we een roterend

44
00:03:04,290 --> 00:03:08,820
‫torentje maken functie kunnen we het hier in de basis pong-klasse plaatsen.

45
00:03:08,820 --> 00:03:12,930
‫Dus op die manier zullen zowel de tank als de toren deze functie erven.

46
00:03:12,930 --> 00:03:18,480
‫Omdat we van plan zijn het in zowel de toren als de tank te gebruiken, kunnen we deze functie beschermen.

47
00:03:18,720 --> 00:03:24,630
‫Dus ik ga een beveiligde sectie toevoegen en alle functies en variabelen die we in de beschermde

48
00:03:24,630 --> 00:03:29,220
‫sectie plaatsen, zijn toegankelijk in deze onderliggende klassen, maar niet in andere klassen.

49
00:03:29,220 --> 00:03:32,580
‫Het is dus bijna net zo beperkt als privévariabelen.

50
00:03:32,580 --> 00:03:34,860
‫Nu kan deze functie void retourneren.

51
00:03:34,860 --> 00:03:37,710
‫Ik noem dit een roterend torentje.

52
00:03:38,850 --> 00:03:44,690
‫En om de toren te draaien, heb ik een soort bestemming nodig om naar te kijken.

53
00:03:44,700 --> 00:03:49,620
‫Dit kan een f-vector zijn en we kunnen dit blik op doel noemen.

54
00:03:49,620 --> 00:03:56,490
‫Dus het idee is dat als we een functie hebben die we kunnen passeren op een of andere locatie in de wereld, de functie

55
00:03:56,490 --> 00:04:00,360
‫zou moeten resulteren in het draaien van de toren naar die locatie.

56
00:04:00,360 --> 00:04:04,680
‫Dus laten we doorgaan en een functiedefinitie geven voor het draaien van de turret.

57
00:04:04,680 --> 00:04:11,280
‫Dus hier in de basispion CP, net onder de constructor, ga ik een roterend torentje implementeren.

58
00:04:11,280 --> 00:04:16,680
‫En natuurlijk heb ik de naam van een basispionklasse nodig met de scope-resolutie-operator hier.

59
00:04:16,680 --> 00:04:21,180
‫Dus nu ik een geroteerd torentje heb, laten we nadenken over hoe we dit gaan implementeren.

60
00:04:21,180 --> 00:04:28,320
‫Het eerste dat we nodig hebben, is dat om de vector van de torencomponent te richten op het resultaat van

61
00:04:28,320 --> 00:04:30,120
‫de traceertreffer onder de muiscursor.

62
00:04:30,120 --> 00:04:38,070
‫Dit kan dus een lokale F-vector zijn die naar het doel wordt geroepen en we gaan het gelijk stellen aan het resultaat van

63
00:04:38,070 --> 00:04:38,970
‫wat vectorwiskunde.

64
00:04:38,970 --> 00:04:43,350
‫Onthoud dat dit de bestemming wordt minus het startpunt.

65
00:04:43,350 --> 00:04:50,910
‫En de bestemming is kijken naar het doel en het startpunt wordt de locatie van de toren van de tank, met andere

66
00:04:50,910 --> 00:04:54,030
‫woorden, de locatie van het gaas van de toren.

67
00:04:54,030 --> 00:04:59,880
‫Dus we kunnen turret mesh zeggen en we kunnen de locatie van de turret mesh krijgen.

68
00:04:59,880 --> 00:05:07,290
‫De manier om de wereldlocatie van een component te krijgen, is met deze functie componentlocatie ophalen.

69
00:05:07,290 --> 00:05:09,630
‫Het behoort tot de klasse use scene component.

70
00:05:09,630 --> 00:05:11,460
‫Dus alle scènecomponenten hebben het.

71
00:05:11,460 --> 00:05:15,690
‫Dus vanuit de turret mesh noemen we de locatie van de component.

72
00:05:16,340 --> 00:05:23,600
‫Dus kijk naar het doel minus de locatie van het torentje en geeft ons de vector van het torentje naar het

73
00:05:23,600 --> 00:05:24,290
‫uitkijkdoel.

74
00:05:24,320 --> 00:05:30,590
‫Nu, zoals ik al zei, kunnen we een EF-rotator van naar doel krijgen met behulp van de F-vectoren-rotatiefunctie.

75
00:05:30,590 --> 00:05:37,100
‫Dus we gaan een F-rotator maken en we kunnen dit een kijk op rotatie noemen en

76
00:05:37,100 --> 00:05:40,100
‫we stellen dit gelijk aan de doelpuntrotatie.

77
00:05:40,280 --> 00:05:41,570
‫Dat is een functieaanroep.

78
00:05:41,570 --> 00:05:46,700
‫Dus nu hebben we de rotator die hiermee overeenkomt met de doelrichtingsvector.

79
00:05:46,700 --> 00:05:49,550
‫Maar het punt is dat we alleen om de YA geven.

80
00:05:49,550 --> 00:05:51,680
‫We willen de toonhoogte of rol niet veranderen.

81
00:05:51,680 --> 00:05:57,290
‫We willen de toren alleen rond de z-as draaien en parallel aan de grond houden.

82
00:05:57,290 --> 00:05:59,420
‫Nu kunnen we dit op verschillende manieren doen.

83
00:05:59,420 --> 00:06:05,870
‫Ten eerste kunnen we kijken naar rotatie, toonhoogte en dat op nul stellen.

84
00:06:05,870 --> 00:06:08,180
‫Met andere woorden, stel het gelijk aan nul.

85
00:06:08,210 --> 00:06:14,240
‫We kunnen ook kijken naar de rotatiepuntrol en die ook op nul zetten.

86
00:06:14,240 --> 00:06:21,020
‫Nadat we pitch en roll op nul hebben gezet, hebben we de rotatie die we willen, wat alleen het onderdeel is.

87
00:06:21,020 --> 00:06:22,460
‫Dit is een manier om het te doen.

88
00:06:22,460 --> 00:06:26,450
‫Een andere mogelijkheid is om een van de F-rotatorconstructor-overbelastingen te gebruiken.

89
00:06:26,450 --> 00:06:34,820
‫Als we f rotator tussen haakjes zeiden en een aantal waarden doorgaven, zoals nulpunt F voor de eerste en de pop-up vertelt

90
00:06:34,820 --> 00:06:38,300
‫me dat die eerste invoer de toonhoogte is.

91
00:06:38,300 --> 00:06:43,880
‫En dan voor de ya die we kunnen gebruiken om rotatie te richten.

92
00:06:44,330 --> 00:06:44,990
‫Ja.

93
00:06:44,990 --> 00:06:47,960
‫En voor de rol zouden we nulpunt F kunnen gebruiken.

94
00:06:47,960 --> 00:06:55,820
‫Wat dit nu doet, is een nieuwe F-rotator creëren met nul voor de toonhoogte, nul voor de rol en de component

95
00:06:55,820 --> 00:06:59,420
‫van de rotator die wordt geretourneerd door twee doelrotaties.

96
00:06:59,420 --> 00:07:05,300
‫Dus de waarde die hierdoor wordt geretourneerd, zou ons hetzelfde resultaat geven als wat we hier met deze drie regels hebben gedaan.

97
00:07:05,300 --> 00:07:11,990
‫Dus aangezien dit een beetje compacter en eleganter is, denk ik dat ik dit liever gebruik, zodat

98
00:07:11,990 --> 00:07:19,370
‫we de kijk op rotatievector kunnen initialiseren met de F-rotator geretourneerd door de F-rotatorconstructor op deze manier aan te roepen.

99
00:07:19,370 --> 00:07:21,380
‫Dus ik ga deze regel hier beneden verwijderen.

100
00:07:21,380 --> 00:07:23,360
‫En nu kijken we naar rotatie.

101
00:07:23,360 --> 00:07:29,000
‫Het laatste dat u in deze functie hoeft te doen, is de rotatie voor de revolverpuree in te stellen.

102
00:07:29,000 --> 00:07:36,440
‫Nu kunnen we de rotatie voor een bepaalde component opnieuw instellen met behulp van deze functie set wereldrotatie, het hoort bij

103
00:07:36,440 --> 00:07:38,270
‫het gebruik van scene component.

104
00:07:38,270 --> 00:07:44,300
‫En de reden dat we vaste woordrotatie gebruiken in plaats van een soort lokale rotatieoffset

105
00:07:44,300 --> 00:07:50,420
‫toe te voegen, is omdat we een rotatie hebben in wereldruimte twee. Het doel is een wereldruimterichtingsvector.

106
00:07:50,420 --> 00:07:56,000
‫We nemen de locatie van het torentje in de wereldruimte en trekken de blik op de doellocatie in de

107
00:07:56,000 --> 00:07:56,750
‫wereldruimte af.

108
00:07:56,750 --> 00:07:58,850
‫Dit is dus een richting van de wereldruimte.

109
00:07:58,850 --> 00:08:02,450
‫Daarom is de kijk op rotatie een rotatie van de wereldruimte.

110
00:08:02,450 --> 00:08:06,140
‫Dus we gaan set wereldrotatie gebruiken op het torentje mesh.

111
00:08:06,290 --> 00:08:13,280
‫Dus we zeggen turret mesh, stel wereldrotatie in en we gaan kijken naar rotatie.

112
00:08:13,280 --> 00:08:19,550
‫Dus nu hebben we een functie die elk doelwit in de wereld kan nemen en het torennet kan draaien om ernaar te

113
00:08:19,550 --> 00:08:22,550
‫kijken, maar het zal het gaas niet naar beneden draaien.

114
00:08:22,550 --> 00:08:28,100
‫Hij verandert alleen zijn gier, dus hij draait op een manier zoals een tankkoepel zou moeten draaien.

115
00:08:28,100 --> 00:08:31,100
‫Dus we hebben nu een functie om de toren te draaien.

116
00:08:31,130 --> 00:08:36,980
‫Ik daag je uit om deze functie aan te roepen om die torenrotatie in te stellen, de draaitorenfunctie in

117
00:08:36,980 --> 00:08:38,870
‫de tankklasse aan te roepen.

118
00:08:38,870 --> 00:08:40,730
‫Dit is een beveiligde functie.

119
00:08:40,730 --> 00:08:43,070
‫Dus de tankklasse heeft er toegang toe.

120
00:08:43,070 --> 00:08:49,220
‫Nu draait het torentje een F-vector, de blik op het doel, je gaat dat impactpunt gebruiken in

121
00:08:49,220 --> 00:08:51,410
‫het F-trefferresultaat van onze lijntracering.

122
00:08:51,410 --> 00:08:57,170
‫Dus ik laat het aan jou over om de juiste plaats in de code te vinden om deze functie aan te roepen.

123
00:08:57,410 --> 00:09:00,920
‫Dus pauzeer de video en plaats de draaitorenfunctie.

124
00:09:00,920 --> 00:09:02,870
‫Bel in de tankklasse.

125
00:09:06,000 --> 00:09:06,150
‫Oké.

126
00:09:06,300 --> 00:09:09,960
‫Dus we hebben onze draaitorenfunctie en we zijn klaar om het te noemen.

127
00:09:10,140 --> 00:09:18,200
‫Ik ga de tank in en hier is mijn vinkfunctie in de if-check voor spelercontrollerref.

128
00:09:18,210 --> 00:09:24,870
‫Ik heb mijn hitresultaat en nadat een get hit-resultaat onder de cursor is aangeroepen, heeft het hitresultaat

129
00:09:24,870 --> 00:09:25,860
‫geldige gegevens.

130
00:09:25,860 --> 00:09:30,480
‫In feite gebruiken we dat impactpunt van het trefferresultaat en tekenen we een debug-bol.

131
00:09:30,510 --> 00:09:35,370
‫Nu ik de debug-bol niet meer hoef te tekenen, ga ik door en verwijder die.

132
00:09:35,370 --> 00:09:39,900
‫En in plaats daarvan ga ik onze beschermde functie 'rotatietorentje' noemen.

133
00:09:39,900 --> 00:09:45,750
‫En voor de blik op het doel, ga ik het punt van het slagresultaat doorgeven.

134
00:09:47,140 --> 00:09:53,320
‫Dus nu gaan we bij elk frame de toren naar dat inslagpunt draaien vanuit ons hitresultaat.

135
00:09:53,350 --> 00:09:59,050
‫Voordat ik dit compileer, gebruik ik niet langer draw-debug-helpers, dus ik ga door en verwijder

136
00:09:59,050 --> 00:10:00,130
‫dat header-bestand.

137
00:10:00,340 --> 00:10:00,820
‫Oké.

138
00:10:00,850 --> 00:10:02,590
‫Nu ben ik klaar om te compileren.

139
00:10:02,970 --> 00:10:03,360
‫Oké.

140
00:10:03,370 --> 00:10:05,050
‫Ik ben weer hier in de editor.

141
00:10:05,080 --> 00:10:09,440
‫Laten we doorgaan en op play drukken en het bekijken.

142
00:10:09,460 --> 00:10:11,460
‫Dit is geweldig.

143
00:10:11,470 --> 00:10:12,910
‫Ik kan nog steeds ronddraaien.

144
00:10:12,910 --> 00:10:18,910
‫Ik kan mijn muis bewegen en het torentje draait overal waar ik mijn muiscursor beweeg.

145
00:10:18,910 --> 00:10:20,350
‫Dit is dus geweldig.

146
00:10:20,600 --> 00:10:25,750
‫Oké, dus voordat we dit afronden, wil ik een paar problemen bespreken.

147
00:10:25,750 --> 00:10:28,900
‫Ik wil dat dit mooi en gepolijst is en er geweldig uitziet.

148
00:10:28,930 --> 00:10:35,680
‫Nu doet het eerste probleem zich voor wanneer ik de muiscursor dicht bij het midden van de tank beweeg en er

149
00:10:35,680 --> 00:10:36,890
‫vervolgens doorheen ga.

150
00:10:36,910 --> 00:10:42,670
‫Je zult zien dat die rotatie op een gegeven moment heel snel klikt.

151
00:10:42,670 --> 00:10:48,250
‫En als we de muis een beetje op een lukrake manier verplaatsen, nou, dat ziet er niet zo goed uit.

152
00:10:48,250 --> 00:10:49,480
‫Het knapt.

153
00:10:49,480 --> 00:10:50,890
‫We hebben geen vloeiende bewegingen.

154
00:10:50,890 --> 00:10:52,270
‫Dus dat is één probleem.

155
00:10:52,300 --> 00:10:59,890
‫Het andere probleem is dat als ik klik en ik rol en naar de rand ga, ik zal zien dat mijn torentje

156
00:10:59,890 --> 00:11:03,750
‫in de andere richting springt als ik mijn muiscursor omhoog beweeg.

157
00:11:03,760 --> 00:11:05,730
‫Dus wat is daar aan de hand?

158
00:11:05,740 --> 00:11:06,910
‫Nou, laten we het uitzoeken.

159
00:11:06,910 --> 00:11:10,240
‫We gaan terug naar VS-code en ik zou graag mijn debug-bol terug willen krijgen.

160
00:11:10,240 --> 00:11:16,240
‫Dus hier in Tank, ga ik naar de tick-functie vlak voor het draaien van de turret

161
00:11:16,240 --> 00:11:19,240
‫en nogmaals ga ik debug debug sphere aanroepen.

162
00:11:19,450 --> 00:11:26,380
‫Nu voor de wereld die ik passeer, haal de wereld voor het midden Ik passeer het resultaat van

163
00:11:26,380 --> 00:11:35,350
‫de treffer Dot-inslagpunt voor de straal Ik gebruik 25 stip F-segmenten kunnen 12 zijn, kleur kan F zijn kleur rood aanhoudende lijnen kunnen

164
00:11:35,350 --> 00:11:38,440
‫onwaar zijn en levensduur kan negatief zijn.

165
00:11:38,440 --> 00:11:40,480
‫Dus hetzelfde als wat we eerder deden.

166
00:11:40,690 --> 00:11:42,280
‫Ik ga dit bericht dus bewaren.

167
00:11:42,280 --> 00:11:48,700
‫Ik voeg het header-bestand daar niet opnieuw toe en dat komt omdat debug-helpers eigenlijk standaard zijn inbegrepen, dus we

168
00:11:48,700 --> 00:11:50,830
‫hebben het technisch niet nodig.

169
00:11:50,830 --> 00:11:56,740
‫Ik ga gewoon opslaan, spring terug in de editor, doe een live codering kickoff en druk op play.

170
00:11:56,740 --> 00:11:58,600
‫Dus nu heb ik mijn debug-sfeer.

171
00:11:58,600 --> 00:12:05,320
‫Dus laten we naar de rand van de wereld gaan en ik ga die muiscursor naar de plek brengen waar

172
00:12:05,320 --> 00:12:07,240
‫hij in de afgrond valt.

173
00:12:07,240 --> 00:12:10,330
‫En daar hebben we het probleem.

174
00:12:10,330 --> 00:12:15,940
‫Zie je, we hebben geen trefferresultaat onder de cursor wanneer onze cursor daar omhoog beweegt, omdat er niets

175
00:12:15,940 --> 00:12:18,730
‫is waar we een trefferresultaat van kunnen krijgen.

176
00:12:18,730 --> 00:12:22,120
‫Daarom is ons impactpunt niet gedefinieerd.

177
00:12:22,120 --> 00:12:25,570
‫Dus wat we nodig hebben is iets om dat lijnspoor te raken.

178
00:12:25,600 --> 00:12:28,810
‫Nu heeft Unreal Engine veel tools die we kunnen gebruiken.

179
00:12:28,810 --> 00:12:35,170
‫Wat ik ga doen, is op de vervolgkeuzelijst hier klikken en het paneel van mijn plaatsacteur openen en dit pictogram

180
00:12:35,170 --> 00:12:38,380
‫selecteren dat volumes zegt en een blokkerend volume krijgen.

181
00:12:38,380 --> 00:12:39,820
‫Hier is het blokkeren van het volume.

182
00:12:39,820 --> 00:12:41,710
‫Ik sleep er een naar binnen.

183
00:12:41,740 --> 00:12:44,020
‫Dus nu heb ik dit blokkeervolume.

184
00:12:44,110 --> 00:12:48,190
‫Standaard worden blokkerende volumes verondersteld onzichtbaar te zijn.

185
00:12:48,190 --> 00:12:54,130
‫Als ik hiervoor naar het detailvenster ga en naar de botsing scrol, zie ik

186
00:12:54,130 --> 00:13:00,940
‫dat het Collision Presets is Invisible Wall, wat lijkt te suggereren dat het bijna alles zou moeten blokkeren.

187
00:13:00,940 --> 00:13:06,610
‫Het enige dat het niet blokkeert, is het zichtbaarheidskanaal en onze lijntracering

188
00:13:06,610 --> 00:13:08,680
‫volgt toevallig het zichtbaarheidskanaal.

189
00:13:08,680 --> 00:13:13,630
‫Alles in onze wereld dat het zichtbaarheidskanaal blokkeert, wordt geraakt door onze lijntracering.

190
00:13:13,630 --> 00:13:16,540
‫Maar dit specifieke volume niet.

191
00:13:16,540 --> 00:13:17,860
‫Het hoort onzichtbaar te zijn.

192
00:13:17,860 --> 00:13:22,690
‫Welnu, we kunnen naar de voorinstellingen voor botsingen gaan, de vervolgkeuzelijst openen en aangepast selecteren.

193
00:13:22,720 --> 00:13:28,300
‫Hierdoor kunnen we dat veranderen, zodat ik de botsingsreactie op het zichtbaarheidskanaal kan instellen.

194
00:13:28,300 --> 00:13:29,170
‫Het is een blok.

195
00:13:29,170 --> 00:13:34,960
‫Dus nu heb ik een onzichtbaar volume, maar het is ingesteld om het zichtbaarheidskanaal te blokkeren, wat

196
00:13:34,960 --> 00:13:40,180
‫betekent dat lijnsporen die tegen het zichtbaarheidskanaal aanlopen, zoals het onze, het zullen raken.

197
00:13:40,180 --> 00:13:45,580
‫Dus wat ik kan doen, is dat ik dit blokkerende volume kan nemen en het kan opschalen.

198
00:13:45,580 --> 00:13:47,800
‫Ik zal het net buiten de muur plaatsen.

199
00:13:47,800 --> 00:13:53,440
‫Ik kan het zelfs hier aan de rand van de muur plaatsen, en ik zal het een beetje naar beneden brengen

200
00:13:53,440 --> 00:13:55,900
‫zodat het een beetje overlapt met de muur.

201
00:13:55,900 --> 00:14:01,930
‫En op die manier hebben we hier deze onzichtbare barrière, en ik ga door en schalen het ook

202
00:14:01,930 --> 00:14:03,550
‫op in de Y-richting.

203
00:14:03,550 --> 00:14:09,880
‫Dus ik zal dat mooi en groot krijgen en het hier in het midden plaatsen en het een beetje opvulling geven.

204
00:14:09,880 --> 00:14:14,050
‫En ik ga het ook opschalen in de Z-richting.

205
00:14:14,050 --> 00:14:18,460
‫Dus nu is het mooi groot en onze lijntracering zou het moeten raken.

206
00:14:18,460 --> 00:14:20,080
‫Dus laten we die theorie testen.

207
00:14:20,110 --> 00:14:23,170
‫Laten we in de viewport klikken en naar de muur gaan.

208
00:14:23,170 --> 00:14:30,250
‫En ja hoor, ik raak dat blokkerende volume met mijn lijntracering en ik heb niet dat probleem waar

209
00:14:30,250 --> 00:14:34,240
‫mijn torentje klikt om naar een ongedefinieerde locatie te kijken.

210
00:14:34,240 --> 00:14:40,810
‫Het kijkt waarschijnlijk naar de oorsprong van de wereld omdat die vector van het inslagpunt allemaal nullen is.

211
00:14:40,810 --> 00:14:43,660
‫Als ik nu naar deze muur ga, heb ik hetzelfde probleem.

212
00:14:43,660 --> 00:14:46,270
‫Dus we hebben deze blokkerende volumes nodig.

213
00:14:46,600 --> 00:14:48,950
‫Rondom de omtrek van ons niveau.

214
00:14:48,970 --> 00:14:50,590
‫Nou, dat kan best makkelijk zijn.

215
00:14:50,590 --> 00:14:54,820
‫Het enige wat ik hoef te doen is dit blokkeervolume dupliceren.

216
00:14:54,820 --> 00:14:59,290
‫Nu kan ik van perspectiefweergave naar orthografische topweergave wisselen.

217
00:14:59,290 --> 00:15:06,070
‫Dus ik ga naar boven selecteren en naar buiten scrollen met mijn muiswiel en gewoon alt ingedrukt houden en deze muur dupliceren

218
00:15:06,070 --> 00:15:11,620
‫en er een hier plaatsen en ik kan op E drukken om naar de roteermodus te gaan.

219
00:15:11,620 --> 00:15:14,740
‫Dus ik ga alt vasthouden en 90 graden draaien.

220
00:15:14,740 --> 00:15:21,010
‫Dat geeft me een kopie en dan druk ik op dubbel u en zet ik mijn vertaalmodus aan de gang en

221
00:15:21,010 --> 00:15:26,920
‫ik verplaats hem hier naar deze kant en houd Alt ingedrukt en sleep een kopie naar die kant.

222
00:15:26,920 --> 00:15:28,720
‫Dus nu hebben we vier muren.

223
00:15:28,720 --> 00:15:34,990
‫Nu kan ik van bovenaanzicht terug naar perspectief en op play drukken, en nu kan ik naar een van deze muren

224
00:15:34,990 --> 00:15:40,240
‫gaan en het maakt niet uit welke muur ik bedekt, dus dat ziet er geweldig uit.

225
00:15:40,240 --> 00:15:42,340
‫Dus dat lost een van onze problemen op.

226
00:15:42,340 --> 00:15:43,720
‫Maar hoe zit het met deze andere?

227
00:15:43,720 --> 00:15:49,360
‫Als we de muis in de buurt van onze tank bewegen, hebben we nog steeds dit sporadische gedrag.

228
00:15:49,360 --> 00:15:51,880
‫Dus daar wil ik ook voor zorgen.

229
00:15:51,880 --> 00:15:56,770
‫De manier waarop ik hiervoor kan zorgen is door die rotatie te interpoleren.

230
00:15:56,770 --> 00:16:02,650
‫Dus in plaats van deze rotatiewaarde rechtstreeks in te stellen, kunnen we een interpolatiefunctie gebruiken

231
00:16:02,650 --> 00:16:08,740
‫die die rotatie in wezen op een soepele manier naar het doel verplaatst dat we bieden.

232
00:16:08,740 --> 00:16:10,270
‫Dus laten we eens kijken hoe dat werkt.

233
00:16:10,270 --> 00:16:15,970
‫Nu zou ik willen dat deze interpolatie in onze draaitorenfunctie zit, zodat we terug kunnen gaan naar

234
00:16:15,970 --> 00:16:22,750
‫de basispion om de toren te roteren, en in plaats van onze wereldrotatie in te stellen zodat de toren naar

235
00:16:22,750 --> 00:16:28,240
‫rotatie kijkt, kunnen we deze gelijk stellen aan de waarde die wordt geretourneerd door een interpolatiefunctie.

236
00:16:28,240 --> 00:16:34,720
‫Dus ik ga verwijderen, kijk naar rotatie en in plaats daarvan gaan we een functie aanroepen

237
00:16:34,720 --> 00:16:38,590
‫in de F-wiskundebibliotheek met de naam R inter twee.

238
00:16:39,100 --> 00:16:44,530
‫Nu is onze in two ontworpen om interpolatie voor rotators aan te kunnen.

239
00:16:44,530 --> 00:16:49,720
‫Nu is de eerste invoerparameter een const F-rotatorreferentie die stroom wordt genoemd.

240
00:16:49,720 --> 00:16:53,650
‫Dat is de huidige waarde van het ding dat we proberen te veranderen.

241
00:16:53,650 --> 00:16:59,560
‫Wat we proberen te veranderen, is de rotatie van onze torentjes en die kunnen we halen uit ons torentjegaas.

242
00:16:59,560 --> 00:17:05,920
‫Dus we zeggen turret mesh en de functie die we willen gebruiken is componentrotatie krijgen.

243
00:17:05,920 --> 00:17:10,420
‫Dus het lijkt veel op de locatie van de component, alleen krijgt het de rotatie.

244
00:17:10,420 --> 00:17:14,200
‫Nu is de volgende invoer een F-rotator genaamd Target.

245
00:17:14,200 --> 00:17:15,310
‫Dat is de waarde.

246
00:17:15,310 --> 00:17:21,430
‫We willen dat deze turret mesh-rotatie wordt geïnterpreteerd om soepel te naderen.

247
00:17:21,430 --> 00:17:23,890
‫Dat wordt onze kijk op rotatie.

248
00:17:23,890 --> 00:17:26,620
‫Dus ik ga zeggen kijk naar rotatie.

249
00:17:26,620 --> 00:17:28,630
‫De volgende invoer is Deltatijd.

250
00:17:28,630 --> 00:17:30,640
‫Dus we kennen het belang van Delta-tijd.

251
00:17:30,640 --> 00:17:37,030
‫Als we dingen verplaatsen of draaien, willen we dat die beweging onafhankelijk is van de framesnelheid.

252
00:17:37,030 --> 00:17:39,700
‫Dus daarvoor kunnen we Delta-tijd krijgen.

253
00:17:39,700 --> 00:17:46,210
‫Ik kan eenvoudig gameplay-statistieken opnemen en als je een goed geheugen hebt, zul je je herinneren

254
00:17:46,210 --> 00:17:49,150
‫dat de opname kismet slash-gameplay-statistieken is.

255
00:17:49,150 --> 00:17:57,700
‫Dus ik zal gameplay-statistieken hier krijgen, zodat ik toegang heb tot de statische functie, werelddelta-seconden kan krijgen en

256
00:17:57,700 --> 00:18:01,150
‫onthoud dat dit een wereldcontextobject vereist.

257
00:18:01,150 --> 00:18:04,030
‫Dus ik ga dit er in verwerken.

258
00:18:04,030 --> 00:18:06,340
‫En als laatste hebben we een interne snelheid nodig.

259
00:18:06,340 --> 00:18:12,280
‫Hoe hoger de waarde van de interne snelheid, hoe sneller we naar het doel zullen interpoleren.

260
00:18:12,280 --> 00:18:18,550
‫Dus als ik dit instel op een waarde van bijvoorbeeld vijf F, dan interpoleren we vrij langzaam.

261
00:18:18,580 --> 00:18:20,470
‫Laten we eens kijken hoe dit er nu uitziet.

262
00:18:20,470 --> 00:18:25,030
‫Dit alles staat op één regel en loopt van het scherm af.

263
00:18:25,030 --> 00:18:32,440
‫Dus wat ik ga doen is de invoer plaatsen om de wereldrotatie op zijn eigen regel in te stellen, zoals deze.

264
00:18:32,440 --> 00:18:34,060
‫Dus gewoon zo.

265
00:18:34,060 --> 00:18:39,820
‫En dan onze tolk, die deze vier invoerparameters ook van het scherm laat lopen.

266
00:18:39,820 --> 00:18:43,270
‫Dus ik ga ze elk op hun eigen regels zetten.

267
00:18:43,270 --> 00:18:49,420
‫Op die manier kunnen we alle invoer zien zonder zo van het scherm te hoeven scrollen.

268
00:18:49,420 --> 00:18:49,840
‫Oke.

269
00:18:49,840 --> 00:18:54,220
‫Ik ga door en sla dat op en start live codering.

270
00:18:54,220 --> 00:19:01,150
‫En als ik nu op play druk en de muis beweeg, merk dan op dat het even duurt voordat die rotatie

271
00:19:01,150 --> 00:19:01,480
‫plaatsvindt.

272
00:19:01,480 --> 00:19:06,430
‫Dat komt omdat we soepel interpoleren naar die doelrotatie.

273
00:19:06,430 --> 00:19:07,780
‫Dit is geweldig.

274
00:19:07,780 --> 00:19:09,340
‫Dat is precies wat ik wilde.

275
00:19:09,340 --> 00:19:14,950
‫Hoe ik mijn muis ook beweeg, ik krijg nooit die pittige, schokkerige, sporadische beweging.

276
00:19:15,040 --> 00:19:20,170
‫Nu is vijf een erg lage internetsnelheid, maar daar kunnen we verandering in brengen.

277
00:19:20,170 --> 00:19:21,820
‫We kunnen het een beetje sneller maken.

278
00:19:21,820 --> 00:19:28,420
‫Ik ga dit instellen op 25, kijken hoe dat eruit ziet, en ik laat je doorgaan en beslissen over de waarde die je

279
00:19:28,420 --> 00:19:30,040
‫leuk vindt voor je spel.

280
00:19:30,040 --> 00:19:34,450
‫Dus nog een keer, live coderen en op play drukken.

281
00:19:34,510 --> 00:19:39,010
‫Nu heb ik een vrij snelle interpolatie, maar het klikt niet.

282
00:19:39,010 --> 00:19:42,910
‫Het is nog steeds snel, maar het is geen momentopname.

283
00:19:42,910 --> 00:19:46,360
‫Dus zolang we zoiets niet doen, nou, dat krijgen we niet.

284
00:19:46,540 --> 00:19:47,860
‫Gek gedrag.

285
00:19:47,860 --> 00:19:53,500
‫En natuurlijk, als je een langzamere rotatie wilt, weet je nu hoe je het moet doen en we zijn klaar met

286
00:19:53,500 --> 00:19:56,220
‫de debug-bol tekenen, dus ik zal doorgaan en dat verwijderen.

287
00:19:56,230 --> 00:19:56,650
‫Oké.

288
00:19:56,650 --> 00:20:02,920
‫Samenvattend, we hebben de rotatie van de koepel ingesteld en kijken naar Target, een F-vector die

289
00:20:02,920 --> 00:20:05,800
‫overeenkomt met een punt in de wereld.

290
00:20:05,800 --> 00:20:08,080
‫Op dit moment gebruiken we alleen het resultaat van de traceertreffer.

291
00:20:08,110 --> 00:20:13,090
‫Nu hebben we deze functie in de base pong-klasse geplaatst en beveiligd, wat betekent dat

292
00:20:13,090 --> 00:20:15,880
‫we de functie in de tankklasse konden erven.

293
00:20:15,880 --> 00:20:21,190
‫En als we eenmaal klaar zijn om een torenklasse te maken op basis van basis --, dan zal die torenklasse deze

294
00:20:21,190 --> 00:20:24,610
‫functie voor het draaien van torentjes erven en kunnen we deze opnieuw gebruiken.

295
00:20:24,610 --> 00:20:26,050
‫Het enige wat we hoeven te doen is passeren.

296
00:20:26,050 --> 00:20:31,750
‫In een nieuwe kijk op Target zullen we in de komende lezingen werken aan het creëren van een torenklasse die is afgeleid

297
00:20:31,750 --> 00:20:32,380
‫van basis.

298
00:20:32,380 --> 00:20:33,250
‫Ik zie je snel.

