﻿1
00:00:04,490 --> 00:00:10,940
‫W tym wykładzie będziemy tworzyć kontroler gracza, który otrzyma informację, że gra

2
00:00:10,940 --> 00:00:18,110
‫została zakończona z trybu gry i stworzy to zachowanie ponownego uruchamiania, które po 5 sekundach

3
00:00:18,110 --> 00:00:20,870
‫przeładuje poziom po śmierci gracza.

4
00:00:21,080 --> 00:00:22,520
‫Zanurzmy się i zobaczmy, jak to się robi.

5
00:00:23,450 --> 00:00:30,950
‫Więc kiedy gra się skończy, musimy powiadomić kontroler gracza, a także musimy mieć kontroler gracza w

6
00:00:30,950 --> 00:00:37,760
‫naszym C++, abyśmy mogli zaimplementować zachowanie pozwalające nam zrestartować poziom i tak dalej.

7
00:00:38,300 --> 00:00:44,180
‫Więc pierwszą rzeczą do zrobienia jest to, że kiedy ten punkt zostanie zabity, po pierwsze, logujemy się na oślep.

8
00:00:44,420 --> 00:00:48,140
‫Chcemy sprawdzić, czy gra się skończyła.

9
00:00:48,170 --> 00:00:50,330
‫Teraz są dwa scenariusze.

10
00:00:50,330 --> 00:00:52,520
‫W jednym wygrywamy, a w drugim przegrywamy.

11
00:00:52,850 --> 00:00:55,550
‫Przegrana jest pierwszą, z którą się zmierzę, ponieważ jest najłatwiejsza.

12
00:00:55,550 --> 00:00:58,190
‫Jeśli zabitym pionkiem jest gracz, którego przegrywasz, to wszystko.

13
00:00:58,190 --> 00:01:04,100
‫Możesz zdecydować się na wiele żyć w różnych iteracjach tego trybu gry, ale nie zamierzam tego

14
00:01:04,100 --> 00:01:04,790
‫robić.

15
00:01:04,790 --> 00:01:06,170
‫Po prostu będę miał jedno życie.

16
00:01:06,170 --> 00:01:07,460
‫Jeśli umrzesz, gra skończona.

17
00:01:07,460 --> 00:01:08,630
‫Możesz chcieć zrestartować.

18
00:01:09,380 --> 00:01:13,490
‫Jak więc sprawdzić, czy ten pionek jest kontrolerem gracza?

19
00:01:13,700 --> 00:01:14,930
‫Cóż, to całkiem proste.

20
00:01:14,930 --> 00:01:22,490
‫Możemy po prostu wykonać rzut, aby wykonać rzut na kontroler gracza i zabitego pionka.

21
00:01:22,760 --> 00:01:25,310
‫A potem, jeśli to nie jest null.

22
00:01:25,310 --> 00:01:26,810
‫Weźmy więc wskazówkę.

23
00:01:26,810 --> 00:01:34,250
‫Wskaźnik kontroli gracza w górę nazywamy go kontrolerem gracza i zapisuje wynik tego wskaźnika tutaj.

24
00:01:34,550 --> 00:01:38,450
‫I powiemy w zasadzie, jeśli to nie jest nie.

25
00:01:38,930 --> 00:01:46,010
‫Więc jeśli kontroler gracza nie jest pustym wskaźnikiem, wiemy, że to gracz zginął i że dla niego

26
00:01:46,010 --> 00:01:47,330
‫gra jest skończona.

27
00:01:47,810 --> 00:01:52,040
‫Więc to, co chcemy zrobić, to wywołać tę metodę kontrolera gracza.

28
00:01:52,040 --> 00:01:57,440
‫Już wspomnieliśmy o tym, że istnieje metoda zakończona grą.

29
00:01:57,470 --> 00:01:58,400
‫Przyjrzyjmy się temu.

30
00:01:58,400 --> 00:02:06,950
‫Jeśli wykonamy kontrolkę P i spojrzymy na kropkę kontrolera gracza i możemy poszukać zakończenia gry.

31
00:02:07,660 --> 00:02:13,340
‫Widać na pewno, że istnieje tutaj wirtualna metoda o nazwie gra się skończyła i widać, że jest

32
00:02:13,340 --> 00:02:14,750
‫skupiony na zakończeniu gry.

33
00:02:14,750 --> 00:02:16,640
‫Na jakim aktorze powinniśmy się w końcu skupić?

34
00:02:16,640 --> 00:02:19,760
‫Gra domyślnie jest to zero punktów i prawdopodobnie tego zamierzam użyć.

35
00:02:20,810 --> 00:02:22,850
‫A potem powiemy, czy to zwycięzca?

36
00:02:22,880 --> 00:02:28,070
‫Zasadniczo musisz pozwolić graczowi kontrolować i wiedzieć, czy wygrał, czy nie.

37
00:02:28,430 --> 00:02:31,730
‫I to jest całkiem proste, powiedzmy, w tym przypadku.

38
00:02:31,730 --> 00:02:32,810
‫Nie, nie.

39
00:02:33,290 --> 00:02:41,420
‫Więc zrobimy, że gra ze strzałkami kontrolera gry się zakończyła, a następnie ustawię zerowy wskaźnik na skupieniu się na

40
00:02:41,420 --> 00:02:47,480
‫końcowej grze, ponieważ tak naprawdę nie potrzebujemy tej funkcji, a wtedy jest zwycięzcą.

41
00:02:47,480 --> 00:02:49,190
‫To po prostu będzie fałszywe.

42
00:02:49,400 --> 00:02:53,330
‫To nie jest zwycięski kontroler gracza, ponieważ to ten, który właśnie umarł.

43
00:02:54,310 --> 00:02:56,890
‫Więc nadszedł czas na małe wyzwanie do wdrożenia.

44
00:02:56,890 --> 00:02:59,470
‫Gra zakończyła się w kontrolerze gry.

45
00:02:59,800 --> 00:03:06,880
‫Oznacza to, że musimy stworzyć kontroler odtwarzacza C++, stworzyć jego podklasę blueprint, odrodzić tę podklasę blueprint

46
00:03:06,880 --> 00:03:12,460
‫domyślnie z naszego trybu gry, a następnie chcesz przejść dalej i nadpisać.

47
00:03:12,490 --> 00:03:17,320
‫Gra się skończyła i umieściłem tam wiadomość dziennika, aby sprawdzić, czy rzeczywiście otrzymujemy.

48
00:03:17,320 --> 00:03:19,600
‫Ta gra zakończyła się we właściwym czasie.

49
00:03:19,990 --> 00:03:20,980
‫Wstrzymaj, wideo i spróbuj.

50
00:03:21,260 --> 00:03:21,540
‫Dobra.

51
00:03:21,550 --> 00:03:22,060
‫Witamy spowrotem.

52
00:03:22,360 --> 00:03:27,550
‫Tak więc, krok pierwszy, stwórz ten kontroler odtwarzacza C++, stwórz nową klasę C++.

53
00:03:27,700 --> 00:03:30,700
‫Następnie idź i poszukaj zobaczmy, kontroler gracza.

54
00:03:30,730 --> 00:03:34,690
‫Następnie nazwiemy to kontrolerem strzelanki.

55
00:03:34,720 --> 00:03:35,860
‫Śmiało i stwórz tę klasę.

56
00:03:35,980 --> 00:03:44,510
‫Gdy to zrobimy, chcemy przejść do naszych planów i stworzyć klasę planów, która będzie na nich oparta.

57
00:03:44,530 --> 00:03:50,410
‫Więc chcemy kontrolera gracza strzelającego jako takiej podstawy i nazwiemy go BP, kontroler

58
00:03:50,830 --> 00:03:53,050
‫gracza strzelającego z podkreśleniem.

59
00:03:53,170 --> 00:03:57,520
‫Obecnie nie jest to naprawdę potrzebne, ale później będziemy chcieli podłączyć niektóre zasoby interfejsu

60
00:03:57,520 --> 00:03:59,170
‫użytkownika do kontrolera gracza.

61
00:03:59,170 --> 00:04:00,700
‫Więc będziemy mieć to gotowe.

62
00:04:01,240 --> 00:04:07,840
‫Następnie przejdziemy do trybu gry BP KML i zadokujemy go, ponieważ chcemy zmienić domyślną klasę kontrolera

63
00:04:07,840 --> 00:04:12,970
‫gracza z kontrolera gracza na nasz BPM, kontroler gracza w szkolnej strzelance.

64
00:04:13,420 --> 00:04:13,810
‫Fajny.

65
00:04:14,440 --> 00:04:16,330
‫Następnie chcemy nadpisać.

66
00:04:16,330 --> 00:04:17,980
‫Nasza gra się skończyła.

67
00:04:18,610 --> 00:04:21,990
‫Zobaczmy więc, czy przejdziemy do kontroli gracza do h.

68
00:04:22,000 --> 00:04:24,310
‫Widzimy, że jest to w sekcji publicznej.

69
00:04:24,520 --> 00:04:25,300
‫Oto podpis.

70
00:04:25,300 --> 00:04:25,930
‫Skopiujmy to.

71
00:04:25,930 --> 00:04:31,090
‫Przejdź do kropki kontrolera gry strzelanki i stwórz publiczność.

72
00:04:32,110 --> 00:04:35,590
‫Do tej wirtualnej pustki gra się skończyła.

73
00:04:35,620 --> 00:04:39,970
‫Fajnie i już musimy to zmienić, ponieważ to było wyraźnie zastępowane skądś.

74
00:04:41,190 --> 00:04:45,300
‫A potem możemy zrobić to, co możemy zrobić i wdrożyć.

75
00:04:45,330 --> 00:04:48,480
‫Control shift p chcemy to nazwać super pamiętać.

76
00:04:49,820 --> 00:04:52,820
‫I chcemy, żeby gra się tak skończyła.

77
00:04:53,870 --> 00:05:01,640
‫A my chcemy przejść w końcowej fazie gry, a B jest zwycięzcą, a następnie chcemy się zalogować.

78
00:05:01,790 --> 00:05:02,480
‫Więc logujesz się.

79
00:05:02,930 --> 00:05:04,040
‫On jest tam moim makro.

80
00:05:04,700 --> 00:05:07,100
‫Skończyliśmy.

81
00:05:07,190 --> 00:05:10,100
‫To będzie wiadomość dziennika wychodząca na końcu.

82
00:05:10,310 --> 00:05:12,620
‫Więc skompilujmy i zobaczmy, czy to działa.

83
00:05:12,870 --> 00:05:14,240
‫Przejdę do dziennika wyjściowego.

84
00:05:14,690 --> 00:05:15,290
‫Hit play.

85
00:05:15,500 --> 00:05:18,350
‫Idź i daj się zabić, w zasadzie.

86
00:05:18,410 --> 00:05:19,920
‫Zdrowie spada powoli.

87
00:05:20,660 --> 00:05:23,420
‫A potem powinniśmy zobaczyć wiadomość.

88
00:05:23,450 --> 00:05:24,440
‫Czy otrzymujemy wiadomość?

89
00:05:24,470 --> 00:05:24,890
‫Nie.

90
00:05:24,920 --> 00:05:25,850
‫Więc spójrzmy.

91
00:05:25,850 --> 00:05:27,170
‫Jaki jest tutaj kontroler gracza?

92
00:05:27,200 --> 00:05:32,600
‫Wygląda na to, że kontroler odtwarzacza strzelającego z podkreśleniem BP jest poprawny.

93
00:05:32,930 --> 00:05:35,270
‫Zakończyła się gra nadrzędna.

94
00:05:35,570 --> 00:05:37,190
‫Teraz widzę błąd.

95
00:05:37,220 --> 00:05:41,120
‫To jest coś, co niektórzy z was mogli zauważyć i

96
00:05:41,630 --> 00:05:47,690
‫krzyczeli na ekran, że tutaj mamy kontroler gracza, do którego rzucamy, i myli mnie to

97
00:05:47,690 --> 00:05:49,450
‫z rzeczywistym pionkiem gracza.

98
00:05:49,910 --> 00:05:57,220
‫Więc to, co chcemy tutaj zrobić, to powiedzieć, że zdobądź kontrolera zabitego pionka.

99
00:05:57,230 --> 00:06:01,220
‫Więc pionek zabity kropka dostaje błąd kontrolera.

100
00:06:01,310 --> 00:06:06,040
‫Więc strzałka dostaje kontroler, a następnie chcemy ją rzucić na kontroler gracza.

101
00:06:06,080 --> 00:06:08,530
‫A jeśli to nie ma wartości, to powinno działać.

102
00:06:08,540 --> 00:06:10,670
‫Więc chodźmy dalej i wypróbujmy to.

103
00:06:10,760 --> 00:06:12,050
‫Śmiało i włącz odtwarzanie.

104
00:06:12,780 --> 00:06:13,760
‫Castle znowu zginął.

105
00:06:15,610 --> 00:06:18,730
‫I tym razem też nie dostajemy żadnej wiadomości.

106
00:06:19,000 --> 00:06:21,100
‫I tym razem z subtelnego powodu.

107
00:06:21,550 --> 00:06:24,250
‫To dlatego, że odłączamy się od kontrolera.

108
00:06:24,760 --> 00:06:26,860
‫Zanim nazwiemy to -- zabity.

109
00:06:26,860 --> 00:06:32,560
‫Więc kiedy próbuje zdobyć kontrolującego pionka, to właściwie nie, nie ma już kontrolującego pionka.

110
00:06:32,830 --> 00:06:38,200
‫Więc musimy zrobić to powiadomienie tuż przed odłączeniem od kontrolera.

111
00:06:38,590 --> 00:06:42,190
‫Obejmuje to przesuwanie się w górę linii, która obejmuje nasz tryb gry.

112
00:06:42,190 --> 00:06:46,960
‫Myślę, że to nie miałoby znaczenia, ale teraz, kiedy naprawdę o tym myślę, tak, oczywiście, że ma.

113
00:06:47,290 --> 00:06:49,930
‫Przejdźmy więc do naszego poziomu i zagrajmy.

114
00:06:50,500 --> 00:06:51,640
‫Chodźmy i dajmy się zastrzelić.

115
00:06:52,060 --> 00:06:56,860
‫A kiedy to zrobisz, możesz zobaczyć, że skończyliśmy, zostaje wydrukowany tak, jak chcemy.

116
00:06:56,890 --> 00:06:58,960
‫Po drodze mieliśmy więc kilka czkawek.

117
00:06:58,960 --> 00:07:01,390
‫To nie twoja wina, jeśli nie dostałeś tego w wyzwaniu.

118
00:07:01,750 --> 00:07:03,690
‫Do tego momentu zrobiłeś wszystko inne.

119
00:07:03,700 --> 00:07:04,690
‫To wspaniale.

120
00:07:05,110 --> 00:07:10,780
‫Miejmy więc nadzieję, że może próbowałeś to debugować, ale nie martw się, jeśli utkniesz na tych rzeczach.

121
00:07:11,350 --> 00:07:17,650
‫Ostatnią rzeczą, jaką chciałem tutaj zrobić, jest ponowne uruchomienie gry na zegarze.

122
00:07:18,100 --> 00:07:25,210
‫Teraz sposób, w jaki możemy to zrobić, jest dość prosty, ponieważ kontroler gracza faktycznie ma metodę

123
00:07:25,450 --> 00:07:25,900
‫restartu.

124
00:07:25,900 --> 00:07:30,160
‫Więc jeśli pójdziemy i przyjrzymy się temu, powinien to być poziom restartu.

125
00:07:30,160 --> 00:07:35,560
‫To jest ten, do którego chcemy zadzwonić i chcemy to zrobić na zegarze.

126
00:07:35,560 --> 00:07:42,460
‫Więc używaliśmy timerów wcześniej do powtarzania rzeczy, ale możemy również użyć ich tylko do opóźnienia akcji o

127
00:07:42,460 --> 00:07:43,720
‫określoną wartość.

128
00:07:44,200 --> 00:07:49,930
‫Przejdę więc do gracza strzelającego, kontrolera, kropki H i stworzę tutaj prywatną posiadłość.

129
00:07:50,890 --> 00:07:56,500
‫Prywatna może być Twoją własnością, którą możesz edytować w dowolnym miejscu.

130
00:07:58,590 --> 00:07:59,100
‫Unosić się.

131
00:07:59,100 --> 00:08:02,540
‫To będzie opóźnienie restartu.

132
00:08:03,080 --> 00:08:05,460
‫Możesz już zobaczyć, dlaczego potrzebujemy już podstawy projektu.

133
00:08:05,850 --> 00:08:08,160
‫Dam mu 5/2 opóźnienie.

134
00:08:08,670 --> 00:08:16,680
‫Następnie przejdę do C++ i będziemy chcieli zrobić dobry licznik czasu, menedżer liczników.

135
00:08:17,610 --> 00:08:19,620
‫I wtedy możemy to zrobić.

136
00:08:19,890 --> 00:08:21,840
‫Następnie musimy uwzględnić.

137
00:08:21,870 --> 00:08:27,690
‫Więc hasz to i będzie to menedżer czasowy kropka H.

138
00:08:28,410 --> 00:08:33,180
‫Wtedy powinniśmy być w stanie użyć operatora kropki, ponieważ zwracany tutaj typ jest referencją

139
00:08:33,180 --> 00:08:35,250
‫i będziemy robić ustawiony timer.

140
00:08:35,340 --> 00:08:38,130
‫I tutaj musimy przekazać uchwyt timera.

141
00:08:38,130 --> 00:08:40,740
‫Więc w sekcji prywatnej chodźmy i stwórzmy jeden zestaw.

142
00:08:40,740 --> 00:08:42,810
‫Może to być uchwyt timera f.

143
00:08:42,930 --> 00:08:46,410
‫Nazwę to zegarem restartu.

144
00:08:46,410 --> 00:08:51,060
‫Więc to będzie uchwyt, który przekażemy do naszego ustawionego timera.

145
00:08:51,270 --> 00:08:57,780
‫Następną rzeczą, której potrzebujemy w piątej sygnaturze, jest posiadanie obiektu, który chcemy wywołać, czyli

146
00:08:57,780 --> 00:08:58,830
‫właśnie to.

147
00:08:59,550 --> 00:09:04,950
‫A potem myślę, że powinna to być sama metoda.

148
00:09:05,610 --> 00:09:08,250
‫Możemy to zrobić, robiąc znak ampersand.

149
00:09:08,250 --> 00:09:13,890
‫I jest to właściwie metoda, metoda poziomu restartu, którą chcemy wywołać, która została

150
00:09:13,890 --> 00:09:16,140
‫zdefiniowana w kontrolerze odtwarzacza A.

151
00:09:16,140 --> 00:09:17,640
‫A więc kontroler gracza.

152
00:09:19,270 --> 00:09:21,190
‫Dwukropek, poziom ponownego uruchomienia okrężnicy.

153
00:09:21,700 --> 00:09:27,970
‫A potem wystarczy podać opóźnienie, które już zdefiniowaliśmy jako opóźnienie restartu.

154
00:09:28,690 --> 00:09:35,740
‫Więc zrób to, ale średnik na końcu i miejmy nadzieję, że powinniśmy się zrestartować po 5

155
00:09:35,740 --> 00:09:36,520
‫sekundach.

156
00:09:36,920 --> 00:09:41,590
‫Teraz trochę ułatwimy testowanie, otwierając nasz karabin i czyniąc go trochę

157
00:09:41,590 --> 00:09:42,490
‫bardziej śmiercionośnym.

158
00:09:42,490 --> 00:09:46,180
‫Więc przejdę do ustawień domyślnych, zadam obrażenia na poziomie 50.

159
00:09:46,180 --> 00:09:47,890
‫Więc daj się zabić dwoma strzałami.

160
00:09:48,310 --> 00:09:49,630
‫Chodźmy grać.

161
00:09:50,660 --> 00:09:52,010
‫Daj się zabić szybko.

162
00:09:53,290 --> 00:10:00,400
‫A potem po 5 sekundach, miejmy nadzieję, powinniśmy zrestartować poziom, który zrestartowaliśmy i jesteśmy z powrotem na poziomie.

163
00:10:00,410 --> 00:10:02,830
‫Więc nasz zegar działa zgodnie z oczekiwaniami.

164
00:10:03,730 --> 00:10:11,350
‫Teraz w późniejszych wersjach zobaczysz, że zamiast restartować, zobaczysz komunikat o błędzie, który wygląda tak i mówi

165
00:10:11,350 --> 00:10:16,980
‫o niepowodzeniu podróży i mówi coś o tym, że czytałeś letnią piaskownicę, bla

166
00:10:17,140 --> 00:10:18,370
‫bla bla.

167
00:10:18,700 --> 00:10:23,620
‫Cóż, sposób, w jaki musimy obejść ten problem, gdy próbujemy ponownie uruchomić i chcemy sprawdzić,

168
00:10:23,620 --> 00:10:29,800
‫czy nasz restart działa, polega na tym, że przechodzimy do naszego menu kropka, kropka, kropka zamiast menu odtwarzania i

169
00:10:29,800 --> 00:10:31,840
‫musimy grać jako samodzielna gra.

170
00:10:31,870 --> 00:10:38,290
‫Jeśli grasz w samodzielną grę, uruchomienie zajmie trochę więcej czasu, ale ponowne uruchomienie będzie

171
00:10:38,290 --> 00:10:43,390
‫działać zgodnie z oczekiwaniami i zobaczymy, że poziom zostanie ponownie załadowany.

172
00:10:43,630 --> 00:10:46,510
‫Oczywiście nic nie wskazuje na to, że tak się stanie.

173
00:10:46,510 --> 00:10:50,100
‫Więc przyjrzymy się interfejsowi użytkownika w następnych wykładach.

174
00:10:50,110 --> 00:10:50,770
‫Zobaczę cię tam.

