﻿1
00:00:04,260 --> 00:00:05,890
‫Witam ponownie.

2
00:00:05,910 --> 00:00:11,130
‫Teraz stworzyliśmy już naszą klasę pocisków i jesteśmy gotowi, aby zacząć odradzać te rzeczy

3
00:00:11,130 --> 00:00:15,660
‫na poziomie, abyśmy mogli wystrzelić je na wieże i ostatecznie je zniszczyć.

4
00:00:15,660 --> 00:00:19,950
‫Teraz odradzanie aktorów będzie obejmować funkcję aktora odradzania.

5
00:00:19,950 --> 00:00:22,470
‫Więc dowiemy się, jak to działa w tym filmie.

6
00:00:22,470 --> 00:00:25,290
‫Porozmawiajmy teraz o spawnowaniu pocisku.

7
00:00:25,320 --> 00:00:29,130
‫To jest coś, co chcielibyśmy zrobić od strony C++.

8
00:00:29,130 --> 00:00:34,590
‫Wywołamy funkcje C++, aby dynamicznie tworzyć nowe obiekty w świecie.

9
00:00:34,590 --> 00:00:41,610
‫Teraz odradzamy się od strony C++, ale chcielibyśmy stworzyć obiekt oparty na planie naszej

10
00:00:41,610 --> 00:00:43,110
‫klasy pocisku.

11
00:00:43,110 --> 00:00:50,040
‫Powodem jest to, że mamy plan oparty na klasie A Projectile C++, która zawiera

12
00:00:50,040 --> 00:00:51,030
‫dodatkowe informacje.

13
00:00:51,030 --> 00:00:54,270
‫W szczególności ma zestaw właściwości siatki.

14
00:00:54,270 --> 00:00:57,780
‫Wybraliśmy siatkę dla naszego statycznego komponentu siatki.

15
00:00:57,780 --> 00:01:00,510
‫Więc nie możemy po prostu odrodzić wersji C++.

16
00:01:00,510 --> 00:01:04,590
‫Musimy odrodzić wersję schematu, aby uzyskać tę siatkę.

17
00:01:04,590 --> 00:01:10,650
‫Więc pytanie brzmi, jak stworzyć obiekt w C++, który jest oparty na planie?

18
00:01:10,650 --> 00:01:15,810
‫Cóż, dowiemy się czegoś, co nazywa się podklasą PT, a teraz jest to szablon.

19
00:01:15,810 --> 00:01:20,730
‫Podobnie jak wiele szablonów, nawiasy kątowe będą wymagały typu.

20
00:01:20,730 --> 00:01:24,480
‫Tak więc użycie podklasy PT wymaga parametru typu.

21
00:01:24,480 --> 00:01:29,790
‫A to pozwala nam mieć zmienną, która przechowuje coś, co nazywa się klasą U.

22
00:01:29,790 --> 00:01:36,690
‫Klasa U reprezentuje typ klasy, ale ma również możliwość interakcji z nierealnym systemem odbić

23
00:01:36,690 --> 00:01:37,350
‫silnika.

24
00:01:37,350 --> 00:01:43,290
‫Kiedy mówię o refleksji, mam na myśli wymianę informacji między stroną C++ a stroną projektu.

25
00:01:43,320 --> 00:01:50,700
‫Podklasa PT, jak sama nazwa wskazuje, pozwala nam przechowywać zmienną reprezentującą klasę opartą na

26
00:01:50,700 --> 00:01:54,870
‫przekazywanym typie lub podklasę tego wybranego typu.

27
00:01:54,870 --> 00:02:01,560
‫Oznacza to, że możemy wybrać typ, a podklasa t może zawierać klasę u, która reprezentuje ten typ lub dowolny typ

28
00:02:01,560 --> 00:02:02,880
‫od niego pochodny.

29
00:02:02,880 --> 00:02:06,360
‫Obejmuje to plany oparte na typie.

30
00:02:06,360 --> 00:02:09,090
‫Zobaczmy więc, jak działa ta podklasa rzeczy.

31
00:02:09,090 --> 00:02:09,380
‫Dobra.

32
00:02:09,390 --> 00:02:15,270
‫Wróciłem więc tutaj w pompie bazowej, a powodem, dla którego jestem w kapsule bazowej, jest to, że chcemy, aby ten pocisk

33
00:02:15,270 --> 00:02:17,880
‫był zarówno w klasie czołgu, jak i wieży.

34
00:02:17,880 --> 00:02:20,910
‫Obie te klasy będą odradzać pociski.

35
00:02:20,910 --> 00:02:23,700
‫Więc chciałbym tutaj podklasę zmiennej t.

36
00:02:23,700 --> 00:02:30,930
‫Więc powiem podklasę t, aw nawiasach ostrych musimy podać typ.

37
00:02:30,930 --> 00:02:34,740
‫Teraz możemy zadeklarować dalej nawet wewnątrz nawiasów ostrych w ten sposób.

38
00:02:34,740 --> 00:02:37,440
‫I zrobię z tego typu pocisk.

39
00:02:37,440 --> 00:02:42,690
‫Powodem jest to, że stworzyliśmy klasę pocisków, a jej typem jest pocisk.

40
00:02:42,690 --> 00:02:47,940
‫Stworzę więc tę zmienną i nazwę ją klasą pocisku.

41
00:02:47,940 --> 00:02:54,960
‫Teraz pozwoli nam to mieć zmienną C++, która reprezentuje typ klasy, a typ może być

42
00:02:54,960 --> 00:02:59,670
‫oparty na pocisku, nawet opartym na tym typie klasy.

43
00:02:59,670 --> 00:03:02,100
‫Teraz dam mu własność U.

44
00:03:02,730 --> 00:03:07,620
‫A ponieważ chciałbym móc to edytować, przynajmniej w domyślnym planie, ustawię tę

45
00:03:07,620 --> 00:03:09,060
‫edycję jako domyślną.

46
00:03:09,060 --> 00:03:12,540
‫Dopiero teraz możemy nadać temu kategorię.

47
00:03:13,530 --> 00:03:16,170
‫Umieszczę to w kategorii zwanej walką.

48
00:03:16,200 --> 00:03:18,240
‫Teraz przejdźmy dalej i skompilujmy to.

49
00:03:18,270 --> 00:03:23,130
‫Ok, więc wróciłem do edytora i przejdę do folderu z planami, a stamtąd

50
00:03:23,130 --> 00:03:24,330
‫do folderu Pons.

51
00:03:24,330 --> 00:03:29,580
‫I zamierzam tylko otworzyć BP -- tank i otworzyć pełny edytor planów.

52
00:03:29,580 --> 00:03:32,910
‫Teraz, jeśli zajrzę do panelu szczegółów, mogę poszukać walki.

53
00:03:32,910 --> 00:03:33,840
‫Oto jest.

54
00:03:33,840 --> 00:03:36,540
‫A oto zmienna klasy pocisku.

55
00:03:36,540 --> 00:03:40,410
‫To jest ta podklasa, którą nazwaliśmy klasą pocisku.

56
00:03:40,410 --> 00:03:44,250
‫Teraz zauważ, że możemy to ustawić tutaj i możemy to ustawić za pomocą listy rozwijanej.

57
00:03:44,250 --> 00:03:47,910
‫A jeśli klikniemy na rozwijane menu, mamy trzy opcje.

58
00:03:47,910 --> 00:03:53,340
‫Możemy ustawić go na none, czyli na to, na co jest ustawiony domyślnie, co w zasadzie oznacza, że jest to wskaźnik zerowy.

59
00:03:53,340 --> 00:03:57,960
‫Lub możemy ustawić go na pocisk lub pocisk BP.

60
00:03:57,990 --> 00:04:04,740
‫To, co podklasa pozwala nam zrobić, to ustawić tę klasę pocisku na konkretny typ w oparciu o

61
00:04:04,740 --> 00:04:08,880
‫pocisk, ponieważ jest to typ, który wybraliśmy podczas tworzenia zmiennej.

62
00:04:08,880 --> 00:04:10,140
‫Teraz pocisk tutaj.

63
00:04:10,140 --> 00:04:14,520
‫To jest klasa C++ zwana pociskiem w C++.

64
00:04:14,520 --> 00:04:22,260
‫To pocisk, ale pocisk BP jest planem opartym na klasie pocisku C++ i możemy to

65
00:04:22,260 --> 00:04:22,920
‫wybrać.

66
00:04:22,920 --> 00:04:27,870
‫A teraz klasa pocisku jest ustawiona na typ pocisku BP.

67
00:04:27,870 --> 00:04:32,610
‫To nie jest komponent i nie jest to obiekt pocisku BP.

68
00:04:32,610 --> 00:04:33,540
‫To nie to.

69
00:04:33,540 --> 00:04:36,480
‫Przechowuje typ, a dokładniej U.

70
00:04:36,480 --> 00:04:37,260
‫Typ klasy.

71
00:04:37,260 --> 00:04:44,730
‫I tak jak powiedziałem, twoja klasa ma wbudowaną funkcjonalność, która pozwala na pracę refleksji między C++ a

72
00:04:44,730 --> 00:04:45,390
‫projektami.

73
00:04:45,390 --> 00:04:48,690
‫Informacje mogą przepływać między C++ a planami.

74
00:04:48,690 --> 00:04:55,710
‫Więc teraz mamy klasę pocisku, podklasę PT ustawioną na typ projektu pocisku BP.

75
00:04:55,710 --> 00:04:59,790
‫Po co więc trudzić się, aby stworzyć podklasę zmiennej?

76
00:04:59,790 --> 00:05:03,750
‫Cóż, musimy omówić, jak działa funkcja aktora odradzania.

77
00:05:04,200 --> 00:05:08,400
‫Aktor Spawn to funkcja należąca do nowej światowej klasy.

78
00:05:08,400 --> 00:05:12,120
‫Więc jeśli zdobędziemy świat, możemy zadzwonić do aktora Spawn.

79
00:05:12,120 --> 00:05:19,620
‫Aktor Spawn to kolejna funkcja szablonu i jest przeznaczona do tworzenia nowych obiektów, podobnie jak tworzenie

80
00:05:19,620 --> 00:05:21,060
‫domyślnych obiektów podrzędnych.

81
00:05:21,060 --> 00:05:28,260
‫Ale utwórz domyślny obiekt podrzędny jest przeznaczony do tworzenia komponentów i możemy go używać tylko w konstruktorze,

82
00:05:28,260 --> 00:05:35,520
‫ponieważ aktor odradzania określonej klasy może być wywoływany w czasie wykonywania, gdy gra jest uruchomiona i może tworzyć

83
00:05:35,520 --> 00:05:36,360
‫aktorów.

84
00:05:36,360 --> 00:05:39,450
‫Teraz jest to szablon, więc wymaga typu.

85
00:05:39,480 --> 00:05:45,780
‫Jeśli chcemy wywołać pocisk, to w klasie C++ przekażemy tutaj pocisk.

86
00:05:45,810 --> 00:05:52,590
‫To jest klasa C++, która jest zwracana przez funkcję aktora odradzania w C++.

87
00:05:52,620 --> 00:05:57,060
‫Teraz nawiasy przyjmują szereg parametrów, w tym klasę U.

88
00:05:57,060 --> 00:06:02,190
‫Teraz istnieje wiele przeciążeń tej funkcji, które przyjmują różne parametry wejściowe.

89
00:06:02,190 --> 00:06:07,590
‫Być może najprostsza jest wersja, która przyjmuje klasę U, lokalizację A i rotację.

90
00:06:07,590 --> 00:06:08,010
‫U.

91
00:06:08,010 --> 00:06:11,280
‫Klasa reprezentuje typ do odrodzenia.

92
00:06:11,310 --> 00:06:16,020
‫To jest rzeczywisty typ obiektu, który się odradza.

93
00:06:16,050 --> 00:06:18,300
‫To może być plan zajęć.

94
00:06:18,330 --> 00:06:25,890
‫Lokalizacja jest wektorem F, określającym, gdzie odrodzić się obiekt, a obrót określi jego obrót.

95
00:06:25,890 --> 00:06:28,710
‫Przykładowa składnia wygląda tak.

96
00:06:28,710 --> 00:06:35,580
‫Wywołalibyśmy aktora odradzania, określając typ klasy, a następnie przekazując informacje o klasie u wraz

97
00:06:35,580 --> 00:06:38,820
‫z wektorem lokalizacji i rotatorem rotacji.

98
00:06:38,820 --> 00:06:41,160
‫Porozmawiajmy więc przez chwilę o twojej klasie.

99
00:06:41,160 --> 00:06:44,970
‫Teraz, jak już mówiliśmy, twoja klasa reprezentuje typ klasy.

100
00:06:44,970 --> 00:06:51,480
‫Kiedy wywołujemy aktora odradzania, przekazujemy klasę U, aby dostarczyć funkcji aktora odradzania informacje

101
00:06:51,480 --> 00:06:53,550
‫o obiekcie do odrodzenia.

102
00:06:53,910 --> 00:07:01,320
‫Tak, przekazaliśmy typ w nawiasach ostrych, ale to po prostu mówi aktorowi Spawn, jaki typ C++ ma

103
00:07:01,320 --> 00:07:01,860
‫utworzyć.

104
00:07:01,860 --> 00:07:04,890
‫Podczas gdy ty klasa zawiera więcej informacji.

105
00:07:04,890 --> 00:07:11,070
‫Załóżmy, że stworzyliśmy plan oparty na pocisku, a w planie ustawiliśmy pewne właściwości, takie jak

106
00:07:11,070 --> 00:07:14,580
‫wybór siatki statycznej dla komponentu siatki statycznej.

107
00:07:14,580 --> 00:07:21,480
‫Teraz, gdybyśmy mieli po prostu odrodzić surową klasę C++, ta statyczna siatka nie zostanie ustawiona na nowo

108
00:07:21,480 --> 00:07:22,860
‫utworzonym obiekcie pocisku.

109
00:07:22,860 --> 00:07:26,250
‫Zasadniczo po prostu spłodzilibyśmy niewidzialnego nowego aktora.

110
00:07:26,430 --> 00:07:30,780
‫Jednak nowa zmienna klasy może reprezentować klasę projektu.

111
00:07:30,930 --> 00:07:37,140
‫Twoja klasa daje nam możliwość posiadania zmiennej po stronie C++, która reprezentuje plan, typ

112
00:07:37,140 --> 00:07:38,730
‫klasy i spawn.

113
00:07:38,730 --> 00:07:45,900
‫Aktor może przyjąć tę klasę jako argument wejściowy, aby mógł utworzyć nowy obiekt na podstawie planu reprezentowanego

114
00:07:45,900 --> 00:07:48,060
‫przez tę nową klasę.

115
00:07:48,060 --> 00:07:54,810
‫Tak więc nowy pocisk będzie miał ustawioną właściwość siatki statycznej, ponieważ tworzymy nowy obiekt na

116
00:07:54,810 --> 00:07:58,560
‫podstawie planu, a nie surowej klasy C++.

117
00:07:58,560 --> 00:08:05,190
‫Właśnie dlatego stworzyliśmy naszą podklasę, ponieważ może przechowywać nową klasę i byliśmy w stanie ustawić ją

118
00:08:05,190 --> 00:08:10,050
‫na równą pociskowi BP z naszego planu BP -- schemat czołgu.

119
00:08:10,050 --> 00:08:13,020
‫Więc teraz wiesz, jak odradzać aktorów.

120
00:08:13,170 --> 00:08:16,020
‫Aktor Spawn należy do nowej światowej klasy.

121
00:08:16,020 --> 00:08:22,320
‫Więc jeśli wywołasz get world i po prostu wywołasz aktora Spawn, to znasz wymagania wejściowe dla

122
00:08:22,320 --> 00:08:29,370
‫tej funkcji, którą przekazujesz w typie C++ w nawiasach ostrych i klasy, w której znajduje się lokalizacja i

123
00:08:29,370 --> 00:08:30,750
‫obrót w nawiasach.

124
00:08:30,750 --> 00:08:35,820
‫Więc dla twojego wyzwania zamierzasz odrodzić pocisk, zrób to w funkcji ognia.

125
00:08:35,820 --> 00:08:41,760
‫Więc wezwij aktora, który odradza się na świecie i podaje pocisk w nawiasach kątowych.

126
00:08:41,760 --> 00:08:45,390
‫Oznacza to, że będziesz musiał dołączyć plik nagłówkowy dla pocisku.

127
00:08:45,390 --> 00:08:52,170
‫Więc nie zapomnij o tym i użyj naszej nowej zmiennej klasy pocisku jako parametru wejściowego klasy U w

128
00:08:52,170 --> 00:08:52,920
‫nawiasach.

129
00:08:52,920 --> 00:08:55,320
‫Teraz potrzebujemy lokalizacji i rotacji.

130
00:08:55,320 --> 00:09:00,480
‫Punkt odrodzenia pocisku będzie używany zarówno do lokalizacji, jak i rotacji.

131
00:09:00,480 --> 00:09:02,850
‫Z komponentu punktu odradzania pocisku.

132
00:09:02,850 --> 00:09:09,000
‫Aby uzyskać dostęp do tych wartości, możesz wywołać polecenie pobierz lokalizację komponentu i uzyskaj obrót komponentu.

133
00:09:09,000 --> 00:09:14,040
‫Więc zatrzymaj teraz wideo i zadzwoń do aktora odradzającego się w funkcji ognia.

134
00:09:16,920 --> 00:09:17,310
‫Dobra.

135
00:09:17,310 --> 00:09:22,880
‫Przejdźmy więc do Base Pond CP, gdzie mamy zdefiniowaną funkcję ognia.

136
00:09:22,890 --> 00:09:25,230
‫Teraz narysowaliśmy tutaj sferę debugowania.

137
00:09:25,230 --> 00:09:27,450
‫Tak naprawdę nie będziemy już tego potrzebować.

138
00:09:27,450 --> 00:09:33,270
‫Więc zamierzam usunąć to wywołanie funkcji i zamiast tego wywołam tutaj aktora Spawn.

139
00:09:33,270 --> 00:09:36,750
‫Teraz mamy już lokalizację punktu odradzania pocisków.

140
00:09:37,050 --> 00:09:43,770
‫Zamierzam zmienić nazwę tej zmiennej lokalnej na po prostu lokalizację i stworzę nowy rotator F.

141
00:09:44,430 --> 00:09:45,810
‫Nazywany rotacją.

142
00:09:45,900 --> 00:09:50,010
‫I to również dostanę z punktu odradzania pocisków.

143
00:09:50,010 --> 00:09:56,670
‫Więc będzie to punkt odrodzenia pocisku, który otrzyma obrót komponentu.

144
00:09:56,670 --> 00:10:01,980
‫Więc teraz mam lokalizację i rotację, w której odradzam pocisk.

145
00:10:02,430 --> 00:10:07,050
‫Więc teraz muszę zadzwonić do aktora odradzającego się, żebym mógł zadzwonić do get world.

146
00:10:07,050 --> 00:10:11,910
‫A ze świata, który dostaję dzięki tej funkcji, mogę nazwać aktorem odradzania.

147
00:10:12,240 --> 00:10:15,780
‫Teraz to ma nawiasy kątowe i nawiasy, prawda?

148
00:10:15,780 --> 00:10:19,740
‫Więc w nawiasach kątowych muszę użyć pocisku.

149
00:10:21,240 --> 00:10:25,640
‫A ponieważ używamy pocisku, musimy dołączyć do tego nagłówek.

150
00:10:25,650 --> 00:10:32,760
‫Więc tutaj, usunę, narysuję pomocniki debugowania i zastąpię to pociskiem.

151
00:10:34,740 --> 00:10:37,260
‫Więc teraz mamy ten typ.

152
00:10:37,260 --> 00:10:44,070
‫Teraz potrzebujemy klasy U i bazując na H ma klasę pocisku, możemy użyć jej jako klasy U.

153
00:10:44,070 --> 00:10:47,050
‫Więc przejdziemy do klasy pocisku.

154
00:10:47,070 --> 00:10:54,750
‫Teraz wreszcie możemy przekazać lokalizację i rotację, co spełni funkcję aktora odradzania.

155
00:10:54,750 --> 00:11:00,420
‫Więc chodźmy dalej i skompilujmy to, a my wrócimy do edytora i możemy przetestować grę.

156
00:11:00,420 --> 00:11:04,080
‫Więc idę dalej, klikam i to sprawdzę.

157
00:11:04,080 --> 00:11:06,750
‫Stworzyliśmy nowy pocisk.

158
00:11:06,750 --> 00:11:13,680
‫Odradzamy pocisk na czubku naszej lufy, a one po prostu unoszą się w powietrzu,

159
00:11:13,680 --> 00:11:15,660
‫co nie wygląda dobrze.

160
00:11:15,660 --> 00:11:16,430
‫Ale to dobrze.

161
00:11:16,440 --> 00:11:17,700
‫To jest pierwszy krok.

162
00:11:17,700 --> 00:11:23,580
‫Najpierw musimy odrodzić pocisk, aby w następnym kroku działał jak pocisk.

163
00:11:23,580 --> 00:11:27,120
‫Podsumowując, teraz odradzamy pociski.

164
00:11:27,150 --> 00:11:29,060
‫To wielki kamień milowy.

165
00:11:29,070 --> 00:11:32,250
‫Jednak nie są jeszcze całkiem pociskami.

166
00:11:32,280 --> 00:11:36,060
‫Po prostu tam unoszą się i pociski mają latać w powietrzu.

167
00:11:36,210 --> 00:11:41,490
‫W następnym filmie porozmawiamy o tym, jak sprawić, by nasze pociski faktycznie latały w

168
00:11:41,490 --> 00:11:43,800
‫powietrzu, żeby zachowywały się jak pociski.

169
00:11:43,830 --> 00:11:44,700
‫Zobaczymy się wkrótce.

