﻿1
00:00:04,510 --> 00:00:05,290
‫Cześć i witaj.

2
00:00:05,290 --> 00:00:10,810
‫W tym wykładzie będziemy refaktoryzować wyzwalacz puli, aby był gotowy do dodania do niego większej ilości

3
00:00:10,810 --> 00:00:11,350
‫kodu.

4
00:00:11,350 --> 00:00:15,190
‫W tej chwili naprawdę wymykało się to z rąk, którzy zamierzają przerobić to na

5
00:00:15,190 --> 00:00:18,700
‫małą funkcję, taką jak ta, która jest znacznie prostsza do odczytania.

6
00:00:18,700 --> 00:00:21,070
‫Zanurzmy się i zobaczmy, jak zrobić ten refaktor.

7
00:00:22,220 --> 00:00:22,430
‫Dobra.

8
00:00:22,430 --> 00:00:27,800
‫Więc chcemy dodać trochę dźwięku do naszej gry, a miejscem, w którym będziemy to robić, jest broń

9
00:00:27,800 --> 00:00:28,610
‫podczas strzelania.

10
00:00:28,610 --> 00:00:30,050
‫To pierwszy port zawinięcia.

11
00:00:30,050 --> 00:00:33,290
‫Myślę, że fajny dźwięk strzału, dźwięk uderzenia byłby świetny.

12
00:00:33,920 --> 00:00:39,230
‫Jedynym problemem jest to, że kiedy wróciłem do naszej funkcji spustu, zauważyłem, że zrobiła się niesamowicie

13
00:00:39,230 --> 00:00:39,590
‫duża.

14
00:00:39,590 --> 00:00:41,120
‫Nie mieści się na jednym z moich ekranów.

15
00:00:41,120 --> 00:00:45,350
‫Trochę trudno jest też przeczytać i zrozumieć, gdzie umieścilibyśmy tę funkcję.

16
00:00:45,740 --> 00:00:50,840
‫Więc chociaż staramy się faktycznie zrozumieć, czym jest ta funkcjonalność, może warto zrobić szybki

17
00:00:50,990 --> 00:00:56,780
‫refaktor lub przenieść niektóre z tych rzeczy do innych metod, aby nie było tak trudno je

18
00:00:56,780 --> 00:00:57,260
‫przeczytać.

19
00:00:58,070 --> 00:01:03,140
‫Teraz, jeśli spojrzysz na ten kod i spróbujesz dowiedzieć się, jakie są podstawowe

20
00:01:03,140 --> 00:01:08,510
‫rzeczy, które on robi, zobaczysz, że duża część tego jest właściwie skonfigurowana dla naszej linii.

21
00:01:08,510 --> 00:01:12,020
‫Śledź cały ten kawałek od linii 28 do 43.

22
00:01:12,560 --> 00:01:13,880
‫A co my robimy?

23
00:01:13,880 --> 00:01:18,950
‫Cóż, bierzemy pionek właściciela, potem sprawdzamy, czy dobieramy kontroler właściciela, potem pobieramy z niego

24
00:01:18,950 --> 00:01:23,810
‫rzutnię, następnie uzyskujemy lokalizację końcową na podstawie maksymalnego zasięgu, a następnie mijamy w

25
00:01:23,810 --> 00:01:26,570
‫niektórych parametrach trafień, aby zignorować rzeczy.

26
00:01:26,870 --> 00:01:33,550
‫Wszystko to jest po prostu skonfigurowane dla naszego śledzenia linii, więc dlaczego nie wyodrębnimy tego tutaj do jego własnej funkcji?

27
00:01:34,220 --> 00:01:37,550
‫Zamierzam utworzyć nową prywatną funkcję na dole.

28
00:01:37,550 --> 00:01:45,680
‫Po naszych zmiennych będzie to wynik bool, ponieważ chcemy zasadniczo zastąpić to wywołanie, które

29
00:01:45,680 --> 00:01:52,220
‫zwraca sukces, takim, które po prostu daje nam również wynik trafienia.

30
00:01:52,790 --> 00:01:59,960
‫Więc zrobimy to jako coś, co zamierzam nazwać funkcją śledzenia pistoletu i będzie miała tutaj

31
00:01:59,960 --> 00:02:01,490
‫kilka parametrów.

32
00:02:01,520 --> 00:02:03,860
‫Mianowicie jeden z nich będzie hitem.

33
00:02:03,860 --> 00:02:07,370
‫Więc naciśnij wynik, ampersand, aby był to odniesienie.

34
00:02:07,370 --> 00:02:10,070
‫A ponieważ nie jest to stałe odniesienie, wiemy, że jest to parametr wyjściowy.

35
00:02:10,190 --> 00:02:11,150
‫Nazwij to hitem.

36
00:02:11,150 --> 00:02:14,360
‫A właściwie może być jeszcze jeden, którego potrzebujemy tutaj.

37
00:02:14,660 --> 00:02:21,920
‫Mianowicie, widzę, że mamy rotację wychodzącą z tego kawałka kodu iw rzeczywistości negujemy

38
00:02:21,920 --> 00:02:23,270
‫tę rotację.

39
00:02:23,270 --> 00:02:26,600
‫Więc to, co nas naprawdę interesuje, to kierunek ujęcia.

40
00:02:26,600 --> 00:02:28,550
‫Więc może właśnie do tego musimy się udać.

41
00:02:28,550 --> 00:02:31,850
‫Więc zamierzam utworzyć parametr wyjściowy wektora F.

42
00:02:32,690 --> 00:02:37,400
‫Więc wektor ampersand i będzie to ten kierunek strzału.

43
00:02:38,300 --> 00:02:41,750
‫To są dwa wyjścia, które będą pochodzić z śladu broni.

44
00:02:42,290 --> 00:02:45,350
‫Teraz przejdźmy dalej i stwórzmy implementację tutaj.

45
00:02:46,370 --> 00:02:53,210
‫A to, co chcemy zrobić, to po prostu skopiować do tego cały ten kod.

46
00:02:54,620 --> 00:02:55,460
‫Zobacz, jak to idzie.

47
00:02:56,330 --> 00:03:00,060
‫Chcemy też sprawdzić to ujęcie.

48
00:03:00,080 --> 00:03:00,710
‫Kierunek.

49
00:03:01,520 --> 00:03:05,810
‫Wyjmij to i włóż tuż przed końcem.

50
00:03:05,810 --> 00:03:11,660
‫A może po prostu usłyszymy, że po uzyskaniu widoku gracza możemy ustawić kierunek strzału, który musi być

51
00:03:11,660 --> 00:03:13,100
‫równy ujemnej rotacji.

52
00:03:13,610 --> 00:03:19,160
‫Ale ważne jest, aby tutaj zauważyć, że tak naprawdę nie chcemy ustawiać zmiennej lokalnej.

53
00:03:19,160 --> 00:03:22,280
‫Więc jeśli umieścisz tutaj typ, będzie to ustawienie lokalnego kierunku strzału.

54
00:03:22,610 --> 00:03:27,710
‫Chcemy to usunąć, aby ustawiał kierunek strzału w parametrach AMP, co w rzeczywistości oznacza,

55
00:03:27,710 --> 00:03:32,340
‫że ustawia kierunek strzału, który będziemy przekazywać w funkcji, która go wywołuje.

56
00:03:33,140 --> 00:03:34,700
‫To samo dotyczy hitu.

57
00:03:34,700 --> 00:03:42,200
‫Musimy usunąć to lokalne trafienie, aby trafienie przekazywane do śledzenia linii pojedynczo przez kanał było trafieniem, które zostało

58
00:03:42,200 --> 00:03:44,030
‫przekazane do śledzenia broni.

59
00:03:45,260 --> 00:03:50,750
‫I wreszcie, czy jest cokolwiek innego, to zrobienie linii, która nie jest teraz potrzebna, a także to będzie

60
00:03:50,750 --> 00:03:51,230
‫sukces.

61
00:03:51,230 --> 00:03:56,180
‫Cóż, po prostu musimy zwracać się jako wynik śledzenia linii pojedynczo po kanale.

62
00:03:56,180 --> 00:03:59,600
‫To będzie bez względu na to, czy nasz ślad broni się powiódł.

63
00:03:59,870 --> 00:04:02,420
‫Udało nam się więc sprawić, by to wcięcie było trochę trwałe.

64
00:04:02,420 --> 00:04:06,620
‫Możemy teraz zmieścić to wszystko na jednym ekranie i trochę łatwiej jest zrozumieć, że

65
00:04:06,620 --> 00:04:09,140
‫tak, wszystko to jest związane ze śledzeniem broni.

66
00:04:09,800 --> 00:04:14,930
‫Możemy podejść do naszego CP pistoletu. A teraz możemy ustawić sukces naszej bazy tutaj.

67
00:04:14,930 --> 00:04:23,900
‫Więc sukces puli B, będziemy musieli ustawić jako ślad działa i musimy przekazać tutaj kilka parametrów.

68
00:04:23,900 --> 00:04:26,720
‫Więc nadal musimy je gdzieś zadeklarować, jeśli trafimy.

69
00:04:28,190 --> 00:04:29,180
‫To będzie jeden z nich.

70
00:04:29,440 --> 00:04:30,380
‫Po prostu uderzy.

71
00:04:30,890 --> 00:04:36,140
‫A drugi miał być wektorem F zwanym kierunkiem strzału.

72
00:04:37,490 --> 00:04:39,180
‫A te zostaną przekazane.

73
00:04:39,200 --> 00:04:42,170
‫Więc najpierw będziemy mieli trafienie, a potem kierunek strzału.

74
00:04:44,090 --> 00:04:46,430
‫A na końcu średnik.

75
00:04:46,880 --> 00:04:49,370
‫Więc to trochę ułatwi sprawę.

76
00:04:49,640 --> 00:04:55,940
‫Jednak nie mówię, że potrzebujemy również kontrolera właściciela i nie chcę, aby ślad broni był odpowiedzialny

77
00:04:55,940 --> 00:04:59,680
‫za kontroler właściciela lub zapominał o kontroli właściciela.

78
00:04:59,690 --> 00:05:03,230
‫To nie brzmi, jakby to był obowiązek śladu broni, żeby to zrobić.

79
00:05:03,560 --> 00:05:05,530
‫Brzmi w porządku, żeby to trafiło.

80
00:05:05,540 --> 00:05:10,480
‫Brzmi dobrze, ponieważ jest to kierunek strzału, ale zamierzam narysować granicę w uzyskaniu kontrolera właściciela.

81
00:05:10,490 --> 00:05:17,630
‫W tym celu wstawię to, wstawiam cały ten kod do innej funkcji, którą obaj mogą

82
00:05:17,630 --> 00:05:18,560
‫wywołać.

83
00:05:19,130 --> 00:05:23,720
‫To będzie funkcja, która zwraca kontroler.

84
00:05:24,970 --> 00:05:25,540
‫Gwiazda.

85
00:05:26,590 --> 00:05:30,610
‫I nazwiemy go kontrolerem właściciela odrzutowca.

86
00:05:30,820 --> 00:05:32,080
‫I możemy to zrobić.

87
00:05:32,770 --> 00:05:38,710
‫Jak wiemy, nie ma to na celu zmiany żadnej ze zmiennych w naszej klasie broni.

88
00:05:39,130 --> 00:05:40,740
‫Stwórzmy tę implementację.

89
00:05:40,750 --> 00:05:47,380
‫Wystarczy wprowadzić implementację ze śladu pistoletu, w razie potrzeby poprawić wszelkie wcięcia.

90
00:05:47,380 --> 00:05:52,030
‫A my zamierzamy iść dalej i po prostu zwrócimy kontrolę właścicielowi.

91
00:05:52,040 --> 00:05:53,860
‫Więc nie ma potrzeby sprawdzania tutaj paznokci.

92
00:05:54,310 --> 00:05:57,700
‫To sprawdzenie paznokcia musimy wykonać w funkcji, która go używa.

93
00:05:58,300 --> 00:06:02,920
‫Powiemy więc, że nie musimy również tutaj ustawiać zmiennej.

94
00:06:02,920 --> 00:06:04,630
‫Możemy po prostu iść dalej i wracać.

95
00:06:06,620 --> 00:06:08,600
‫Więc będzie to dość proste.

96
00:06:08,600 --> 00:06:10,820
‫Posiadam kontroler, ale nie do końca.

97
00:06:11,300 --> 00:06:14,820
‫A potem ustawimy zmienną w śladzie broni.

98
00:06:14,840 --> 00:06:19,310
‫Więc posiadam kontroler, tak będzie.

99
00:06:20,440 --> 00:06:26,890
‫Następnie wykonujemy null return na null early return w śladzie broni, co, nawiasem mówiąc, musi zwrócić

100
00:06:26,890 --> 00:06:30,190
‫wartość logiczną, ponieważ ślad broni zwraca wartość logiczną.

101
00:06:30,820 --> 00:06:36,280
‫Więc możemy iść dalej i zwrócić tutaj false, ponieważ jeśli nie możemy zdobyć własnego kontrolera, nie możemy zrobić śladu broni,

102
00:06:36,280 --> 00:06:38,290
‫dlatego nie możemy w nic trafić.

103
00:06:39,280 --> 00:06:42,640
‫A potem potrzebujemy również tego kontrolera właściciela dalej.

104
00:06:43,870 --> 00:06:47,590
‫Tam, gdzie mamy trafionego aktora, robimy to, odnosząc obrażenia.

105
00:06:48,310 --> 00:06:54,250
‫I zasadniczo to, co chcemy tutaj zrobić, to przejąć kontrolę właściciela nad naszym przebojowym aktorem.

106
00:06:54,250 --> 00:06:56,500
‫Więc jeśli uderzymy aktora, ponownie dostaniemy kontroler właściciela.

107
00:06:56,890 --> 00:07:00,220
‫Teraz wiem, że dzwoni trochę tropicieli broni.

108
00:07:00,220 --> 00:07:03,160
‫Wsiadamy do kontrolera, a potem robimy to ponownie, jeśli uderzymy aktora.

109
00:07:03,640 --> 00:07:06,250
‫Ale to się stanie tylko za każdym razem, gdy uderzymy aktora.

110
00:07:06,280 --> 00:07:12,610
‫Więc nie mam nic przeciwko dwukrotnemu przeliczeniu, ponieważ po prostu sprawi to, że kod będzie trochę bardziej

111
00:07:12,610 --> 00:07:16,940
‫czytelny bez konieczności przechowywania zmiennych i stanów, które mogłyby się rozsynchronizować.

112
00:07:16,960 --> 00:07:17,850
‫Więc proszę.

113
00:07:17,860 --> 00:07:24,160
‫Mamy teraz kontroler właściciela, którego potrzebujemy do odnoszenia obrażeń, a spust Apple wygląda znacznie lepiej.

114
00:07:24,250 --> 00:07:25,210
‫To tyle w przypadku tego wykładu.

115
00:07:25,210 --> 00:07:25,750
‫Szybki.

116
00:07:25,750 --> 00:07:30,910
‫Wystarczy zrefaktoryzować nasz wyzwalacz ściągania, abyśmy mieli dobrą podstawę do pracy w następnym wykładzie.

117
00:07:31,060 --> 00:07:31,660
‫I zobaczę to.

118
00:07:32,770 --> 00:07:37,030
‫Aha, i wygląda na to, że zrobiłem tu trochę booboo i dostają się do kontrolera.

119
00:07:37,420 --> 00:07:42,580
‫Jeśli spróbujesz kompilować, nic nie zrobi, ponieważ ta wartość zwracana w rzeczywistości nie zwraca

120
00:07:42,580 --> 00:07:43,180
‫wskaźnika.

121
00:07:43,210 --> 00:07:47,590
‫Dlatego chcemy od razu zwrócić wskaźnik null w tym przypadku.

122
00:07:47,590 --> 00:07:50,350
‫Zasadniczo nie możemy wyciągnąć, a potem nie możemy dostać kontrolera.

123
00:07:50,350 --> 00:07:51,820
‫Więc zwracamy pusty wskaźnik.

