﻿1
00:00:03,980 --> 00:00:05,900
‫Witam ponownie.

2
00:00:05,930 --> 00:00:10,610
‫Teraz stworzyliśmy czołg, który może się poruszać, a nawet obracać swoją wieżą.

3
00:00:10,610 --> 00:00:16,190
‫Jesteśmy teraz gotowi do stworzenia klasy wieży, która może odziedziczyć niektóre funkcje, które

4
00:00:16,190 --> 00:00:18,830
‫czołg odziedziczył po podstawowej klasie kapsuł.

5
00:00:19,100 --> 00:00:24,560
‫Teraz, gdy stworzymy klasę wieży, zamierzamy zastąpić funkcję zaznaczenia, aby móc również

6
00:00:24,560 --> 00:00:26,000
‫obracać jej wieżą.

7
00:00:26,030 --> 00:00:32,080
‫Naszym celem jest więc obracanie wieżyczek tak, aby zawsze patrzyły na czołg.

8
00:00:32,090 --> 00:00:37,430
‫W ten sposób, kiedy zaczną strzelać pociskami, czasami trafią w czołg, o ile czołg

9
00:00:37,430 --> 00:00:39,020
‫nie odsuwa się szybko.

10
00:00:39,630 --> 00:00:43,740
‫Zamierzamy również wymyślić, w jaki sposób możemy zdobyć zbiornik --.

11
00:00:43,770 --> 00:00:49,380
‫W ten sposób możemy namierzyć czołg i obrócić wieżę wieży w kierunku czołgu.

12
00:00:49,410 --> 00:00:52,350
‫Przygotowujemy się do walki na pociski.

13
00:00:52,650 --> 00:00:58,200
‫Więc jestem tutaj w edytorze i zamierzam przejść do naszego folderu z tuningiem czołgów, gdzie znajdują się

14
00:00:58,200 --> 00:00:59,910
‫bazy -- i klasy czołgów.

15
00:01:00,270 --> 00:01:04,650
‫Teraz chciałbym stworzyć klasę wieży w oparciu o klasę bazową.

16
00:01:04,770 --> 00:01:07,850
‫Sposób, w jaki zrobiliśmy to z klasą czołgów, był taki, że mieliśmy rację.

17
00:01:07,860 --> 00:01:14,430
‫Kliknięto na bazę - i wybraliśmy utwórz klasę C++ pochodną w oparciu o alternatywny sposób jest

18
00:01:14,430 --> 00:01:18,210
‫przejście do narzędzi i wybranie nowej klasy C++.

19
00:01:18,540 --> 00:01:24,630
‫I stąd możemy kliknąć zakładkę, która zawiera wszystkie klasy i wyszukać bazę --.

20
00:01:24,750 --> 00:01:27,270
‫I tutaj widzimy naszą bazę -- klasę.

21
00:01:27,480 --> 00:01:33,050
‫Jeśli wybiorę to i kliknę dalej, teraz będę tworzył nową klasę opartą na bazie --.

22
00:01:33,060 --> 00:01:38,910
‫Zostawię to na tej samej ścieżce, co wszystkie nasze inne klasy C++ i nazwę tę wieżę.

23
00:01:39,210 --> 00:01:41,070
‫Więc kliknijmy Utwórz klasę.

24
00:01:41,610 --> 00:01:44,720
‫Oto moja nowa era wieży i kropka w wieży.

25
00:01:44,790 --> 00:01:51,360
‫CP Teraz pierwszą rzeczą, jakiej potrzebujemy, jest funkcja tiku, ponieważ wieża będzie chciała obrócić swoją wieżę, aby

26
00:01:51,360 --> 00:01:53,520
‫była skierowana w stronę --.

27
00:01:53,730 --> 00:01:56,640
‫Więc zamierzamy zastąpić tutaj funkcję tiku.

28
00:01:56,640 --> 00:02:03,930
‫Stworzę więc nową sekcję publiczną i wpiszemy wirtualny void tick, który przyjmuje zmiennoprzecinkową

29
00:02:03,930 --> 00:02:07,560
‫Delta Time, a to jest przesłonięcie.

30
00:02:07,560 --> 00:02:14,100
‫Teraz zajmiemy się bardziej szczegółowymi informacjami o wirtualnym i zastępowaniu w przyszłych filmach, ale zasadniczo

31
00:02:14,100 --> 00:02:18,600
‫bierzemy odziedziczoną funkcję ticka i tworzymy dla niej nową implementację.

32
00:02:18,600 --> 00:02:23,520
‫Weźmy więc funkcję tick i zaimplementujmy ją tutaj w Tower CP.

33
00:02:23,550 --> 00:02:29,370
‫Teraz musimy poprzedzić nazwę funkcji ticka wieżą i podwójnymi dwukropkami.

34
00:02:29,370 --> 00:02:34,950
‫I jak zawsze, dobrym pomysłem jest wywołanie super tika i musimy zdać w czasie Delta.

35
00:02:34,950 --> 00:02:40,830
‫Teraz chciałbym tutaj obrócić wieżę czołgu tak, aby zagrażała czołgowi i była gotowa

36
00:02:40,830 --> 00:02:42,390
‫do wystrzeliwania pocisków.

37
00:02:42,390 --> 00:02:45,870
‫Ale chciałbym to zrobić tylko wtedy, gdy czołg jest w zasięgu.

38
00:02:46,170 --> 00:02:52,620
‫Teraz, aby wiedzieć, czy czołg jest w zasięgu, musimy znać odległość od wieży

39
00:02:52,620 --> 00:02:53,750
‫do czołgu.

40
00:02:53,760 --> 00:02:57,510
‫Oto mały gadżet, który reprezentuje początek świata.

41
00:02:57,510 --> 00:03:01,470
‫Innymi słowy, punkt w przestrzeni, w którym X, Y i Z wynoszą zero.

42
00:03:01,470 --> 00:03:08,220
‫Teraz, kiedy mówimy o lokalizacji aktora, mówimy o wektorze od początku do tej

43
00:03:08,220 --> 00:03:08,970
‫lokalizacji.

44
00:03:08,970 --> 00:03:15,060
‫I zawsze możemy uzyskać ten wektor lokalizacji, używając lokalizacji aktora, dzięki czemu możemy uzyskać lokalizację jednej

45
00:03:15,060 --> 00:03:17,430
‫z wież i lokalizację zbiornika.

46
00:03:17,430 --> 00:03:21,930
‫A jeśli znamy te dwie lokalizacje, możemy obliczyć odległość między nimi.

47
00:03:21,930 --> 00:03:28,470
‫Moglibyśmy to zrobić za pomocą matematyki wektorowej, ale klasa wektora F ma funkcję o

48
00:03:28,470 --> 00:03:33,810
‫nazwie dist, która pobiera wektory lokalizacji i zwraca odległość między nimi.

49
00:03:33,810 --> 00:03:40,440
‫Więc tutaj, w pliku tower CP, w funkcji tick, napiszę kilka notatek, żeby wiedzieć,

50
00:03:40,440 --> 00:03:41,940
‫co mamy zrobić.

51
00:03:41,940 --> 00:03:52,890
‫Najpierw musimy znaleźć odległość do czołgu, a następnie sprawdzić, czy czołg jest w zasięgu i czy

52
00:03:52,890 --> 00:03:58,170
‫w zasięgu obróć wieżę w kierunku czołgu.

53
00:03:59,070 --> 00:04:00,960
‫Więc mamy tu kilka rzeczy do zrobienia.

54
00:04:01,140 --> 00:04:05,820
‫Teraz, aby znaleźć odległość do czołgu, musimy złapać czołg.

55
00:04:05,850 --> 00:04:08,640
‫Teraz dobrym miejscem do tego jest Begin Play.

56
00:04:08,640 --> 00:04:13,350
‫Więc oprócz funkcji tick, przejdźmy dalej i zastąpmy Begin Play.

57
00:04:13,380 --> 00:04:17,580
‫Teraz zauważ, że w Tank H rozpocznij grę w strefie chronionej.

58
00:04:17,580 --> 00:04:21,210
‫Będziemy go również chronić w wieży.

59
00:04:21,210 --> 00:04:28,380
‫Dlatego umieścimy chronioną sekcję tuż pod publiczną i wprowadzimy rozpoczęcie gry tuż pod haczykiem.

60
00:04:28,380 --> 00:04:35,580
‫Przejdźmy więc do Tower Dot, CP, zaimplementuj, zacznij grać w pełni określ nazwę funkcji i jak

61
00:04:35,580 --> 00:04:38,670
‫zapewne zgadłeś, nazywamy Super Begin Play.

62
00:04:38,790 --> 00:04:44,310
‫Teraz, aby pobrać zbiornik i zapisać go w zmiennej, potrzebujemy zmiennej typu zbiornik.

63
00:04:44,310 --> 00:04:49,200
‫Więc umieścimy to tutaj, w Towers H, w sekcji prywatnej.

64
00:04:49,200 --> 00:04:55,290
‫Teraz to będzie czołg A, to wskaźnik i możemy po prostu nazwać ten czołg.

65
00:04:55,290 --> 00:05:01,980
‫Aby uniknąć konieczności uwzględniania tutaj Tanka H, możemy oświadczyć, że widzieliśmy, jak ważne może

66
00:05:01,980 --> 00:05:03,000
‫to być.

67
00:05:03,360 --> 00:05:09,540
‫Więc teraz mamy ten wskaźnik czołgu i jeśli możemy wymyślić, jak uzyskać dostęp do czołgu, możemy go zapisać w

68
00:05:09,540 --> 00:05:11,970
‫naszym wskaźniku czołgu tutaj i rozpocząć grę.

69
00:05:12,000 --> 00:05:18,510
‫Pierwszą rzeczą, którą zamierzam zrobić, jest dodanie Tank H, dzięki czemu będziemy mogli używać tego typu.

70
00:05:18,510 --> 00:05:20,580
‫Jak więc mamy dostęp do zbiornika?

71
00:05:20,580 --> 00:05:26,220
‫Cóż, oto nierealna dokumentacja silnika przydatnej funkcji o nazwie get player pawn.

72
00:05:26,310 --> 00:05:29,100
‫Istnieje w statyce rozgrywki.

73
00:05:29,160 --> 00:05:34,680
‫Więc skoro mam to otwarte, zamierzam skopiować dołączenie do statystyk rozgrywki i przyjrzeć

74
00:05:34,680 --> 00:05:35,910
‫się składni.

75
00:05:35,910 --> 00:05:39,060
‫Posiada dwa wejścia obiektu kontekstu świata.

76
00:05:39,470 --> 00:05:42,950
‫Wiemy już, jak sobie z tym poradzić oraz indeks graczy.

77
00:05:42,950 --> 00:05:49,310
‫Jak widzieliśmy w przypadku gier dla jednego gracza, takich jak nasza, indeks gracza zawsze będzie wynosił zero,

78
00:05:49,310 --> 00:05:53,660
‫co pozwoli nam uzyskać dostęp do pionka odpowiadającego graczowi zero.

79
00:05:54,050 --> 00:05:57,650
‫Więc nazwijmy tę funkcję tutaj w Tower Dot CP.

80
00:05:57,680 --> 00:06:04,850
‫Zamierzam wkleić dla ciebie statystyki rozgrywki i na początku gry ustawię

81
00:06:04,850 --> 00:06:12,290
‫zbiornik na równą statystyce rozgrywki dla gracza – dla obiektu kontekstu świata.

82
00:06:12,290 --> 00:06:17,910
‫Mogę to przekazać, a dla indeksu gracza możemy przekazać zero.

83
00:06:17,930 --> 00:06:19,970
‫Teraz przyjrzyj się czerwonemu zawijasowi.

84
00:06:19,970 --> 00:06:26,120
‫Mówi, że wartość typu pionek nie może być przypisana do jednostki typu czołg.

85
00:06:26,150 --> 00:06:33,290
‫Jest to dokładnie ten sam problem, który napotkaliśmy, gdy próbowaliśmy wywołać, zdobyć kontroler i zapisać

86
00:06:33,320 --> 00:06:35,810
‫wynik w kontrolerze gracza A.

87
00:06:35,870 --> 00:06:42,200
‫Czołg jest dzieckiem pionka, więc nie możemy przechowywać typu rodzica we wskaźniku dziecka.

88
00:06:42,200 --> 00:06:43,370
‫Musimy.

89
00:06:44,150 --> 00:06:46,060
‫Zgadłeś, musimy rzucić.

90
00:06:46,070 --> 00:06:51,830
‫Więc weźmiemy wartość zwróconą z tego i umieścimy ją w wywołaniu funkcji rzutowania.

91
00:06:51,830 --> 00:06:56,000
‫Więc powiemy, że rzucamy i rzucamy do zbiornika.

92
00:06:56,000 --> 00:07:02,300
‫A to, co przekazujemy do obsady, to wezwanie, aby zdobyć staw gracza.

93
00:07:02,300 --> 00:07:04,850
‫Więc umieśćmy to w nawiasach.

94
00:07:04,850 --> 00:07:09,260
‫A po obsadzie będziemy mieli dostęp do czołgu.

95
00:07:09,380 --> 00:07:16,310
‫Więc teraz, gdy mamy dostęp do zbiornika, możemy znaleźć odległość do zbiornika, a odległość to pływak.

96
00:07:16,310 --> 00:07:20,240
‫Możemy więc utworzyć lokalną zmienną zmiennoprzecinkową o nazwie odległość.

97
00:07:20,600 --> 00:07:27,380
‫A to, co ustawimy na równe, jest wynikiem wywołania funkcji statycznej wektora F, dist.

98
00:07:27,410 --> 00:07:31,700
‫Teraz dist przyjmuje dwa parametry wejściowe wektora typu F.

99
00:07:31,880 --> 00:07:34,850
‫Teraz chcemy odległość między dwoma punktami w przestrzeni.

100
00:07:34,850 --> 00:07:37,010
‫Jednym z nich jest lokalizacja wieży.

101
00:07:37,010 --> 00:07:43,190
‫Jesteśmy w klasie wieży, więc możemy wywołać lokalizację aktora, a to daje nam lokalizację wieży.

102
00:07:43,190 --> 00:07:44,660
‫Ale co z czołgiem?

103
00:07:44,660 --> 00:07:50,870
‫Cóż, możemy zadzwonić do czołgu, ustalić lokalizację aktora, a teraz mamy odległość.

104
00:07:50,870 --> 00:07:56,450
‫Teraz jedynym problemem jest to, że używamy wskaźnika czołgu bez uprzedniego sprawdzenia, czy nie jest on

105
00:07:56,450 --> 00:07:57,110
‫pusty.

106
00:07:57,290 --> 00:08:05,600
‫Więc najpierw musimy powiedzieć, czy tank, a następnie możemy wziąć wywołanie tej funkcji i przeciągnąć ją tutaj, wewnątrz

107
00:08:05,600 --> 00:08:06,860
‫instrukcji if.

108
00:08:06,860 --> 00:08:13,190
‫Jeśli więc zbiornik jest prawidłowy, możemy uzyskać dostęp do jego lokalizacji za pomocą funkcji pobierz lokalizację aktora.

109
00:08:13,190 --> 00:08:14,030
‫Doskonały.

110
00:08:14,030 --> 00:08:19,130
‫Ponieważ pracujemy nad tym stwierdzeniem if, zamierzam przenieść te inne komentarze tutaj, w środku, ponieważ

111
00:08:19,130 --> 00:08:24,410
‫wiemy, że nie możemy sprawdzić, czy czołg jest w zasięgu, jeśli czołg nie jest nawet prawidłowy.

112
00:08:24,590 --> 00:08:28,790
‫Chciałbym więc rzucić wam wyzwanie, aby obrócić wieżę w kierunku czołgu.

113
00:08:28,790 --> 00:08:33,020
‫Teraz chcemy to zrobić tylko wtedy, gdy czołg jest w zasięgu, mamy odległość.

114
00:08:33,020 --> 00:08:35,240
‫Więc teraz potrzebujemy zmiennej zasięgu ognia.

115
00:08:35,240 --> 00:08:40,490
‫Więc stwórz pływak zwany zasięgiem ognia w klasie wieży i pokaż to ze swoją własnością.

116
00:08:40,490 --> 00:08:42,980
‫Chcielibyśmy mieć możliwość edytowania tego z edytora.

117
00:08:43,010 --> 00:08:45,890
‫Teraz sprawdzisz, czy czołg jest w zasięgu.

118
00:08:45,890 --> 00:08:50,630
‫Jeśli nazywa się to obracaniem wieżyczki i obracaniem wieżyczki, trzeba spojrzeć na cel.

119
00:08:50,630 --> 00:08:53,180
‫Przejedziesz obok lokalizacji zbiorników.

120
00:08:53,180 --> 00:08:56,660
‫Więc zatrzymaj wideo i zaimplementuj to zachowanie teraz.

121
00:09:00,030 --> 00:09:00,420
‫Dobra.

122
00:09:00,420 --> 00:09:02,370
‫Więc potrzebujemy zmiennej zasięgu ognia.

123
00:09:02,370 --> 00:09:05,940
‫Więc tutaj, w Wieży H, mamy prywatną sekcję.

124
00:09:05,940 --> 00:09:07,680
‫Zrobimy pływak.

125
00:09:08,340 --> 00:09:15,450
‫Zamierzam nazwać ten zasięg ognia i zainicjować go do wartości, powiedzmy, 300

126
00:09:15,450 --> 00:09:16,650
‫F.

127
00:09:16,650 --> 00:09:21,030
‫Ale poeksperymentujemy z tym, ponieważ będzie to twoja własność.

128
00:09:21,240 --> 00:09:22,860
‫Więc jesteś własnością.

129
00:09:22,860 --> 00:09:29,070
‫A ponieważ chciałbym, aby wszystkie czołgi miały ten sam zasięg ognia, zamierzam to zrobić i to

130
00:09:29,070 --> 00:09:29,910
‫tylko domyślnie.

131
00:09:29,910 --> 00:09:33,270
‫W ten sposób możemy go edytować tylko na domyślnym planie.

132
00:09:33,300 --> 00:09:38,940
‫Teraz, jeśli edytujesz gdziekolwiek, a może tylko edytujesz instancję, to jest w porządku.

133
00:09:38,940 --> 00:09:42,090
‫To tak naprawdę kwestia preferencji i możemy to później zmienić.

134
00:09:42,090 --> 00:09:46,710
‫Nadaję temu również kategorię i nazwę tę kategorię walką.

135
00:09:46,740 --> 00:09:50,820
‫Przejdźmy do Tower CP i mamy tutaj kolejny punkt.

136
00:09:50,820 --> 00:09:57,120
‫Sprawdź, czy czołg jest w zasięgu, co oznacza, że musimy sprawdzić, czy odległość jest mniejsza

137
00:09:57,120 --> 00:09:59,160
‫lub równa zasięgowi ognia.

138
00:09:59,160 --> 00:10:04,860
‫Mamy mniej niż lub równe, a nie tylko równe, ponieważ od klatki do klatki odległość może w

139
00:10:04,860 --> 00:10:11,310
‫rzeczywistości być większa niż zasięg ognia, jedna klatka i mniejsza niż zasięg ognia w następnej klatce, całkowicie przechodząc przez zasięg

140
00:10:11,310 --> 00:10:11,970
‫ognia.

141
00:10:11,970 --> 00:10:15,870
‫Tak więc w rzeczywistości może nigdy nie stać się dokładnie równym zasięgowi ognia.

142
00:10:15,870 --> 00:10:20,820
‫W rzeczywistości, przy wartościach zmiennoprzecinkowych, dwie wartości zmiennoprzecinkowe są dokładnie równe jest dość rzadkie.

143
00:10:20,820 --> 00:10:26,640
‫Więc mamy to, jeśli sprawdzamy i jeśli dotrzemy do jego wnętrza, oznacza to, że odległość jest mniejsza lub

144
00:10:26,640 --> 00:10:27,630
‫równa zasięgowi ognia.

145
00:10:27,630 --> 00:10:33,120
‫Czołg jest teraz w zasięgu, co oznacza, że ten komentarz można przenieść właśnie tam.

146
00:10:33,960 --> 00:10:41,190
‫Teraz, jeśli jesteś w zasięgu, obróć wieżę w kierunku czołgu, oznacza to, że wywołamy funkcję

147
00:10:41,190 --> 00:10:42,180
‫obracania wieży.

148
00:10:42,390 --> 00:10:45,690
‫To nasza chroniona funkcja, którą umieściliśmy w podstawowym zasobniku.

149
00:10:45,720 --> 00:10:51,060
‫Teraz obróć wieżyczkę, aby spojrzeć na cel i potrzebujemy lokalizacji czołgu.

150
00:10:51,060 --> 00:10:55,410
‫Więc to będzie lokalizacja czołgu i aktora.

151
00:10:55,410 --> 00:11:02,010
‫W związku z tym nazywamy teraz obracanie wieży tylko wtedy, gdy czołg jest w zasięgu.

152
00:11:02,010 --> 00:11:05,040
‫Więc skompilujmy to i zobaczmy, jak to działa.

153
00:11:05,340 --> 00:11:12,030
‫Wracamy więc do edytora i musimy przejść do planów, pionków, znaleźć wieżyczkę pionka

154
00:11:12,030 --> 00:11:15,120
‫BP i otworzyć pełny edytor planów.

155
00:11:15,120 --> 00:11:22,170
‫Teraz w prawym górnym rogu widzimy bazowy pionek klasy rodzicielskiej, ale chcemy, aby nasza klasa rodzicielska była wieżą,

156
00:11:22,170 --> 00:11:27,930
‫abyśmy mogli przejść do ustawień klasy, klasy rodzicielskiej i wyszukać wieżę i wybrać ją.

157
00:11:27,960 --> 00:11:31,980
‫Teraz nasza wieża pionowa jest oparta na klasie wieży.

158
00:11:31,980 --> 00:11:34,710
‫Zobaczmy teraz, co się stanie, gdy zaczniemy grać.

159
00:11:35,070 --> 00:11:37,200
‫Dobra, więc przenoszę zbiornik.

160
00:11:37,200 --> 00:11:40,560
‫Nie jesteśmy w zasięgu, więc nie widzimy żadnego ruchu z wież.

161
00:11:40,560 --> 00:11:44,100
‫Ale jeśli znajdę się w zasięgu, spójrz na to.

162
00:11:44,100 --> 00:11:47,970
‫Teraz chodzą za mną i wygląda to dość groźnie.

163
00:11:48,120 --> 00:11:52,080
‫Teraz 300 jednostek nie jest tak daleko.

164
00:11:52,080 --> 00:11:55,440
‫Więc to, co chciałbym zrobić, to edytować tę odległość.

165
00:11:55,440 --> 00:12:00,840
‫Więc stąd, w BP Pawn Turret, mam zamiar wybrać własny BP Pond Turret.

166
00:12:00,840 --> 00:12:02,850
‫A oto sekcja walki.

167
00:12:02,850 --> 00:12:06,840
‫Idę dalej i ustawię to na około 700.

168
00:12:07,890 --> 00:12:13,350
‫Teraz, jeśli nacisnę odtwarzanie, zobaczę, że nie będą się obracać, gdy będę się tu wracać.

169
00:12:13,350 --> 00:12:16,410
‫Ale jak tylko znajdę się w zasięgu, teraz patrzą na mnie.

170
00:12:18,180 --> 00:12:19,020
‫Idealny.

171
00:12:20,030 --> 00:12:23,120
‫Podsumowując, stworzyliśmy klasę tower.

172
00:12:23,120 --> 00:12:25,720
‫Mamy teraz wroga dla czołgu.

173
00:12:25,730 --> 00:12:32,060
‫Obróciliśmy również wieżę wieży w kierunku czołgu w funkcji zaznaczenia i robimy to tylko wtedy, gdy czołg znajduje

174
00:12:32,060 --> 00:12:33,770
‫się w zasięgu ognia.

175
00:12:33,770 --> 00:12:39,650
‫Ujawniliśmy również zmienną zasięgu ognia, aby można ją było dostosować na planie.

176
00:12:39,770 --> 00:12:41,600
‫Jesteśmy prawie gotowi do walki.

177
00:12:41,630 --> 00:12:44,450
‫Zaczniemy to konfigurować w nadchodzących filmach.

178
00:12:44,630 --> 00:12:45,620
‫Zobaczymy się wkrótce.

