﻿1
00:00:04,080 --> 00:00:05,730
‫Witam ponownie.

2
00:00:05,760 --> 00:00:10,380
‫Teraz jesteśmy gotowi do obracania wieżyczki i chcielibyśmy to zrobić za pomocą myszy.

3
00:00:10,380 --> 00:00:14,790
‫I to miejsce trafienia ze śladu, który zrobiliśmy w poprzednim filmie.

4
00:00:14,880 --> 00:00:22,200
‫Kiedy poruszam kursorem myszy, wieżyczka obraca się i jest skierowana w stronę kursora myszy.

5
00:00:22,320 --> 00:00:28,110
‫I nawet gdy kliknę w rzutni i zacznę grać, nadal mogę poruszać kursorem myszy,

6
00:00:28,110 --> 00:00:31,080
‫aby obrócić wieżyczkę i ustawić jej kierunek.

7
00:00:31,110 --> 00:00:35,850
‫To pozwoli mi celować, gdy będę mógł strzelać pociskami.

8
00:00:35,880 --> 00:00:36,200
‫Dobra.

9
00:00:36,240 --> 00:00:41,770
‫Aby to osiągnąć, musimy znaleźć kierunek, w którym ma wskazywać nasza wieża.

10
00:00:41,790 --> 00:00:46,410
‫A kiedy już znajdziemy ten kierunek, możemy ustawić rotację siatki wieży.

11
00:00:46,500 --> 00:00:52,470
‫Teraz, aby uzyskać kierunek, w którym powinna wskazywać wieżyczka, musimy wykonać trochę

12
00:00:52,470 --> 00:00:53,500
‫matematyki wektorowej.

13
00:00:53,520 --> 00:00:59,570
‫To, czego szukamy, to wektor od wieży czołgu do miejsca trafienia śladem.

14
00:00:59,580 --> 00:01:05,940
‫Teraz w prosty sposób możemy uzyskać lokalizację naszego czołgu lub dowolnego z jego elementów, np. lokalizację

15
00:01:05,940 --> 00:01:06,960
‫wieży czołgu.

16
00:01:06,990 --> 00:01:09,600
‫Nazwiemy to miejsce, wieżyczka, lokalizacja.

17
00:01:09,600 --> 00:01:13,440
‫Wiemy też, jak możemy ustalić położenie głowicy śledzącej.

18
00:01:13,470 --> 00:01:15,800
‫Nazwiemy to miejsce trafienia śladu.

19
00:01:15,810 --> 00:01:20,760
‫Interesuje nas wektor od lokalizacji wieży do lokalizacji trafienia.

20
00:01:20,760 --> 00:01:23,100
‫Nazwiemy ten wektor do celu.

21
00:01:23,130 --> 00:01:27,030
‫Teraz matematyka wektorowa, aby dotrzeć do celu, jest całkiem prosta.

22
00:01:27,060 --> 00:01:33,120
‫Aby uzyskać wektor od punktu początkowego do punktu końcowego, zawsze należy odjąć punkt końcowy od punktu początkowego.

23
00:01:33,420 --> 00:01:39,270
‫Więc jeśli weźmiemy nasz ślad, uderzymy w lokalizację i odejmiemy położenie wektora wieży, to wektor, który

24
00:01:39,270 --> 00:01:41,620
‫z tego wynika, ma być celem.

25
00:01:41,640 --> 00:01:47,160
‫Teraz, gdy mamy wektor dwóch kierunków docelowych, chcemy go przekonwertować na obrót, abyśmy

26
00:01:47,160 --> 00:01:49,530
‫mogli ustawić obrót wieży czołgu.

27
00:01:49,530 --> 00:01:53,750
‫A typ wektorowy ma wbudowaną funkcję zwaną rotacją.

28
00:01:53,760 --> 00:02:01,230
‫Więc jeśli weźmiemy nasz wektor docelowy i nazwiemy go rotacją, to zwróci rotator F odpowiadający

29
00:02:01,230 --> 00:02:02,260
‫temu kierunkowi.

30
00:02:02,280 --> 00:02:04,430
‫Teraz musimy mieć coś na uwadze.

31
00:02:04,440 --> 00:02:11,160
‫Wynik trafienia śladem często będzie znajdował się na podłodze, a wektor od wieży czołgu do wyniku

32
00:02:11,160 --> 00:02:14,620
‫trafienia śladem nie będzie równoległy do ziemi.

33
00:02:14,640 --> 00:02:20,850
‫Oznacza to, że jeśli ustawimy obrót wieży czołgu na rotator, który otrzymujemy z tego wektora kierunku, możemy

34
00:02:20,850 --> 00:02:26,790
‫otrzymać coś takiego, gdy wieża jest pochylona w dół w kierunku ziemi, ale nie chcemy, aby

35
00:02:26,790 --> 00:02:29,310
‫wieża czołgów obracała się w dół.

36
00:02:29,310 --> 00:02:31,350
‫Chcemy, aby nadal wskazywał na przyszłość.

37
00:02:31,350 --> 00:02:33,780
‫To jest wynik, którego chcemy.

38
00:02:33,810 --> 00:02:39,180
‫Innymi słowy, chcemy tylko zmienić tak składnik obrotu wieży czołgu.

39
00:02:39,180 --> 00:02:44,550
‫W ten sposób jest skierowany we właściwym kierunku, ale nadal pozostaje równoległy do podłoża.

40
00:02:44,550 --> 00:02:51,060
‫Zmieniliśmy tylko jego zbaczanie, więc wróćmy do kodu VS i stwórzmy funkcję obracania wieżyczką

41
00:02:51,060 --> 00:02:51,600
‫czołgu.

42
00:02:51,630 --> 00:02:57,210
‫Teraz zamierzamy obracać wieżę na czołgu, ale chcielibyśmy również obrócić wieżę na naszym

43
00:02:57,210 --> 00:03:04,290
‫przeciwniku z wieży, a wieża zostanie wkrótce utworzona na podstawie podstawy, co oznacza, że stworzymy obrotową

44
00:03:04,290 --> 00:03:08,820
‫wieżę funkcję możemy umieścić tutaj w podstawowej klasie ponga.

45
00:03:08,820 --> 00:03:12,930
‫W ten sposób zarówno zbiornik, jak i wieża odziedziczą tę funkcję.

46
00:03:12,930 --> 00:03:18,480
‫Ponieważ planujemy używać go zarówno w wieży, jak i w zbiorniku, możemy zabezpieczyć tę funkcję.

47
00:03:18,720 --> 00:03:24,630
‫Dodam więc sekcję chronioną, a wszelkie funkcje i zmienne, które umieścimy w sekcji chronionej, będą

48
00:03:24,630 --> 00:03:29,220
‫dostępne w tych klasach potomnych, ale nie w żadnych innych klasach.

49
00:03:29,220 --> 00:03:32,580
‫Jest więc prawie tak ograniczony, jak zmienne prywatne.

50
00:03:32,580 --> 00:03:34,860
‫Teraz ta funkcja może zwrócić void.

51
00:03:34,860 --> 00:03:37,710
‫Nazwę tę wieżę obrotową.

52
00:03:38,850 --> 00:03:44,690
‫A żeby obrócić wieżę, będę potrzebował jakiegoś celu, na który będę mógł patrzeć.

53
00:03:44,700 --> 00:03:49,620
‫Może to być wektor f i możemy to nazwać spojrzeniem na cel.

54
00:03:49,620 --> 00:03:56,490
‫Więc pomysł jest taki, że jeśli mamy funkcję, którą możemy przekazać w jakimś miejscu na świecie, to

55
00:03:56,490 --> 00:04:00,360
‫funkcja powinna skutkować obróceniem wieży w kierunku tej lokalizacji.

56
00:04:00,360 --> 00:04:04,680
‫Przejdźmy więc dalej i podajmy definicję funkcji dla obracania wieżyczki.

57
00:04:04,680 --> 00:04:11,280
‫Więc tutaj, w pionku bazowym CP, tuż pod konstruktorem, zamierzam zaimplementować obrotową wieżyczkę.

58
00:04:11,280 --> 00:04:16,680
‫I oczywiście potrzebuję tutaj nazwy klasy pionka bazowego z operatorem rozpoznawania zasięgu.

59
00:04:16,680 --> 00:04:21,180
‫Więc teraz, kiedy mam już obracaną wieżę, zastanówmy się, jak zamierzamy to zaimplementować.

60
00:04:21,180 --> 00:04:28,320
‫Pierwszą rzeczą, której potrzebujemy, jest skierowanie wektora na wektor z komponentu wieży do wyniku trafienia śladu

61
00:04:28,320 --> 00:04:30,120
‫pod kursorem myszy.

62
00:04:30,120 --> 00:04:38,070
‫Więc może to być lokalny wektor F wywołany do celu i ustawimy go na wynik jakiejś matematyki

63
00:04:38,070 --> 00:04:38,970
‫wektorowej.

64
00:04:38,970 --> 00:04:43,350
‫Pamiętaj, że będzie to miejsce docelowe minus punkt początkowy.

65
00:04:43,350 --> 00:04:50,910
‫A celem jest spojrzenie na cel, a punktem startowym będzie położenie wieży czołgu,

66
00:04:50,910 --> 00:04:54,030
‫innymi słowy położenie siatki wieży.

67
00:04:54,030 --> 00:04:59,880
‫Możemy więc powiedzieć, że siatka wieżyczki i możemy uzyskać lokalizację siatki wieży.

68
00:04:59,880 --> 00:05:07,290
‫Teraz sposobem na uzyskanie światowej lokalizacji komponentu jest ta funkcja, aby uzyskać lokalizację komponentu.

69
00:05:07,290 --> 00:05:09,630
‫Należy do klasy komponentu use scene.

70
00:05:09,630 --> 00:05:11,460
‫Tak więc mają to wszystkie komponenty sceny.

71
00:05:11,460 --> 00:05:15,690
‫Więc z siatki wieżyczki nazwiemy lokalizację komponentu.

72
00:05:16,340 --> 00:05:23,600
‫Zatem spojrzenie na cel minus położenie siatki wieży daje nam wektor od siatki wieży do celu

73
00:05:23,600 --> 00:05:24,290
‫obserwacji.

74
00:05:24,320 --> 00:05:30,590
‫Teraz, jak wspomniałem, możemy uzyskać rotator EF od do celu za pomocą funkcji rotacji wektorów F.

75
00:05:30,590 --> 00:05:37,100
‫Więc zrobimy rotator F i możemy nazwać to spojrzeniem na obrót i ustawimy to

76
00:05:37,100 --> 00:05:40,100
‫jako równe docelowej rotacji kropki.

77
00:05:40,280 --> 00:05:41,570
‫To jest wywołanie funkcji.

78
00:05:41,570 --> 00:05:46,700
‫Więc teraz mamy rotator odpowiadający temu wektorowi kierunku celu.

79
00:05:46,700 --> 00:05:49,550
‫Ale chodzi o to, że zależy nam tylko na YA.

80
00:05:49,550 --> 00:05:51,680
‫Nie chcemy zmieniać tonacji ani roli.

81
00:05:51,680 --> 00:05:57,290
‫Chcemy tylko obrócić wieżę wokół osi Z i utrzymać ją równolegle do podłoża.

82
00:05:57,290 --> 00:05:59,420
‫Teraz możemy to zrobić na wiele sposobów.

83
00:05:59,420 --> 00:06:05,870
‫Po pierwsze, możemy przyjrzeć się rotacji, skokowi i wyzerowaniu tego.

84
00:06:05,870 --> 00:06:08,180
‫Innymi słowy, ustaw ją na zero.

85
00:06:08,210 --> 00:06:14,240
‫Możemy również przyjrzeć się roli rotacji kropki i ją również wyzerować.

86
00:06:14,240 --> 00:06:21,020
‫Teraz, gdy ustawiliśmy skok i przechylenie na zero, mamy żądany obrót, który jest tylko składową.

87
00:06:21,020 --> 00:06:22,460
‫To jeden ze sposobów na zrobienie tego.

88
00:06:22,460 --> 00:06:26,450
‫Innym byłoby użycie jednego z przeciążeń konstruktora F rotatora.

89
00:06:26,450 --> 00:06:34,820
‫Gdybyśmy powiedzieli f rotator z nawiasami i przekazali pewne wartości, takie jak punkt zerowy F dla pierwszego, a wyskakujące okienko

90
00:06:34,820 --> 00:06:38,300
‫mówi mi, że pierwszym wejściem jest wysokość dźwięku.

91
00:06:38,300 --> 00:06:43,880
‫A potem dla ciebie możemy użyć do celowania w rotację.

92
00:06:44,330 --> 00:06:44,990
‫Tak.

93
00:06:44,990 --> 00:06:47,960
‫A potem dla roli moglibyśmy użyć zero kropki F.

94
00:06:47,960 --> 00:06:55,820
‫Teraz tworzy nowy rotator F z zerem dla skoku, zerem dla roli i składową

95
00:06:55,820 --> 00:06:59,420
‫rotatora zwróconą przez dwa obroty docelowe.

96
00:06:59,420 --> 00:07:05,300
‫Tak więc wartość zwrócona przez to dałaby taki sam wynik, jak to, co zrobiliśmy tutaj z tymi trzema liniami.

97
00:07:05,300 --> 00:07:11,990
‫Więc ponieważ jest to trochę bardziej zwarte i eleganckie, myślę, że wolałbym tego użyć,

98
00:07:11,990 --> 00:07:19,370
‫abyśmy mogli zainicjować wektor rotacji z rotatorem F zwróconym przez wywołanie konstruktora rotatora F w ten sposób.

99
00:07:19,370 --> 00:07:21,380
‫Więc usunę tę linię tutaj.

100
00:07:21,380 --> 00:07:23,360
‫A teraz przyjrzyjmy się rotacji.

101
00:07:23,360 --> 00:07:29,000
‫Teraz ostatnią rzeczą do zrobienia w tej funkcji jest ustawienie rotacji zacieru wieży.

102
00:07:29,000 --> 00:07:36,440
‫Teraz możemy ustawić rotację dla danego komponentu za pomocą tej funkcji ponownie ustaw rotację świata, należy

103
00:07:36,440 --> 00:07:38,270
‫użyć komponentu sceny.

104
00:07:38,270 --> 00:07:44,300
‫Powodem, dla którego używamy ustawionej rotacji słów zamiast dodawania jakiegoś lokalnego przesunięcia rotacji, jest

105
00:07:44,300 --> 00:07:50,420
‫to, że mamy rotację w przestrzeni świata dwa celem jest wektor kierunku w przestrzeni świata.

106
00:07:50,420 --> 00:07:56,000
‫Bierzemy położenie siatki wieży w przestrzeni świata i odejmujemy lokalizację docelową w przestrzeni

107
00:07:56,000 --> 00:07:56,750
‫świata.

108
00:07:56,750 --> 00:07:58,850
‫Więc to jest światowy kierunek kosmiczny.

109
00:07:58,850 --> 00:08:02,450
‫Dlatego spojrzenie na rotację jest rotacją przestrzeni świata.

110
00:08:02,450 --> 00:08:06,140
‫Więc użyjemy ustawionej rotacji świata na siatce wieży.

111
00:08:06,290 --> 00:08:13,280
‫Powiemy więc siatka wieży, ustaw rotację świata i przejdziemy do spojrzenia na rotację.

112
00:08:13,280 --> 00:08:19,550
‫Więc teraz mamy funkcję, która może wziąć dowolny cel na świecie i obrócić siatkę wieży, aby na

113
00:08:19,550 --> 00:08:22,550
‫nią spojrzeć, ale nie obróci siatki w dół.

114
00:08:22,550 --> 00:08:28,100
‫Zmieni tylko zbaczanie, więc będzie się obracał w taki sposób, w jaki powinna obracać się wieża czołgu.

115
00:08:28,100 --> 00:08:31,100
‫Mamy więc teraz funkcję obracania wieży.

116
00:08:31,130 --> 00:08:36,980
‫Mam zamiar wywołać tę funkcję, aby ustawić obrót wieży, wywołać funkcję obracania wieży

117
00:08:36,980 --> 00:08:38,870
‫w klasie czołgów.

118
00:08:38,870 --> 00:08:40,730
‫Jest to funkcja chroniona.

119
00:08:40,730 --> 00:08:43,070
‫Więc klasa czołgu ma do niego dostęp.

120
00:08:43,070 --> 00:08:49,220
‫Teraz obrócenie wieży przyjmuje wektor F, spójrz na cel, użyjesz tego punktu uderzenia w wyniku trafienia

121
00:08:49,220 --> 00:08:51,410
‫F z naszego śledzenia linii.

122
00:08:51,410 --> 00:08:57,170
‫Więc zostawię tobie znalezienie odpowiedniego miejsca w kodzie do wywołania tej funkcji.

123
00:08:57,410 --> 00:09:00,920
‫Zatrzymaj więc wideo i umieść funkcję obracania wieżyczki.

124
00:09:00,920 --> 00:09:02,870
‫Wezwij klasę czołgów.

125
00:09:06,000 --> 00:09:06,150
‫Dobra.

126
00:09:06,300 --> 00:09:09,960
‫Mamy więc funkcję obracania wieżyczki i możemy ją wywołać.

127
00:09:10,140 --> 00:09:18,200
‫Zamierzam przejść do tankowania i oto moja funkcja zaznaczenia w polu sprawdzania, czy dla kontrolera gracza ref.

128
00:09:18,210 --> 00:09:24,870
‫Mam wynik trafienia i po wywołaniu wyniku trafienia pod kursorem wynik trafienia będzie zawierał

129
00:09:24,870 --> 00:09:25,860
‫prawidłowe dane.

130
00:09:25,860 --> 00:09:30,480
‫W rzeczywistości używamy tego punktu wpływu wyniku trafienia i rysujemy sferę debugowania.

131
00:09:30,510 --> 00:09:35,370
‫Teraz, ponieważ nie muszę już rysować sfery debugowania, zamierzam ją usunąć.

132
00:09:35,370 --> 00:09:39,900
‫Zamiast tego zamierzam wywołać naszą chronioną funkcję obracania wieżyczki.

133
00:09:39,900 --> 00:09:45,750
‫A dla spojrzenia na cel, podam punkt uderzenia w punkt trafienia.

134
00:09:47,140 --> 00:09:53,320
‫Więc teraz w każdej klatce będziemy obracać wieżę w kierunku tego punktu uderzenia z naszego wyniku trafienia.

135
00:09:53,350 --> 00:09:59,050
‫Teraz, zanim to skompiluję, nie używam już pomocników debugowania rysowania, więc zamierzam usunąć ten

136
00:09:59,050 --> 00:10:00,130
‫plik nagłówkowy.

137
00:10:00,340 --> 00:10:00,820
‫Dobra.

138
00:10:00,850 --> 00:10:02,590
‫Teraz jestem gotowy do kompilacji.

139
00:10:02,970 --> 00:10:03,360
‫Dobra.

140
00:10:03,370 --> 00:10:05,050
‫Wróciłem do edytora.

141
00:10:05,080 --> 00:10:09,440
‫Chodźmy dalej, wciśnijmy play i sprawdźmy.

142
00:10:09,460 --> 00:10:11,460
‫To jest niesamowite.

143
00:10:11,470 --> 00:10:12,910
‫Nadal mogę się kręcić.

144
00:10:12,910 --> 00:10:18,910
‫Mogę poruszać myszą, a wieżyczka obraca się tam, gdzie poruszam kursorem myszy.

145
00:10:18,910 --> 00:10:20,350
‫Więc to jest niesamowite.

146
00:10:20,600 --> 00:10:25,750
‫Ok, więc zanim to zakończymy, chciałbym poruszyć kilka kwestii.

147
00:10:25,750 --> 00:10:28,900
‫Chcę, żeby to było ładne, dopracowane i świetnie wyglądało.

148
00:10:28,930 --> 00:10:35,680
‫Teraz pierwszy problem pojawia się, gdy przesuwam kursor myszy blisko środka zbiornika, a następnie przechodzę

149
00:10:35,680 --> 00:10:36,890
‫przez niego.

150
00:10:36,910 --> 00:10:42,670
‫Zobaczysz, że w pewnym momencie ten obrót załamuje się bardzo szybko.

151
00:10:42,670 --> 00:10:48,250
‫A jeśli poruszamy myszą w sposób przypadkowy, cóż, nie wygląda to zbyt dobrze.

152
00:10:48,250 --> 00:10:49,480
‫To pęka.

153
00:10:49,480 --> 00:10:50,890
‫Nie mamy płynnego ruchu.

154
00:10:50,890 --> 00:10:52,270
‫Więc to jest jeden problem.

155
00:10:52,300 --> 00:10:59,890
‫Teraz inny problem polega na tym, że jeśli kliknę, przeturlam się i podejdę do krawędzi, zobaczę, że moja wieża przeskakuje

156
00:10:59,890 --> 00:11:03,750
‫w innym kierunku, gdy przesunę kursor myszy w górę.

157
00:11:03,760 --> 00:11:05,730
‫Więc co się tam dzieje?

158
00:11:05,740 --> 00:11:06,910
‫Cóż, dowiedzmy się.

159
00:11:06,910 --> 00:11:10,240
‫Wrócimy do programu VS Code i chciałbym odzyskać moją sferę debugowania.

160
00:11:10,240 --> 00:11:16,240
‫Wracając do Tanka, przejdę do funkcji tiku tuż przed obróceniem wieżyczki i

161
00:11:16,240 --> 00:11:19,240
‫jeszcze raz wywołam sferę debugowania rysowania.

162
00:11:19,450 --> 00:11:26,380
‫Teraz dla świata, w którym przechodzę, pobierz świat dla centrum, w którym przechodzę. Wynik trafienia Punkt

163
00:11:26,380 --> 00:11:35,350
‫uderzenia kropki dla promienia Użyję 25 punktów Segmenty F mogą być 12, kolor może być F kolor czerwony Trwałe linie mogą

164
00:11:35,350 --> 00:11:38,440
‫być fałszywe a życie może być negatywne.

165
00:11:38,440 --> 00:11:40,480
‫Więc to samo, co robiliśmy wcześniej.

166
00:11:40,690 --> 00:11:42,280
‫Więc zamierzam zachować to ogłoszenie.

167
00:11:42,280 --> 00:11:48,700
‫Nie dodaję tam pliku nagłówkowego, a to dlatego, że pomocniki debugowania są domyślnie dołączone, więc

168
00:11:48,700 --> 00:11:50,830
‫technicznie nie potrzebujemy ich.

169
00:11:50,830 --> 00:11:56,740
‫Zamierzam po prostu zapisać, wskoczyć z powrotem w edytorze, zrobić inaugurację kodowania na żywo i nacisnąć przycisk odtwarzania.

170
00:11:56,740 --> 00:11:58,600
‫Więc teraz mam swoją sferę debugowania.

171
00:11:58,600 --> 00:12:05,320
‫Przejdźmy więc na skraj świata i przesunę kursor myszy do miejsca, w którym

172
00:12:05,320 --> 00:12:07,240
‫spada w otchłań.

173
00:12:07,240 --> 00:12:10,330
‫I tu właśnie mamy problem.

174
00:12:10,330 --> 00:12:15,940
‫Widzisz, nie mamy wyniku trafienia pod kursorem, gdy nasz kursor przesuwa się tam, ponieważ nie ma tam

175
00:12:15,940 --> 00:12:18,730
‫nic, z czego moglibyśmy uzyskać wynik trafienia.

176
00:12:18,730 --> 00:12:22,120
‫Dlatego nasz punkt wpływu nie jest zdefiniowany.

177
00:12:22,120 --> 00:12:25,570
‫Więc to, czego potrzebujemy, to coś, co ma trafić w tę linię.

178
00:12:25,600 --> 00:12:28,810
‫Teraz Unreal Engine ma wiele narzędzi, z których możemy korzystać.

179
00:12:28,810 --> 00:12:35,170
‫To, co zamierzam zrobić, to kliknąć menu rozwijane tutaj i otworzyć panel aktora mojego miejsca i wybrać tę

180
00:12:35,170 --> 00:12:38,380
‫ikonę, która mówi woluminy i uzyskać blokującą głośność.

181
00:12:38,380 --> 00:12:39,820
‫Oto blokowanie głośności.

182
00:12:39,820 --> 00:12:41,710
‫Zamierzam wciągnąć jednego do środka.

183
00:12:41,740 --> 00:12:44,020
‫Więc teraz mam ten blokujący wolumin.

184
00:12:44,110 --> 00:12:48,190
‫Teraz domyślnie blokujące woluminy mają być niewidoczne.

185
00:12:48,190 --> 00:12:54,130
‫Jeśli przejdę do panelu szczegółów i przewinę w dół do kolizji, widzę, że

186
00:12:54,130 --> 00:13:00,940
‫są to ustawienia kolizji to niewidzialna ściana, co wydaje się sugerować, że powinno blokować prawie wszystko.

187
00:13:00,940 --> 00:13:06,610
‫Jedyną rzeczą, której nie blokuje, jest kanał widoczności, a nasz ślad linii jest

188
00:13:06,610 --> 00:13:08,680
‫zgodny z kanałem widoczności.

189
00:13:08,680 --> 00:13:13,630
‫Wszystko w naszym świecie, co blokuje kanał widoczności, zostanie uderzone przez nasz ślad linii.

190
00:13:13,630 --> 00:13:16,540
‫Ale ten konkretny tom nie będzie.

191
00:13:16,540 --> 00:13:17,860
‫Powinno być niewidoczne.

192
00:13:17,860 --> 00:13:22,690
‫Cóż, możemy przejść do ustawień kolizji, otworzyć menu rozwijane i wybrać niestandardowe.

193
00:13:22,720 --> 00:13:28,300
‫To pozwoli nam to zmienić i ustawić reakcję kolizji na kanał widoczności.

194
00:13:28,300 --> 00:13:29,170
‫To blok.

195
00:13:29,170 --> 00:13:34,960
‫Więc teraz mam niewidzialny wolumin, ale jest ustawiony tak, aby blokować kanał widoczności, co oznacza, że

196
00:13:34,960 --> 00:13:40,180
‫ślady linii, które podążają za kanałem widoczności, takim jak nasz, trafią w niego.

197
00:13:40,180 --> 00:13:45,580
‫Mogę więc wziąć tę blokującą objętość i zwiększyć ją.

198
00:13:45,580 --> 00:13:47,800
‫Ustawię go tuż za ścianą.

199
00:13:47,800 --> 00:13:53,440
‫Właściwie mogę umieścić go dokładnie tutaj, na granicy ściany, i obniżę go trochę tak, aby

200
00:13:53,440 --> 00:13:55,900
‫w pewnym sensie nachodził na ścianę.

201
00:13:55,900 --> 00:14:01,930
‫I w ten sposób mamy tutaj tę niewidzialną barierę i zamierzam iść dalej i zwiększyć ją

202
00:14:01,930 --> 00:14:03,550
‫również w kierunku Y.

203
00:14:03,550 --> 00:14:09,880
‫Więc ustawię to ładne i duże i umieszczę go tutaj pośrodku i trochę go wyściełam.

204
00:14:09,880 --> 00:14:14,050
‫I zamierzam również przeskalować to w kierunku Z.

205
00:14:14,050 --> 00:14:18,460
‫Więc teraz jest ładny i duży, a nasz ślad linii powinien go trafić.

206
00:14:18,460 --> 00:14:20,080
‫Przetestujmy więc tę teorię.

207
00:14:20,110 --> 00:14:23,170
‫Kliknijmy w rzutni i podejdźmy do ściany.

208
00:14:23,170 --> 00:14:30,250
‫I rzeczywiście, uderzam w ten blokujący wolumin za pomocą śledzenia linii i nie mam problemu, w którym

209
00:14:30,250 --> 00:14:34,240
‫moja wieża zatrzaskuje się, aby spojrzeć w nieokreśloną lokalizację.

210
00:14:34,240 --> 00:14:40,810
‫Prawdopodobnie patrzy w kierunku pochodzenia świata, ponieważ ten wektor punktów uderzenia ma same zera.

211
00:14:40,810 --> 00:14:43,660
‫Teraz, jeśli podejdę do tej ściany, mam ten sam problem.

212
00:14:43,660 --> 00:14:46,270
‫Potrzebujemy więc tych blokujących woluminów.

213
00:14:46,600 --> 00:14:48,950
‫Na całym obwodzie naszego poziomu.

214
00:14:48,970 --> 00:14:50,590
‫To może być całkiem proste.

215
00:14:50,590 --> 00:14:54,820
‫Wszystko, co muszę zrobić, to zduplikować ten blokujący wolumin.

216
00:14:54,820 --> 00:14:59,290
‫Teraz mogę zmienić widok perspektywiczny na górny widok ortogonalny.

217
00:14:59,290 --> 00:15:06,070
‫Więc zamierzam wybrać górę i przewijać kółkiem myszy, po prostu przytrzymaj alt i zduplikuję tę ścianę

218
00:15:06,070 --> 00:15:11,620
‫i umieszczę ją tutaj, a mogę nacisnąć E, aby przejść do trybu obracania.

219
00:15:11,620 --> 00:15:14,740
‫Więc przytrzymam alt i obrócę się o 90 stopni.

220
00:15:14,740 --> 00:15:21,010
‫To da mi kopię, a następnie nacisnę dwukrotnie u i uruchomię tryb tłumaczenia, przeniosę go

221
00:15:21,010 --> 00:15:26,920
‫tutaj na tę stronę, przytrzymam Alt i przeciągnę kopię w dół na tę stronę.

222
00:15:26,920 --> 00:15:28,720
‫Więc teraz mamy cztery ściany.

223
00:15:28,720 --> 00:15:34,990
‫Teraz mogę przejść z widoku z góry z powrotem do perspektywy i nacisnąć przycisk odtwarzania, a teraz mogę podejść do

224
00:15:34,990 --> 00:15:40,240
‫dowolnej z tych ścian i nie ma znaczenia, którą ścianę jestem przykryty, więc wygląda to świetnie.

225
00:15:40,240 --> 00:15:42,340
‫Więc to rozwiązuje jeden z naszych problemów.

226
00:15:42,340 --> 00:15:43,720
‫Ale co z tym drugim?

227
00:15:43,720 --> 00:15:49,360
‫Jeśli przesuniemy mysz blisko naszego czołgu, nadal mamy to sporadyczne zachowanie.

228
00:15:49,360 --> 00:15:51,880
‫Dlatego też chciałbym się tym zająć.

229
00:15:51,880 --> 00:15:56,770
‫Teraz mogę się tym zająć, interpolując ten obrót.

230
00:15:56,770 --> 00:16:02,650
‫Więc zamiast ustawiać tę wartość rotacji bezpośrednio, możemy użyć funkcji interpolacji,

231
00:16:02,650 --> 00:16:08,740
‫która zasadniczo przesunie ten obrót w kierunku celu, który podajemy w płynny sposób.

232
00:16:08,740 --> 00:16:10,270
‫Zobaczmy więc, jak to działa.

233
00:16:10,270 --> 00:16:15,970
‫Teraz chciałbym, aby ta interpolacja była w naszej funkcji obracania wieżyczki, abyśmy mogli wrócić

234
00:16:15,970 --> 00:16:22,750
‫do pionka podstawowego w dół, aby obrócić wieżyczkę, i zamiast ustawiać rotację naszego świata, aby wieża patrzyła

235
00:16:22,750 --> 00:16:28,240
‫na obrót, możemy ustawić ją na równą wartość zwracana przez funkcję interpolacji.

236
00:16:28,240 --> 00:16:34,720
‫Więc zamierzam usunąć, spójrz na rotację i zamiast tego wywołamy funkcję w bibliotece

237
00:16:34,720 --> 00:16:38,590
‫matematycznej F o nazwie R między dwoma.

238
00:16:39,100 --> 00:16:44,530
‫Teraz nasz w dwóch jest przeznaczony do obsługi interpolacji dla rotatorów.

239
00:16:44,530 --> 00:16:49,720
‫Teraz jego pierwszym parametrem wejściowym jest stała wartość odniesienia rotatora F o nazwie current.

240
00:16:49,720 --> 00:16:53,650
‫To jest aktualna wartość rzeczy, którą próbujemy zmienić.

241
00:16:53,650 --> 00:16:59,560
‫To, co próbujemy zmienić, to rotacja naszych wież i możemy to uzyskać z naszej siatki wieży.

242
00:16:59,560 --> 00:17:05,920
‫Powiemy więc, że siatka wieżyczki i funkcja, której chcemy użyć, to uzyskanie obrotu komponentu.

243
00:17:05,920 --> 00:17:10,420
‫Więc to jest jak pobranie lokalizacji komponentu, tylko że otrzymujemy rotację.

244
00:17:10,420 --> 00:17:14,200
‫Teraz następnym wejściem jest rotator F o nazwie Target.

245
00:17:14,200 --> 00:17:15,310
‫To jest wartość.

246
00:17:15,310 --> 00:17:21,430
‫Chcemy, aby ten obrót siatki wieży był interpretowany tak, aby zbliżał się płynnie.

247
00:17:21,430 --> 00:17:23,890
‫To będzie nasze spojrzenie na rotację.

248
00:17:23,890 --> 00:17:26,620
‫Więc powiem, spójrz na rotację.

249
00:17:26,620 --> 00:17:28,630
‫Następnym wejściem jest czas Delta.

250
00:17:28,630 --> 00:17:30,640
‫Więc wiemy, jak ważny jest czas Delta.

251
00:17:30,640 --> 00:17:37,030
‫Jeśli poruszamy lub obracamy, chcemy, aby ten ruch był niezależny od liczby klatek na sekundę.

252
00:17:37,030 --> 00:17:39,700
‫W tym celu możemy uzyskać czas Delta.

253
00:17:39,700 --> 00:17:46,210
‫Mogę po prostu dołączyć statystyki rozgrywki, a jeśli masz dobrą pamięć, pamiętasz, że zawiera

254
00:17:46,210 --> 00:17:49,150
‫ona statystyki rozgrywki kismet slash.

255
00:17:49,150 --> 00:17:57,700
‫Dostaję tutaj statystyki rozgrywki, abym mógł uzyskać dostęp do funkcji statycznej, uzyskać delta sekund świata i pamiętać,

256
00:17:57,700 --> 00:18:01,150
‫że wymaga to obiektu kontekstu świata.

257
00:18:01,150 --> 00:18:04,030
‫Więc zamierzam to przełożyć na tamto.

258
00:18:04,030 --> 00:18:06,340
‫I na koniec potrzebujemy wewnętrznej prędkości.

259
00:18:06,340 --> 00:18:12,280
‫Im wyższa wartość prędkości wewnętrznej, tym szybciej będziemy interpolować w kierunku celu.

260
00:18:12,280 --> 00:18:18,550
‫Więc jeśli ustawię to na, powiedzmy, pięć F, to będziemy interpolować dość wolno.

261
00:18:18,580 --> 00:18:20,470
‫Zobaczmy teraz, jak to wygląda.

262
00:18:20,470 --> 00:18:25,030
‫Wszystko to w jednym wierszu i znika z ekranu.

263
00:18:25,030 --> 00:18:32,440
‫Więc zamierzam umieścić dane wejściowe, aby ustawić obrót świata w osobnym wierszu, w ten sposób.

264
00:18:32,440 --> 00:18:34,060
‫Więc tak po prostu.

265
00:18:34,060 --> 00:18:39,820
‫A potem nasz interpreter, który ma te cztery parametry wejściowe również z ekranu.

266
00:18:39,820 --> 00:18:43,270
‫Więc zamierzam ustawić je na własnych liniach.

267
00:18:43,270 --> 00:18:49,420
‫W ten sposób możemy zobaczyć wszystkie dane wejściowe bez konieczności przewijania ekranu w ten sposób.

268
00:18:49,420 --> 00:18:49,840
‫W porządku.

269
00:18:49,840 --> 00:18:54,220
‫Zamierzam to zapisać i rozpocząć kodowanie na żywo.

270
00:18:54,220 --> 00:19:01,480
‫A teraz, jeśli nacisnę play i poruszę myszą, zauważ, że obrót zajmuje trochę czasu.

271
00:19:01,480 --> 00:19:06,430
‫To dlatego, że płynnie interpolujemy w kierunku tej docelowej rotacji.

272
00:19:06,430 --> 00:19:07,780
‫To świetnie.

273
00:19:07,780 --> 00:19:09,340
‫Dokładnie tego chciałem.

274
00:19:09,340 --> 00:19:14,950
‫Bez względu na to, jak poruszam myszą, nigdy nie dostanę tego gwałtownego, szarpanego, sporadycznego ruchu.

275
00:19:15,040 --> 00:19:20,170
‫Teraz pięć to strasznie niska prędkość Internetu, ale możemy to zmienić.

276
00:19:20,170 --> 00:19:21,820
‫Możemy to trochę przyspieszyć.

277
00:19:21,820 --> 00:19:28,420
‫Ustawię to na 25, zobacz, jak to wygląda, i pozwolę ci zdecydować, jaką wartość lubisz

278
00:19:28,420 --> 00:19:30,040
‫w swojej grze.

279
00:19:30,040 --> 00:19:34,450
‫Więc jeszcze raz, rozpoczynając kodowanie na żywo i naciskając play.

280
00:19:34,510 --> 00:19:39,010
‫Teraz mam dość szybką interpolację, ale nie pstryka.

281
00:19:39,010 --> 00:19:42,910
‫Wciąż jest szybki, ale nie jest to błyskawiczne pstryknięcie.

282
00:19:42,910 --> 00:19:46,360
‫Więc dopóki nie robimy czegoś takiego, cóż, nie zrozumiemy tego.

283
00:19:46,540 --> 00:19:47,860
‫Szalone zachowanie.

284
00:19:47,860 --> 00:19:53,500
‫I oczywiście, jeśli chcesz wolniejszej rotacji, wiesz jak to zrobić teraz i skończyliśmy z rysowaniem sfery

285
00:19:53,500 --> 00:19:56,220
‫debugowania, więc pójdę dalej i usunę to.

286
00:19:56,230 --> 00:19:56,650
‫Dobra.

287
00:19:56,650 --> 00:20:02,920
‫Podsumowując, ustawiliśmy obrót wieży i patrzymy na Cel, który jest wektorem

288
00:20:02,920 --> 00:20:05,800
‫F odpowiadającym punktowi na świecie.

289
00:20:05,800 --> 00:20:08,080
‫W tej chwili używamy tylko wyniku trafienia śladu.

290
00:20:08,110 --> 00:20:13,090
‫Teraz umieściliśmy tę funkcję w podstawowej klasie ponga i zabezpieczyliśmy ją, co oznacza, że

291
00:20:13,090 --> 00:20:15,880
‫mogliśmy odziedziczyć tę funkcję w klasie tank.

292
00:20:15,880 --> 00:20:21,190
‫A kiedy będziemy gotowi do stworzenia klasy wieży w oparciu o podstawę -- wtedy ta klasa wieży

293
00:20:21,190 --> 00:20:24,610
‫odziedziczy funkcję obracania wieżyczki i będziemy mogli ją ponownie wykorzystać.

294
00:20:24,610 --> 00:20:26,050
‫Wszystko, co musimy zrobić, to przejść.

295
00:20:26,050 --> 00:20:31,750
‫W nowym spojrzeniu na Target będziemy pracować nad stworzeniem klasy wieżowej wywodzącej się z bazy — w przyszłych

296
00:20:31,750 --> 00:20:32,380
‫wykładach.

297
00:20:32,380 --> 00:20:33,250
‫Zobaczymy się wkrótce.

