﻿1
00:00:04,460 --> 00:00:05,180
‫Hallo en welkom.

2
00:00:05,180 --> 00:00:10,490
‫In deze lezing gaan we een KML-spelmodus maken, wat slechts een van de mogelijke

3
00:00:10,490 --> 00:00:17,660
‫spelmodi zal zijn die we kunnen creëren dankzij een virtuele - gedode methode die in elk spel kan worden

4
00:00:17,660 --> 00:00:19,730
‫aangeroepen modi die we willen.

5
00:00:20,000 --> 00:00:24,290
‫Laten we erin duiken en kijken hoe we deze virtuele methode gaan implementeren.

6
00:00:25,600 --> 00:00:28,600
‫Dus we willen dat ons spel kan eindigen.

7
00:00:28,610 --> 00:00:29,710
‫Wat betekent het als een spel eindigt?

8
00:00:29,710 --> 00:00:34,720
‫Het betekent dat we in een soort van toestand komen waarin we die ene hebben of die we hebben verloren.

9
00:00:35,080 --> 00:00:37,210
‫We informeren de speler met behulp van een gebruikersinterface.

10
00:00:37,210 --> 00:00:42,880
‫We geven ze de mogelijkheid om misschien opnieuw op te starten en opnieuw te spelen, iets in die richting.

11
00:00:43,000 --> 00:00:46,830
‫De klassen die hierbij betrokken zijn, zijn meestal een spelmodus.

12
00:00:46,840 --> 00:00:52,210
‫De spelmodus is verantwoordelijk voor het bepalen van regels over het spel, zoals wie heeft gewonnen en wie heeft verloren.

13
00:00:52,840 --> 00:00:56,410
‫En daarvoor moeten we weten wie er vermoord wordt.

14
00:00:56,410 --> 00:01:02,440
‫Dus we gaan deze virtuele methode gebruiken, genaamd pion gedood, die zal worden aangeroepen als schietpion

15
00:01:02,440 --> 00:01:03,940
‫als hij sterft.

16
00:01:03,940 --> 00:01:09,130
‫Of het nu de A is of niet. L. of het is de speler die aan het sterven is.

17
00:01:10,450 --> 00:01:15,280
‫En verder wil ik hier een kleine complicatie toevoegen, namelijk dat er verschillende spelmodi

18
00:01:15,280 --> 00:01:18,310
‫zullen zijn die zijn afgeleid van onze hoofdschietspelmodus.

19
00:01:18,610 --> 00:01:20,290
‫Ze zullen die spelmodus implementeren.

20
00:01:20,290 --> 00:01:21,520
‫Dat is wat de pijl hier betekent.

21
00:01:21,520 --> 00:01:25,780
‫Het is vaak een beetje contra-intuïtief hoe de pijl gaat, maar dood ze allemaal.

22
00:01:25,780 --> 00:01:33,250
‫De spelmodus erft van de schietspelmodus en heft de gedode pion op om op te tellen en anders

23
00:01:33,250 --> 00:01:35,710
‫te beslissen over de spelregels.

24
00:01:35,710 --> 00:01:41,740
‫Daarom wil ik een virtuele pion-gedood-methode in de ouder-shooter-spelmodus zetten en deze vervolgens opnieuw

25
00:01:42,160 --> 00:01:48,100
‫implementeren of negeren in de kill all-spelmodus, wat de spelmodus wordt die we voor

26
00:01:48,100 --> 00:01:49,360
‫onszelf implementeren.

27
00:01:49,660 --> 00:01:54,430
‫En je kunt ervoor kiezen om verschillende spelmodi te doen, waarbij je misschien een bepaald aantal vijanden in

28
00:01:54,430 --> 00:01:58,420
‫het level wilt doden in plaats van ze allemaal of iets in die richting.

29
00:01:58,420 --> 00:02:00,430
‫Misschien een vlag veroveren, iets anders.

30
00:02:01,960 --> 00:02:08,470
‫Maar wat er in feite gaat gebeuren, is dat de shooter -- die de game-modus gaat vinden die de

31
00:02:08,470 --> 00:02:12,850
‫game-modus van het type shooter heeft en het zal noemen ---- gedood.

32
00:02:13,090 --> 00:02:18,970
‫En dan, afhankelijk van de implementatie die er is, gaat het via de override

33
00:02:18,970 --> 00:02:20,980
‫door naar de implementatie.

34
00:02:22,000 --> 00:02:28,330
‫Een andere complicatie hier is dat onze UI-logica en herstartlogica echt iets is dat zou moeten gebeuren in de

35
00:02:28,330 --> 00:02:35,140
‫gebruikersinterface van de spelercontroller, die over het algemeen de bevoegdheid van de speler is in plaats van iets globaals zoals

36
00:02:35,140 --> 00:02:36,070
‫de spelmodus.

37
00:02:36,340 --> 00:02:42,790
‫Dit geldt met name in games die multiplayer zijn, omdat de gamemodus niet echt op de computer van de speler

38
00:02:42,790 --> 00:02:45,100
‫bestaat, maar alleen op de server.

39
00:02:45,110 --> 00:02:49,060
‫Dus alle UI-dingen zouden in de spelercontroller moeten plaatsvinden.

40
00:02:49,600 --> 00:02:52,630
‫Dat is een complicatie waar we ons geen zorgen over hoeven te maken

41
00:02:52,630 --> 00:02:57,190
‫omdat dit geen multiplayer-game is, maar het is nog steeds goed om de klassen te gebruiken waarvoor ze in Unreal worden verwacht.

42
00:02:57,940 --> 00:03:04,690
‫Dus de spelercontroller, de eigenlijke root-spelercontrollerklasse heeft een virtuele methode genaamd game is speciaal voor

43
00:03:04,690 --> 00:03:12,550
‫dit doel geëindigd, zodat de gamemodus deze methode kan aanroepen en we kunnen deze in onze eigen shooter-play-controller implementeren

44
00:03:12,550 --> 00:03:17,500
‫om UI te doen, een herstarten van alles dat soort dingen.

45
00:03:17,950 --> 00:03:23,560
‫Maar we moeten het vanuit onze spelmodus oproepen als we hebben besloten dat het spel voorbij is.

46
00:03:23,560 --> 00:03:29,950
‫Dus we noemen het virtuele spel is geëindigd op de root-speler-controller en omdat die root-speler-controller

47
00:03:29,960 --> 00:03:35,230
‫eigenlijk een shooter-speler is, zal een controller uiteindelijk terugschakelen en bellen.

48
00:03:35,230 --> 00:03:36,070
‫Dit spel is afgelopen.

49
00:03:36,070 --> 00:03:41,980
‫Dus het lijkt een omslachtige route die we gaan bellen van onze shooter-pion via de shooter-spelmodus om ze

50
00:03:41,980 --> 00:03:46,360
‫allemaal te doden in de spelmodus naar de spelercontroller naar de shooter-spelercontroller.

51
00:03:46,690 --> 00:03:52,300
‫Maar dit geeft ons veel flexibiliteit in termen van, nou ja, we kunnen verschillende spelcontrollers mixen en matchen die

52
00:03:52,300 --> 00:03:55,720
‫de gebruikersinterface op verschillende manieren en op verschillende niveaus laten zien.

53
00:03:55,990 --> 00:04:00,070
‫We kunnen verschillende spelmodi mixen en matchen die op verschillende manieren zullen werken, en dat is de reden

54
00:04:00,070 --> 00:04:02,200
‫waarom ik het op deze manier heb ontworpen.

55
00:04:02,200 --> 00:04:07,720
‫Het is een beetje overkill voor ons project, maar het laat zien hoe dit kan worden uitgebreid naar

56
00:04:07,720 --> 00:04:11,740
‫andere projecten met het vastleggen van de spelmodi en verschillende soorten spelercontrollers.

57
00:04:12,100 --> 00:04:14,170
‫Dus laten we het gaan implementeren.

58
00:04:14,620 --> 00:04:18,010
‫We gaan op zoek naar een routespelmodus.

59
00:04:18,010 --> 00:04:22,060
‫Er is er al een gemaakt omdat ik ben begonnen met een C++-project.

60
00:04:22,450 --> 00:04:28,090
‫We hebben een eenvoudige schietspelmodusbasis en wat ik hier wil doen, is een openbare

61
00:04:28,090 --> 00:04:35,770
‫functie creëren die ongeldig zal worden en die zal worden - gedood en we zullen moeten passeren in de -

62
00:04:35,770 --> 00:04:37,420
‫die werd hier vermoord.

63
00:04:37,420 --> 00:04:42,310
‫Dus het wordt een -- ster genaamd -- die zo wordt vermoord.

64
00:04:42,400 --> 00:04:46,630
‫En dan, in het begin, gaan we hier een virtuele methode van maken en

65
00:04:46,630 --> 00:04:50,680
‫we gaan door en creëren een basisimplementatie die hier in wezen niets doet.

66
00:04:50,710 --> 00:04:52,900
‫Dan gaan we een subklasse maken.

67
00:04:52,900 --> 00:05:00,280
‫Dus nieuwe C++-klasse, we gaan alle klassen tonen en we gaan op zoek naar shooter simple

68
00:05:00,280 --> 00:05:10,240
‫shooter game mode base als onze basisklasse en we gaan dit de kill em all game-modus noemen en ga je gang en

69
00:05:10,240 --> 00:05:11,830
‫creëer die klas.

70
00:05:12,010 --> 00:05:17,950
‫Als dat is gecompileerd, wil ik gewoon even overschakelen en naar ons shooter-personage gaan.

71
00:05:18,100 --> 00:05:23,350
‫CP En je kunt hier zien dat we onze is dood in de take damage methode.

72
00:05:23,920 --> 00:05:30,880
‫Als dit dood is, wil ik onze spelmodus bemachtigen en de -- gedood noemen.

73
00:05:31,240 --> 00:05:37,660
‫Dus de manier waarop we dit doen, is dat we beginnen met bellen om de wereld te krijgen om de spelmodus te krijgen.

74
00:05:37,900 --> 00:05:40,540
‫Dan is het uit de spelmodus.

75
00:05:40,720 --> 00:05:46,690
‫En wat we dan willen doen, is dat deze spelmodus van het juiste type is, de

76
00:05:46,690 --> 00:05:52,120
‫eenvoudige, de basismodus, de eenvoudige schietspelmodus waarmee we dit personage vervolgens kunnen uitschakelen, gebruiken met

77
00:05:52,120 --> 00:05:54,670
‫verschillende spelmodi, zoals capture the flag-spelmodi.

78
00:05:55,210 --> 00:06:01,390
‫Dus de manier waarop we dit kunnen doen, kunnen we de punthaken gebruiken hier in de get- of game-modus.

79
00:06:01,510 --> 00:06:07,570
‫En we gaan een eenvoudige schietspelmodus doen en die moeten we bovenaan opnemen.

80
00:06:08,440 --> 00:06:18,040
‫Dus voeg een eenvoudige shooter-spelmodus toe, zodat ik de naam van de hele klas niet helemaal goed kreeg.

81
00:06:18,040 --> 00:06:18,460
‫I denk.

82
00:06:18,460 --> 00:06:21,880
‫Het wordt dus een eenvoudige schietspelmodus.

83
00:06:22,450 --> 00:06:28,420
‫Dat is wat we proberen te krijgen en we kunnen doorgaan en dat opslaan in een variabele aanwijzer, laten we het

84
00:06:28,420 --> 00:06:29,290
‫de spelmodus noemen.

85
00:06:29,290 --> 00:06:35,800
‫En wat we dan willen doen is op deze nieuwe regel, we willen waarschijnlijk controleren of we dit hebben en het

86
00:06:35,800 --> 00:06:36,730
‫is geen nulaanwijzer.

87
00:06:36,730 --> 00:06:40,570
‫De spelmodus is dus niet gelijk aan een nulwijzer.

88
00:06:40,600 --> 00:06:47,560
‫En als het dan niet gelijk is aan alle punten van dat is waar we de spelmodus pijlpion gedood willen noemen

89
00:06:47,680 --> 00:06:50,530
‫en de gedode pion, is dit dan zo?

90
00:06:50,620 --> 00:06:54,940
‫Dus nu weet de spelmodus dat er een pion is gedood.

91
00:06:55,220 --> 00:07:00,460
‫Kleine mini-uitdaging voor jou om de spelmodus Kill them all te negeren, zodat je dat kunt.

92
00:07:00,520 --> 00:07:06,670
‫Log uit wanneer de -- wordt gedood en stel dat in als de standaard spelmodus op je kaart.

93
00:07:06,850 --> 00:07:07,210
‫Oké.

94
00:07:07,210 --> 00:07:09,460
‫Dus hopelijk heb je die kleine mini-uitdaging geprobeerd.

95
00:07:09,760 --> 00:07:11,770
‫We gaan aan de slag en implementeren.

96
00:07:11,770 --> 00:07:17,680
‫Dus ik ga dit doen door het openbare gedeelte van onze eenvoudige shooter-spelmodusbasis te kopiëren, en het is moeilijk om al

97
00:07:17,680 --> 00:07:19,240
‫deze dingen bij te houden.

98
00:07:19,660 --> 00:07:23,800
‫Dan gaan we naar onze kill-ze-all-spelmodusbasis, die ervan erft.

99
00:07:24,430 --> 00:07:31,300
‫En we gaan de virtuele methode plakken en we gaan het override-sleutelwoord toevoegen om ervoor te zorgen dat

100
00:07:31,300 --> 00:07:33,610
‫we deze methode correct overschrijven.

101
00:07:34,760 --> 00:07:39,350
‫Dan ga ik een implementatie maken in de C ++ voor onze KML-spelmodusbasis.

102
00:07:40,130 --> 00:07:42,920
‫Dit is waar we dat logbericht zouden moeten krijgen.

103
00:07:42,920 --> 00:07:47,030
‫En om heel voorzichtig te zijn, weten we dat er niets in de implementatie zit.

104
00:07:47,390 --> 00:07:48,380
‫Maar je weet maar nooit.

105
00:07:48,390 --> 00:07:52,080
‫Dingen kunnen later veranderen en we kunnen een beetje in de bom worden.

106
00:07:52,100 --> 00:07:54,950
‫Dus we willen een pion doden.

107
00:07:56,340 --> 00:07:58,830
‫Super -- gedood met de -- gedood.

108
00:07:59,280 --> 00:07:59,820
‫Klinkt logisch.

109
00:08:00,420 --> 00:08:07,830
‫En dan willen we hier een dialoog voeren die in feite zegt dat een -- werd vermoord.

110
00:08:08,490 --> 00:08:15,900
‫En we kunnen zien of dat werkt door naar Unreal te gaan en te compileren, dan naar het

111
00:08:15,900 --> 00:08:20,850
‫blauwdrukken-item op de werkbalk te gaan en in de projectinstellingen te selecteren.

112
00:08:20,850 --> 00:08:27,420
‫De standaard spelmodus die we willen zijn, als we de spelmodus, basisklasse selecteren, willen we dat het de basisspelmodus

113
00:08:27,420 --> 00:08:31,710
‫is die ze allemaal vermoorden, ga je gang en doe dat.

114
00:08:31,710 --> 00:08:35,370
‫In feite is dat niet helemaal wat we willen doen als we gaan selecteren.

115
00:08:35,730 --> 00:08:44,100
‫We wilden eigenlijk dat het daar een blauwdrukkind van zou zijn en we hebben al een blauwdrukkind dat een heleboel dingen

116
00:08:44,100 --> 00:08:45,000
‫heeft ingesteld.

117
00:08:45,000 --> 00:08:47,520
‫Dus laten we daar een ouderschapstaak doen.

118
00:08:48,390 --> 00:08:53,850
‫We gaan naar de wortels, we zullen de BP shooter-spelmodus vinden, die we hier hebben.

119
00:08:54,360 --> 00:09:03,060
‫We gaan deze BP hernoemen, kill alle spelmodus en dan kunnen we dat openen, het venster dokken, de

120
00:09:03,060 --> 00:09:11,160
‫volledige blauwdrukeditor openen, naar de klasinstellingen gaan en de ouder wijzigen in de KML-spelmodus, in feite

121
00:09:11,160 --> 00:09:11,670
‫C++.

122
00:09:12,150 --> 00:09:18,360
‫En op die manier zouden we de juiste code moeten gebruiken als we naar ons bericht gaan om

123
00:09:18,360 --> 00:09:26,490
‫log uit te voeren en op play te drukken en dan een personage te doden. We hebben een probleem lijkt niet de juiste

124
00:09:26,820 --> 00:09:35,550
‫instelling te hebben, dus als we teruggaan naar de standaardinstellingen van de klas en verander de standaard -- class in het BP shooter-personage, dat zou

125
00:09:35,550 --> 00:09:36,780
‫correct moeten zijn.

126
00:09:36,960 --> 00:09:39,300
‫Opslaan en compileren voor het geval het fout zou gaan.

127
00:09:39,300 --> 00:09:41,910
‫En bekijk dan mijn blauwdrukken hier.

128
00:09:41,940 --> 00:09:44,640
‫Het heeft het KML-spel geselecteerd, het C++-spel.

129
00:09:44,640 --> 00:09:49,470
‫Dus we willen hier eigenlijk de blauwdruk kiezen en doorgaan en op play klikken.

130
00:09:49,470 --> 00:09:50,820
‫Nu hebben we onze pion.

131
00:09:50,820 --> 00:09:55,800
‫We kunnen doorgaan en deze man doden en je kunt zien dat er een pion is gedood.

132
00:09:55,800 --> 00:09:57,090
‫Staat Prince in het logbericht?

133
00:09:57,420 --> 00:09:59,820
‫Dat werkt dus fantastisch.

134
00:10:00,360 --> 00:10:05,070
‫Nu, in het volgende gedeelte, gaan we kijken naar het tweede deel

135
00:10:05,070 --> 00:10:12,630
‫hiervan, namelijk dat het spel is afgelopen, terwijl we het spel echt willen beëindigen en vanaf dat moment opnieuw willen beginnen.

136
00:10:13,110 --> 00:10:15,720
‫Dus ik zie je in die lezing.

