﻿1
00:00:03,980 --> 00:00:05,150
‫Cześć i witaj.

2
00:00:05,150 --> 00:00:11,810
‫W tym wykładzie zamierzamy uporządkować bałagan planów i uporządkować go w funkcje, tak abyśmy mogli

3
00:00:11,810 --> 00:00:17,600
‫łatwo odczytać i zrozumieć, co się dzieje na naszym wykresie zdarzenia Blueprint.

4
00:00:17,870 --> 00:00:19,550
‫Zanurzmy się i zobaczmy, jak to zrobić.

5
00:00:20,630 --> 00:00:25,970
‫Teraz, jeśli pomniejszymy nasz wykres zdarzeń, zobaczymy, że robi się bardzo głośno.

6
00:00:25,970 --> 00:00:28,580
‫Widzę też kilka węzłów, które nie są z niczym połączone.

7
00:00:28,580 --> 00:00:33,740
‫Jest węzeł pobierania amunicji, który zamierzam usunąć, i węzeł ustawiania amunicji, ale widać, że robi się bardzo

8
00:00:33,740 --> 00:00:34,310
‫głośno.

9
00:00:34,310 --> 00:00:36,800
‫Coraz trudniej zrozumieć, co się tutaj dzieje.

10
00:00:36,830 --> 00:00:45,320
‫Teraz typowym rozwiązaniem, które ludzie robią, jest powiedzenie: Cóż, ten blok węzłów polega na tarle

11
00:00:45,320 --> 00:00:45,950
‫pocisku.

12
00:00:45,950 --> 00:00:47,090
‫Więc mogę je wybrać.

13
00:00:47,300 --> 00:00:54,020
‫Mogę nacisnąć klawisz C, a wokół tego zostanie umieszczony blok zwany blokiem komentarza.

14
00:00:54,020 --> 00:01:02,300
‫A potem mógłbym wpisać pociski odradzania i to dałoby mi znać, co robi ten blok kodu.

15
00:01:02,300 --> 00:01:05,180
‫To z pewnością jeden ze sposobów na uporządkowanie kodu.

16
00:01:05,540 --> 00:01:12,530
‫Jednak moim zdaniem nie jest to najlepszy sposób i mamy do tego lepsze narzędzia zwane funkcjami.

17
00:01:12,710 --> 00:01:14,180
‫Więc jakie są wszystkie funkcje?

18
00:01:14,750 --> 00:01:20,450
‫Funkcje wykonują bloki planu i sprawiają, że nasze gry robią różne rzeczy.

19
00:01:20,480 --> 00:01:25,100
‫Wiele węzłów dostarczanych przez Unreal to już właściwie funkcje.

20
00:01:25,430 --> 00:01:27,350
‫Więc spotkaliśmy się z nimi.

21
00:01:27,350 --> 00:01:33,140
‫Kiedy idziesz i przybliżasz, powiedzmy, nasz węzeł pocisku aktora odradzania, to jest funkcja.

22
00:01:33,140 --> 00:01:39,380
‫Kiedy patrzymy na dodawanie impulsu, jest to funkcja do prawie każdego z tych węzłów, nawet rzeczy takie jak przechodzenie

23
00:01:39,380 --> 00:01:44,180
‫do przodu aktywnego wektora, który nie ma pedału wykonawczego, nie są niebieskie, jest to również

24
00:01:44,180 --> 00:01:50,870
‫funkcja, którą można stwierdzić, ponieważ ma mały symbol f w lewym górnym rogu, który oznacza funkcję, ale nie jesteśmy ograniczeni do

25
00:01:50,870 --> 00:01:52,340
‫funkcji dostarczanych przez Unreal.

26
00:01:52,340 --> 00:01:56,810
‫Możemy też tworzyć własne funkcje, co jest naprawdę łatwe do wykonania w planach.

27
00:01:57,140 --> 00:02:02,570
‫Pozwalają nam zachować porządek i ponownie wykorzystywać bloki kodu.

28
00:02:02,570 --> 00:02:06,320
‫Więc to lepsze niż komentarz, ponieważ komentarz trzeba skopiować i wkleić.

29
00:02:06,590 --> 00:02:12,470
‫Natomiast funkcja pozwala nam udostępniać jeden blok kodu między wieloma miejscami użytkowania.

30
00:02:12,710 --> 00:02:19,010
‫Przyjrzyjmy się więc, jak możemy przekształcić coś takiego w blok kodu.

31
00:02:19,700 --> 00:02:24,530
‫No cóż, po pierwsze, możemy usunąć blok komentarza, ponieważ nie sądzę, żeby to było konieczne.

32
00:02:24,530 --> 00:02:31,280
‫Zamiast tego, wybiorę wszystkie węzły od odtwórz a -- aż do dodania impulsu, kliknij je

33
00:02:31,280 --> 00:02:34,910
‫prawym przyciskiem myszy i wybierz zwinięcie, aby zadziałać.

34
00:02:35,480 --> 00:02:42,860
‫A to tworzy nowy blok i zastępuje wszystkie poprzednie węzły, które były tam wcześniej.

35
00:02:42,870 --> 00:02:46,250
‫Teraz dostanę tę funkcję, nazwę, którą możesz zobaczyć w lewym panelu.

36
00:02:46,610 --> 00:02:53,840
‫Utworzono nową funkcję w sekcji funkcji w moim panelu z projektem i wybrano ją do automatycznej

37
00:02:53,840 --> 00:02:59,450
‫zmiany nazwy, ponieważ zdecydowanie powinniśmy zmienić nazwy tych funkcji, a ja będę

38
00:02:59,450 --> 00:03:01,970
‫nazywał to pociskiem odradzania.

39
00:03:02,120 --> 00:03:09,380
‫A dobre nazewnictwo jest absolutnie niezbędne w programowaniu, ponieważ kod zasadniczo dotyczy komunikacji.

40
00:03:09,590 --> 00:03:14,540
‫Staramy się komunikować ze sobą, abyśmy mogli zrozumieć, co napisaliśmy.

41
00:03:14,780 --> 00:03:17,180
‫Staramy się komunikować ze sobą w przyszłości.

42
00:03:17,180 --> 00:03:21,650
‫Kiedy wracamy do tego projektu i zapominam, dlaczego napisaliśmy go w określony sposób, a kiedy

43
00:03:21,650 --> 00:03:25,180
‫pracujesz w zespołach, próbujesz też komunikować się z resztą swojego zespołu.

44
00:03:25,370 --> 00:03:30,920
‫Niektórzy twierdzą, że dobrą miarą jakości kodu jest to, ile do cholery jest na minutę.

45
00:03:31,220 --> 00:03:36,440
‫Więc jeśli czytasz kawałek kodu i idziesz, do cholery, 50 razy na minutę, to jest całkiem zły kod,

46
00:03:36,440 --> 00:03:41,000
‫jeśli czytasz go i idziesz tylko, do cholery, raz lub dwa razy na minutę, wtedy

47
00:03:41,000 --> 00:03:44,900
‫to prawdopodobnie całkiem niezły kod i zawsze coś dostaniesz, co do cholery?

48
00:03:44,900 --> 00:03:49,010
‫Więc po prostu próbujemy zredukować tę liczbę, która działa.

49
00:03:49,220 --> 00:03:51,590
‫Co najważniejsze, mamy tendencję do nazywania funkcji czasownikami.

50
00:03:51,590 --> 00:03:58,040
‫Jest kilka wyjątków od tej reguły, o których powiemy później, ale głównie funkcje to rzeczy, które

51
00:03:58,040 --> 00:03:59,210
‫coś robią.

52
00:03:59,210 --> 00:04:06,200
‫Więc używamy słów „robienie” i jeśli nie masz pewności, jak nazwać tę funkcję, to jeśli pracujesz w zespole, możesz po

53
00:04:06,200 --> 00:04:11,360
‫prostu porozmawiać z kimś innym i zapytać go, jak jego zdaniem powinieneś ją nazwać

54
00:04:11,360 --> 00:04:13,970
‫i jakie rzeczy mają dla nich sens.

55
00:04:13,970 --> 00:04:19,700
‫Często stwierdzasz, że jesteś tak zakorzeniony w problemie, że nie możesz pomyśleć, jak o tym porozmawiać.

56
00:04:19,760 --> 00:04:26,390
‫Więc możesz zadać sobie pytanie: Cóż, gdzie podział się cały mój kod, kiedy stworzyłem tę funkcję pocisku

57
00:04:26,390 --> 00:04:26,930
‫odradzania?

58
00:04:27,440 --> 00:04:34,580
‫Cóż, możesz wrócić do szczegółów tego, jak ta funkcja jest faktycznie zaimplementowana, klikając ją dwukrotnie na

59
00:04:34,580 --> 00:04:40,640
‫wykresie zdarzeń, klikając ją w zakładce Moje plany lub klikając ją dwukrotnie w zakładce

60
00:04:40,670 --> 00:04:41,780
‫Moje plany.

61
00:04:41,780 --> 00:04:48,800
‫Widać, że wszystkie nasze węzły wciąż znajdują się tutaj, a teraz znajdują się w osobnej

62
00:04:49,040 --> 00:04:56,180
‫zakładce, więc możesz wrócić do zakładki wykresu zdarzeń lub zanurkować do zakładki Spawn pocisk, która pokazuje

63
00:04:56,180 --> 00:04:57,740
‫tylko ten funkcjonować.

64
00:04:58,730 --> 00:05:04,880
‫I widzicie, że jest tu nowy węzeł, ten mały fioletowy węzeł, który jest punktem wejścia do naszej

65
00:05:04,880 --> 00:05:05,390
‫funkcji.

66
00:05:05,390 --> 00:05:09,740
‫To mówi, co powinniśmy zrobić, gdy funkcja się uruchomi.

67
00:05:09,740 --> 00:05:10,970
‫To tylko punkt wejścia.

68
00:05:11,240 --> 00:05:16,850
‫I za każdym razem, gdy zostanie wywołany, ten węzeł będzie wyzwalał i wyzwalał wszystkie pozostałe węzły wewnątrz

69
00:05:16,850 --> 00:05:17,570
‫naszej funkcji.

70
00:05:17,720 --> 00:05:19,690
‫Wracając więc do wykresu zdarzeń i.

71
00:05:19,900 --> 00:05:25,690
‫Oddalam, może trochę zbliżyliśmy do siebie anody, teraz, gdy nasz wykres węzłów jest o wiele mniejszy i łatwiejszy

72
00:05:25,690 --> 00:05:26,590
‫do odczytania.

73
00:05:26,950 --> 00:05:33,520
‫Myślę, że jest tu jeszcze kilku kandydatów do wycofania funkcji i zastąpienia rzeczy.

74
00:05:34,030 --> 00:05:38,260
‫Jednym z nich byłoby miejsce, w którym drukujemy amunicję.

75
00:05:38,410 --> 00:05:43,720
‫Czyli w tym przypadku drukowanie amunicji to coś, co robimy w dwóch miejscach.

76
00:05:43,720 --> 00:05:47,600
‫Robimy to na początku gry i robimy to w pocisku odradzania.

77
00:05:48,310 --> 00:05:53,920
‫A potem inne miejsce, inna rzecz, element funkcjonalności, który moglibyśmy wyodrębnić do funkcji,

78
00:05:54,310 --> 00:06:01,150
‫to miejsce, w którym zmniejszamy amunicję, którą można by zamiast tego umieścić w funkcji zmniejszania amunicji.

79
00:06:01,240 --> 00:06:09,490
‫Tak więc tuż przed wyzwaniem, chciałbym usunąć węzeł konwersji i węzeł napisu

80
00:06:09,670 --> 00:06:15,240
‫po pocisku odradzania, ponieważ to skomplikuje sprawę.

81
00:06:15,250 --> 00:06:21,320
‫Chciałbym skopiować funkcjonalność z góry, aby oba wyglądały dokładnie tak samo.

82
00:06:21,340 --> 00:06:29,140
‫Więc jeśli skopiujemy trzy węzły z Rozpocznij odtwarzanie i wkleimy je poniżej i połączymy piny wykonawcze, to widać,

83
00:06:29,140 --> 00:06:35,020
‫że mamy dokładnie ten sam zestaw węzłów, mamy taką samą funkcjonalność między nimi i

84
00:06:35,020 --> 00:06:39,910
‫nie ma zamieszania, gdy dochodzimy do wyodrębnienia tego w funkcję.

85
00:06:39,970 --> 00:06:43,200
‫Dlatego chciałbym rzucić wyzwanie, aby stworzyć więcej funkcji.

86
00:06:43,210 --> 00:06:47,090
‫Pierwszym, który poleciłbym zrobić, to zmniejszenie amunicji.

87
00:06:47,110 --> 00:06:51,820
‫Więc biorąc trzy węzły zaangażowane w zmniejszanie amunicji, wyodrębniając je do funkcji i nadając

88
00:06:51,820 --> 00:06:52,510
‫im nazwę.

89
00:06:53,020 --> 00:06:55,990
‫A drugi to amunicja do druku.

90
00:06:56,020 --> 00:07:03,220
‫Więc zamierzasz wyodrębnić funkcjonalność pozyskiwania, konwertowania i drukowania amunicji w

91
00:07:03,220 --> 00:07:05,530
‫jedną funkcję.

92
00:07:05,860 --> 00:07:11,710
‫A ponieważ mamy dwie strony, na których drukujemy amunicję, chcesz usunąć jedną z nich i

93
00:07:11,710 --> 00:07:16,750
‫zamiast tego wprowadzić funkcję, którą możesz zrobić, przeciągając z okienka mojego projektu.

94
00:07:17,380 --> 00:07:22,720
‫I wreszcie mamy kilka wiadomości powitalnych, wyjście węzłów wiadomości powitalnych.

95
00:07:22,720 --> 00:07:26,800
‫Możesz również wyodrębnić je do funkcji drukowania wiadomości powitalnych.

96
00:07:27,220 --> 00:07:28,900
‫Zatrzymaj wideo i spróbuj.

97
00:07:32,110 --> 00:07:32,700
‫Dobra.

98
00:07:32,710 --> 00:07:33,430
‫Witamy spowrotem.

99
00:07:33,550 --> 00:07:37,390
‫Więc najpierw wyciągniemy naszą mniejszą amunicję.

100
00:07:37,390 --> 00:07:41,590
‫Więc są trzy węzły zaangażowane w to, że kliknięcie prawym przyciskiem zwinie funkcję.

101
00:07:42,190 --> 00:07:47,710
‫Następnie nazwiemy to zmniejszeniem amunicji i jest to dość proste.

102
00:07:47,710 --> 00:07:51,910
‫Więc spawnuj pocisk zmniejsza amunicję, a następnie drukuj amunicję.

103
00:07:51,910 --> 00:07:58,180
‫Weźmy więc trzy węzły, get convert i print string, a następnie klikniemy prawym przyciskiem myszy,

104
00:07:58,180 --> 00:08:01,750
‫zwiniemy funkcję i wywołamy tę jedną print ammo.

105
00:08:02,560 --> 00:08:08,530
‫Teraz, jak powiedziałem, mamy tę funkcję powtórzoną w dwóch miejscach, więc usuniemy miejsce, w

106
00:08:08,530 --> 00:08:16,150
‫którym to robi, i rozpoczniemy płytę, po prostu przeciągniemy amunicję do drukowania z naszej listy funkcji i połączymy

107
00:08:16,150 --> 00:08:19,570
‫piny wykonawcze, aby działała po naszym Drukuj ciąg.

108
00:08:20,260 --> 00:08:25,480
‫To prowadzi mnie do ostatniej funkcji, którą chcę utworzyć, a która, jak powiedzieliśmy, będzie nazywać komunikatami powitalnymi print.

109
00:08:25,690 --> 00:08:27,610
‫Więc wybiorę dwa napisy.

110
00:08:27,610 --> 00:08:34,240
‫Muszę zacząć odtwarzanie zwijania, aby funkcjonować i nazwać to drukowanie wiadomości powitalnych.

111
00:08:34,420 --> 00:08:42,220
‫A ten węzeł możemy teraz zmienić rozmieszczenie wszystkich naszych węzłów, aby znacznie łatwiej było to wszystko przeczytać na jednym

112
00:08:42,220 --> 00:08:43,130
‫pełnym ekranie.

113
00:08:43,150 --> 00:08:49,900
‫Widać, że teraz znacznie łatwiej jest zrozumieć funkcjonalność naszej gry, ponieważ wszystko mieści się

114
00:08:49,900 --> 00:08:56,350
‫na jednym ekranie i jest ładnie sprowadzone do podobnego poziomu abstrakcji i zrozumienia.

115
00:08:56,350 --> 00:09:02,800
‫I to właśnie nazwalibyśmy kodem samodokumentującym, ponieważ jest to kod, który nie potrzebuje komentarzy ani dokumentacji,

116
00:09:02,800 --> 00:09:04,690
‫aby wyjaśnić, co robi.

117
00:09:04,930 --> 00:09:06,850
‫Po prostu czyta się jak po angielsku.

118
00:09:07,210 --> 00:09:07,840
‫Świetna sprawa.

119
00:09:08,140 --> 00:09:09,880
‫Do zobaczenia na następnym wykładzie.

