﻿1
00:00:04,380 --> 00:00:04,920
‫Hej.

2
00:00:04,920 --> 00:00:05,810
‫Witamy spowrotem.

3
00:00:05,820 --> 00:00:11,610
‫Jesteśmy gotowi do ukończenia naszej gry, co oznacza, że pozostało tylko kilka rzeczy do zrobienia, aby dopracować naszą

4
00:00:11,610 --> 00:00:15,150
‫grę i doprowadzić ją do stanu, z którego jesteśmy zadowoleni.

5
00:00:15,150 --> 00:00:17,730
‫Przygotuj się więc na zakończenie tej gry.

6
00:00:17,730 --> 00:00:19,170
‫Prawie skończyliśmy.

7
00:00:19,170 --> 00:00:21,450
‫Dodamy tylko kilka funkcji.

8
00:00:21,450 --> 00:00:25,980
‫Chciałbym, aby ruch kamery był nieco płynniejszy, więc od tego zaczniemy.

9
00:00:26,010 --> 00:00:32,130
‫Zauważyłem również, że wieże nadal strzelają pociskami po śmierci czołgu, więc możemy

10
00:00:32,130 --> 00:00:35,250
‫łatwo naprawić kod, aby temu zapobiec.

11
00:00:35,250 --> 00:00:40,410
‫A także zamierzam odwiedzić potencjalny problem z punktem odradzania pocisków.

12
00:00:40,410 --> 00:00:43,380
‫Więc wskoczmy i dopracujmy tę grę.

13
00:00:43,740 --> 00:00:46,920
‫Teraz pierwszą rzeczą, na którą chciałbym się przyjrzeć, jest ruch kamery.

14
00:00:46,920 --> 00:00:50,670
‫Więc jeśli pójdę dalej i wcisnę play, pokażę ci, co mam na myśli.

15
00:00:50,820 --> 00:00:58,380
‫Kiedy się poruszam, zobaczysz, że kamera podąża dokładnie za naszym ruchem, gdy się obracamy, a gdy poruszamy się do

16
00:00:58,380 --> 00:01:03,210
‫przodu i do tyłu, kamera po prostu automatycznie podąża za nami.

17
00:01:03,210 --> 00:01:08,850
‫Teraz możemy dodać do tego aparatu fajną sztuczkę, która sprawi, że będzie trochę płynniejszy.

18
00:01:08,850 --> 00:01:11,730
‫Chodźmy dalej i otwórzmy zbiornik na staw BP.

19
00:01:11,940 --> 00:01:16,830
‫Teraz, w BP Pond Tank, wybiorę komponent naszego ramienia sprężynowego.

20
00:01:16,830 --> 00:01:23,580
‫A jeśli szukam lagów kamery, zobaczę tutaj w sekcji lagów, jest to pole wyboru, aby włączyć opóźnienie

21
00:01:23,580 --> 00:01:24,360
‫kamery.

22
00:01:24,390 --> 00:01:28,440
‫Sprawdzę to i włączę opóźnienie obrotu kamery.

23
00:01:28,470 --> 00:01:30,240
‫To też sprawdzę.

24
00:01:30,240 --> 00:01:37,590
‫Teraz pozwala nam to opóźniać i płynnie nadążać za aparatem, co tworzy przyjemny rodzaj

25
00:01:37,590 --> 00:01:39,780
‫profesjonalnego efektu aparatu.

26
00:01:39,780 --> 00:01:42,810
‫Chodźmy dalej, włączmy odtwarzanie i przetestujmy to.

27
00:01:42,810 --> 00:01:50,490
‫Więc zauważ, że kiedy się poruszam, kamera potrzebuje trochę czasu, aby nadrobić zaległości, gdy się poruszamy.

28
00:01:50,490 --> 00:01:53,190
‫To samo dotyczy rotacji.

29
00:01:53,190 --> 00:01:59,970
‫Wygląda więc na to, że jest trochę bezwładności, a kamera jest na jakimś torze ślizgowym i zwalnia aż

30
00:01:59,970 --> 00:02:00,840
‫do zatrzymania.

31
00:02:00,840 --> 00:02:07,710
‫Teraz możemy wybrać ramię sprężyny i możemy zmienić prędkość opóźnienia kamery i prędkość opóźnienia obrotów.

32
00:02:07,710 --> 00:02:15,300
‫Na przykład, jeśli umieszczę to na mniejszej wartości, powiedzmy pięć i pięć zamiast dziesięciu, teraz przyjrzyjmy się,

33
00:02:15,300 --> 00:02:16,950
‫jak to wygląda.

34
00:02:17,040 --> 00:02:21,450
‫Więc ruszam i zobaczysz, że kamera ma trochę większe opóźnienie.

35
00:02:21,450 --> 00:02:25,170
‫Teraz możemy to zwiększyć lub zmniejszyć według własnego uznania.

36
00:02:25,170 --> 00:02:31,170
‫To jest coś, z czym możesz poeksperymentować i znaleźć wartości, które będą dla ciebie odpowiednie.

37
00:02:31,200 --> 00:02:36,930
‫Tutaj mamy wartość dwa i dla mnie to trochę za duże opóźnienie.

38
00:02:36,930 --> 00:02:41,100
‫Więc myślę, że coś od pięciu do dwóch sprawdziłoby się dla mnie.

39
00:02:41,100 --> 00:02:46,290
‫Jeśli podoba ci się ten rodzaj wartości, to może utrzymasz ją na poziomie dwóch, a może nawet niższych.

40
00:02:46,290 --> 00:02:54,360
‫Ale ustawię to na, powiedzmy, cztery dla szybkości opóźnienia kamery i cztery dla szybkości opóźnienia obrotu

41
00:02:54,360 --> 00:02:55,320
‫kamery.

42
00:02:55,350 --> 00:02:57,270
‫Przyjrzyjmy się, jak to wygląda.

43
00:02:57,270 --> 00:02:59,850
‫Więc kiedy się poruszam, kamera się opóźnia.

44
00:02:59,850 --> 00:03:03,660
‫Wyraźnie widać opóźnienie aparatu, ale nie jest to zbyt duże.

45
00:03:03,660 --> 00:03:09,660
‫Myślę, że to wygląda całkiem nieźle, więc jestem z tego całkiem zadowolony.

46
00:03:10,320 --> 00:03:15,960
‫Naszym kolejnym punktem jest wieża strzelająca już po śmierci czołgu.

47
00:03:15,960 --> 00:03:18,930
‫Pozwól, że pójdę dalej i pokażę ci, co mam na myśli.

48
00:03:19,020 --> 00:03:19,740
‫No to jedziemy.

49
00:03:19,740 --> 00:03:23,880
‫Czołg zginął, a wieże wciąż strzelają.

50
00:03:23,970 --> 00:03:26,970
‫Teraz to dlatego, że zbiornik nadal istnieje.

51
00:03:26,970 --> 00:03:31,290
‫Dopóki jest w zasięgu ognia, wieże będą strzelać.

52
00:03:31,290 --> 00:03:38,130
‫Można to łatwo obsłużyć, mając rodzaj zmiennej, którą możemy sprawdzić, aby zobaczyć, czy zbiornik zginął.

53
00:03:38,520 --> 00:03:45,690
‫Przejdę więc do klasy czołgów i czołgu, i dodam zmienną logiczną, którą możemy sprawdzić, aby

54
00:03:45,690 --> 00:03:48,690
‫zobaczyć, czy czołg nadal żyje.

55
00:03:48,690 --> 00:03:53,580
‫I zamierzam to upublicznić, ponieważ planujemy uzyskać do niego dostęp spoza klasy.

56
00:03:53,580 --> 00:04:00,690
‫Zamierzam więc ustawić tę zmienną byka o nazwie Be Alive i ustawię ją domyślnie na wartość

57
00:04:00,690 --> 00:04:01,500
‫true.

58
00:04:01,500 --> 00:04:09,270
‫Tak więc czołg rozpocznie się w stanie żywym, a następnie, gdy czołg umrze, żywy zostanie ustawiony na fałszywy.

59
00:04:09,270 --> 00:04:14,130
‫A to może się zdarzyć w czołgu CP w zniszczeniu rękojeści.

60
00:04:14,130 --> 00:04:16,530
‫Więc zajmijmy się tutaj destrukcją.

61
00:04:16,530 --> 00:04:23,070
‫A po ustawieniu tych innych właściwości ustawię B żywe na fałsz.

62
00:04:23,190 --> 00:04:29,730
‫Skoro więc ustawiamy B przy życiu na fałsz, możemy wiedzieć, czy czołg zginął, a następnie możemy po

63
00:04:29,730 --> 00:04:33,120
‫prostu zapobiec wystrzeliwaniu pocisków, sprawdzając tę wartość logiczną.

64
00:04:33,120 --> 00:04:38,790
‫Przejdźmy więc do Tower Dot, CP i tutaj sprawdźmy stan ognia.

65
00:04:38,790 --> 00:04:42,990
‫Możemy upewnić się, że czołg wciąż żyje, zanim wystrzelimy.

66
00:04:42,990 --> 00:04:46,290
‫Więc najpierw sprawdzę, czy zbiornik jest ważny.

67
00:04:46,290 --> 00:04:52,560
‫Powiem, że jeśli zbiornik jest równy null pointerowi, to po prostu wrócę wcześniej.

68
00:04:52,560 --> 00:04:59,010
‫W ten sposób wiemy, że Tank będzie ważny, a następnie, aby sprawdzić, czy jesteśmy w

69
00:04:59,010 --> 00:05:03,420
‫zasięgu ognia, dodam i i zobaczę, czy Tank żyje.

70
00:05:03,450 --> 00:05:03,870
‫Jeśli zbiornik.

71
00:05:03,980 --> 00:05:05,830
‫Żyje, wtedy możemy strzelać.

72
00:05:05,840 --> 00:05:08,840
‫Jeśli Tank nie żyje, nie będziemy strzelać.

73
00:05:09,020 --> 00:05:14,900
‫Teraz możesz się zastanawiać, czy dobrym pomysłem jest umieszczenie zwrotu w jednym wierszu, tak jak robiłem

74
00:05:14,900 --> 00:05:16,610
‫to w poprzednich filmach.

75
00:05:16,610 --> 00:05:23,960
‫To dobra okazja do omówienia silników Unreal Engine, najlepszych praktyk programistycznych i rekomendacji.

76
00:05:23,990 --> 00:05:30,590
‫Nierealne praktyki kodowania silników zalecają stosowanie nawiasów klamrowych z treścią dla wszystkich instrukcji if, nawet

77
00:05:30,590 --> 00:05:33,080
‫tych, które mają jedną instrukcję.

78
00:05:33,080 --> 00:05:39,200
‫Powodem jest to, że jeśli planujesz dodać do tego wiele linii kodu, to już masz

79
00:05:39,200 --> 00:05:40,190
‫tutaj treść.

80
00:05:40,190 --> 00:05:41,690
‫I jest to również bardziej przejrzyste.

81
00:05:41,690 --> 00:05:46,160
‫I to również prowadzi mnie do innego punktu, jakim jest używanie przeze mnie samochodu.

82
00:05:46,190 --> 00:05:53,720
‫Kilka razy używałem auto tutaj w klasie pocisków i chociaż może to być skuteczne, na pierwszy

83
00:05:53,720 --> 00:06:01,940
‫rzut oka nie jest tak oczywiste, jakie są typy, dlatego też użycie auto nie jest zalecane w

84
00:06:01,940 --> 00:06:04,220
‫nierealnych praktykach kodowania silnika.

85
00:06:04,220 --> 00:06:09,770
‫Jeśli chcesz trzymać się zalecanych przez Unreal Engine praktyk kodowania, możesz zastąpić te

86
00:06:09,770 --> 00:06:11,570
‫wystąpienia auto rzeczywistym typem.

87
00:06:11,570 --> 00:06:19,460
‫Na przykład tutaj, get instigator controller zwraca kontroler A, więc możemy go zmienić na kontroler i to

88
00:06:19,550 --> 00:06:20,990
‫jest wskaźnik.

89
00:06:20,990 --> 00:06:29,210
‫Ten typ obrażeń, klasa statyczna, zwraca klasę U, więc możemy użyć tutaj twojej klasy i oczywiście dostać

90
00:06:29,210 --> 00:06:37,940
‫właściciela tutaj, zwraca aktora, więc moglibyśmy użyć aktora zamiast auto tutaj i teraz, jeśli spojrzysz na ten kod, to

91
00:06:37,940 --> 00:06:44,840
‫dużo bardziej oczywiste, czym są te typy, podczas gdy auto po prostu maskuje wszystko i

92
00:06:44,840 --> 00:06:48,740
‫pozwala być leniwym i uniknąć wpisywania typów.

93
00:06:48,740 --> 00:06:55,790
‫Teraz czasami nie jestem pewien, co zwraca duże wyrażenie, więc użyję auto, aby zobaczyć, jaki

94
00:06:55,790 --> 00:07:00,410
‫jest ten typ, a później zastąpię go rzeczywistym typem.

95
00:07:00,410 --> 00:07:07,880
‫To kolejny sposób, w jaki możesz użyć auto, aby nauczyć się typów zwracanych przez długie, skomplikowane wyrażenia, takie jak

96
00:07:07,880 --> 00:07:08,540
‫to.

97
00:07:08,540 --> 00:07:14,120
‫Więc ponieważ jesteśmy na etapie dopracowywania, zamierzam zastąpić auto rzeczywistymi nazwami typów tutaj

98
00:07:14,120 --> 00:07:15,350
‫w pocisku.

99
00:07:15,380 --> 00:07:23,390
‫Zamierzam również przejść do pionka podstawowego w funkcji ognia, gdzie mamy ten pocisk i jest to zwracane z

100
00:07:23,390 --> 00:07:25,940
‫tego dużego długiego wyrażenia tutaj.

101
00:07:25,940 --> 00:07:34,550
‫Aktor Spawn zwróci w tym przypadku pocisk, więc mogę go zastąpić pociskiem.

102
00:07:35,640 --> 00:07:36,150
‫Dobra.

103
00:07:36,150 --> 00:07:39,840
‫To dopracuje kod po stronie C++.

104
00:07:39,840 --> 00:07:41,850
‫Przejdźmy dalej i skompilujmy to.

105
00:07:41,850 --> 00:07:47,910
‫Po udanej kompilacji wskoczmy z powrotem do edytora, włączymy odtwarzanie i po prostu upewnijmy

106
00:07:47,910 --> 00:07:52,890
‫się, że te wieże przestaną strzelać do nas po naszej śmierci.

107
00:07:52,890 --> 00:07:54,180
‫Więc jest jedno trafienie.

108
00:07:55,050 --> 00:08:00,270
‫Jest jeszcze jeden, czekam i nie widzę więcej pocisków.

109
00:08:00,300 --> 00:08:01,230
‫Idealny.

110
00:08:01,260 --> 00:08:01,680
‫Dobra.

111
00:08:01,680 --> 00:08:07,500
‫Więc ostatnim punktem, który chciałbym omówić, zanim to zakończymy, jest punkt odrodzenia pocisku.

112
00:08:07,530 --> 00:08:14,550
‫Teraz wybierzmy to tutaj w BP Pond Tank i upewnijmy się, że jest wystarczająco oddalone od

113
00:08:14,550 --> 00:08:15,120
‫beczki.

114
00:08:15,150 --> 00:08:19,890
‫Zanim to zrobimy, przedstawię to bardzo, bardzo blisko i pokażę kilka problemów, które mogą

115
00:08:19,890 --> 00:08:21,240
‫się potencjalnie pojawić.

116
00:08:21,270 --> 00:08:27,570
‫Teraz, gdy idę do przodu i kliknę lewym przyciskiem myszy, zobaczysz, że nie widzę pocisku.

117
00:08:27,570 --> 00:08:31,530
‫W rzeczywistości w ogóle go nie widzę, ponieważ jest po prostu zbyt blisko.

118
00:08:31,530 --> 00:08:33,100
‫Już mamy kolizję.

119
00:08:33,120 --> 00:08:35,970
‫Jest niszczony, zanim może cokolwiek zrobić.

120
00:08:35,970 --> 00:08:39,810
‫Upewnij się więc, że jest daleko od beczki.

121
00:08:39,840 --> 00:08:45,960
‫I tak wypuszczamy trochę dymu, więc będzie to wyglądać, jakby podążał za nim ślad dymu.

122
00:08:45,960 --> 00:08:48,450
‫Więc to nadal będzie wyglądać całkiem realistycznie.

123
00:08:49,970 --> 00:08:51,250
‫Wygląda to całkiem nieźle.

124
00:08:51,260 --> 00:08:58,040
‫A skoro już jesteśmy przy punktach odradzania pocisków, dobrym pomysłem może być przyjrzenie się wieżyczce stawu

125
00:08:58,040 --> 00:09:01,010
‫BP i wybranie jej punktu odradzania pocisków.

126
00:09:01,010 --> 00:09:05,270
‫A jeśli miałeś problemy z odradzaniem pocisków z wieży, możesz

127
00:09:05,270 --> 00:09:10,570
‫chcieć upewnić się, że znajduje się ona również w dobrej odległości od lufy wieży.

128
00:09:10,580 --> 00:09:11,810
‫Więc mamy to.

129
00:09:11,810 --> 00:09:15,980
‫Mamy funkcjonalną grę, która wygląda fantastycznie.

130
00:09:15,980 --> 00:09:21,650
‫Mamy możliwość toczenia się po świecie, mamy możliwość strzelania pociskami i

131
00:09:21,650 --> 00:09:22,760
‫wysadzania rzeczy.

132
00:09:22,760 --> 00:09:25,190
‫Jeśli uderzymy w wieżę, możemy ją zniszczyć.

133
00:09:25,190 --> 00:09:28,430
‫Jeśli wieża nas uderzy, może nas zniszczyć.

134
00:09:29,380 --> 00:09:30,700
‫Właśnie tak.

135
00:09:30,700 --> 00:09:38,110
‫Mamy warunki wygranej i przegranej dzięki widżetom HUD, które wyświetlają się na ekranie i mówią nam,

136
00:09:38,110 --> 00:09:40,330
‫czy wygraliśmy, czy przegraliśmy.

137
00:09:40,330 --> 00:09:42,610
‫Więc to jest fantastyczne.

138
00:09:42,610 --> 00:09:48,670
‫A jeśli chcesz spakować tę grę, możesz to łatwo zrobić, wchodząc na górę

139
00:09:48,670 --> 00:09:56,710
‫i klikając ikonę platform dla Windows, jeśli jesteś na komputerze z systemem Windows lub dla iOS, jeśli używasz

140
00:09:56,710 --> 00:10:00,670
‫Maca maszyny, to oczywiście masz te inne opcje.

141
00:10:00,670 --> 00:10:06,640
‫Jeśli chcesz tworzyć pakiety dla innych platform, polecam przeprowadzić rozeznanie w Internecie, aby wyszukać różne platformy i dowiedzieć

142
00:10:06,640 --> 00:10:08,980
‫się, jak dla nich tworzyć pakiety.

143
00:10:08,980 --> 00:10:14,920
‫Jestem na komputerze z systemem Windows, więc mogę po prostu kliknąć tutaj projekt pakietu dla systemu Windows, a program

144
00:10:14,920 --> 00:10:17,410
‫zapyta mnie, gdzie chciałbym spakować moją grę.

145
00:10:17,410 --> 00:10:19,780
‫Teraz mam swój projekt w Tune Tanks.

146
00:10:19,780 --> 00:10:24,670
‫Mam zamiar kliknąć prawym przyciskiem myszy, utworzyć nowy folder i po prostu wywołam tę kompilację.

147
00:10:24,670 --> 00:10:29,110
‫To jest zazwyczaj miejsce, w którym umieścisz projekt w pakiecie.

148
00:10:29,110 --> 00:10:34,720
‫Wybiorę więc ten folder i zezwolę Unreal Engine na spakowanie mojej gry.

149
00:10:34,720 --> 00:10:40,300
‫Zajmie to prawdopodobnie kilka minut, a kiedy już to zrobię, powinienem mieć grę w pakiecie.

150
00:10:41,080 --> 00:10:41,530
‫Dobra.

151
00:10:41,530 --> 00:10:48,070
‫Kiedy więc skończę pakowanie, powinniśmy zobaczyć w dzienniku wyjściowym, że kompilacja zakończyła się powodzeniem, a następnie możemy

152
00:10:48,070 --> 00:10:51,970
‫zajrzeć do folderu, który wyznaczyliśmy dla naszego spakowanego projektu.

153
00:10:51,970 --> 00:10:54,670
‫Dla mnie będzie to folder kompilacji.

154
00:10:54,700 --> 00:11:02,220
‫Teraz spakowałem cztery okna, więc mam folder Windows i oto moje czołgi tuningowe, kropka xy.

155
00:11:02,230 --> 00:11:03,490
‫To plik wykonywalny.

156
00:11:03,520 --> 00:11:08,440
‫Mogę na nią kliknąć dwukrotnie i oto mój ostateczny projekt.

157
00:11:08,440 --> 00:11:09,490
‫Mogę strzelać.

158
00:11:09,580 --> 00:11:11,260
‫Mogę zrobić unik.

159
00:11:11,990 --> 00:11:18,110
‫Wygląda na to, że wieże wroga mogą do mnie strzelać, a ja mogę je zniszczyć.

160
00:11:18,110 --> 00:11:19,550
‫Tak, mogę je zniszczyć.

161
00:11:19,550 --> 00:11:23,240
‫Wygląda na to, że mogą mnie zniszczyć, a ja mogę przegrać.

162
00:11:23,360 --> 00:11:26,990
‫I oczywiście, gdybym miał trochę więcej umiejętności, mógłbym wygrać mecz.

163
00:11:27,170 --> 00:11:33,230
‫A jako ostatnie wyzwanie, zlecę ci dodanie własnego smaku do gry.

164
00:11:33,230 --> 00:11:35,420
‫Stwórz swoją własną grę.

165
00:11:35,420 --> 00:11:42,200
‫Znajdź nowe dźwięki, efekty lub siatki i stwórz ciekawie wyglądające wieże i czołgi.

166
00:11:42,200 --> 00:11:48,410
‫Dodaj więcej wież, może dodaj różne poziomy umiejętności, spraw, aby wieże były coraz trudniejsze w miarę postępów

167
00:11:48,410 --> 00:11:49,580
‫na swoim poziomie.

168
00:11:49,580 --> 00:11:56,480
‫Może wyrównaj czołg, daj mu poziom, który możesz zwiększyć, gdy będziesz niszczyć coraz więcej wież.

169
00:11:56,480 --> 00:12:03,980
‫Może możesz dodać nową geometrię poziomu i sprawić, by czołg wspinał się po rampach i próbował niszczyć czołgi w

170
00:12:03,980 --> 00:12:05,330
‫trudno dostępnych miejscach.

171
00:12:05,360 --> 00:12:09,050
‫Możliwości są nieograniczone, ale przede wszystkim baw się dobrze.

172
00:12:09,050 --> 00:12:10,700
‫Kiedy tworzysz swoje gry.

173
00:12:10,700 --> 00:12:13,160
‫Nie zamierzasz wstrzymać filmu w tym wyzwaniu.

174
00:12:13,160 --> 00:12:19,070
‫To będzie coś, co możesz zrobić od tego momentu ze swoimi projektami gier.

175
00:12:19,070 --> 00:12:20,630
‫Więc gratulacje.

176
00:12:20,630 --> 00:12:21,980
‫Skończyliśmy naszą grę.

177
00:12:21,980 --> 00:12:23,750
‫Mam nadzieję, że podobała Ci się ta sekcja.

178
00:12:23,750 --> 00:12:25,460
‫Miałem mnóstwo zabawy.

179
00:12:25,460 --> 00:12:28,790
‫To świetny projekt gry i przebyłeś długą drogę.

180
00:12:28,790 --> 00:12:34,070
‫W tej części kursu nauczyłeś się mnóstwa umiejętności, więc mam nadzieję, że jesteś gotowy, aby

181
00:12:34,070 --> 00:12:35,930
‫przejść do bardziej ekscytujących rzeczy.

182
00:12:35,930 --> 00:12:36,890
‫Dziękuję Ci bardzo.

183
00:12:36,890 --> 00:12:39,770
‫Jestem Steven i do zobaczenia wkrótce.

