‫Cześć i witaj.
‫W tym wykładzie zamierzamy uporządkować bałagan planów i uporządkować go w funkcje, tak abyśmy mogli
‫łatwo odczytać i zrozumieć, co się dzieje na naszym wykresie zdarzenia Blueprint.
‫Zanurzmy się i zobaczmy, jak to zrobić.
‫Teraz, jeśli pomniejszymy nasz wykres zdarzeń, zobaczymy, że robi się bardzo głośno.
‫Widzę też kilka węzłów, które nie są z niczym połączone.
‫Jest węzeł pobierania amunicji, który zamierzam usunąć, i węzeł ustawiania amunicji, ale widać, że robi się bardzo
‫głośno.
‫Coraz trudniej zrozumieć, co się tutaj dzieje.
‫Teraz typowym rozwiązaniem, które ludzie robią, jest powiedzenie: Cóż, ten blok węzłów polega na tarle
‫pocisku.
‫Więc mogę je wybrać.
‫Mogę nacisnąć klawisz C, a wokół tego zostanie umieszczony blok zwany blokiem komentarza.
‫A potem mógłbym wpisać pociski odradzania i to dałoby mi znać, co robi ten blok kodu.
‫To z pewnością jeden ze sposobów na uporządkowanie kodu.
‫Jednak moim zdaniem nie jest to najlepszy sposób i mamy do tego lepsze narzędzia zwane funkcjami.
‫Więc jakie są wszystkie funkcje?
‫Funkcje wykonują bloki planu i sprawiają, że nasze gry robią różne rzeczy.
‫Wiele węzłów dostarczanych przez Unreal to już właściwie funkcje.
‫Więc spotkaliśmy się z nimi.
‫Kiedy idziesz i przybliżasz, powiedzmy, nasz węzeł pocisku aktora odradzania, to jest funkcja.
‫Kiedy patrzymy na dodawanie impulsu, jest to funkcja do prawie każdego z tych węzłów, nawet rzeczy takie jak przechodzenie
‫do przodu aktywnego wektora, który nie ma pedału wykonawczego, nie są niebieskie, jest to również
‫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
‫funkcji dostarczanych przez Unreal.
‫Możemy też tworzyć własne funkcje, co jest naprawdę łatwe do wykonania w planach.
‫Pozwalają nam zachować porządek i ponownie wykorzystywać bloki kodu.
‫Więc to lepsze niż komentarz, ponieważ komentarz trzeba skopiować i wkleić.
‫Natomiast funkcja pozwala nam udostępniać jeden blok kodu między wieloma miejscami użytkowania.
‫Przyjrzyjmy się więc, jak możemy przekształcić coś takiego w blok kodu.
‫No cóż, po pierwsze, możemy usunąć blok komentarza, ponieważ nie sądzę, żeby to było konieczne.
‫Zamiast tego, wybiorę wszystkie węzły od odtwórz a -- aż do dodania impulsu, kliknij je
‫prawym przyciskiem myszy i wybierz zwinięcie, aby zadziałać.
‫A to tworzy nowy blok i zastępuje wszystkie poprzednie węzły, które były tam wcześniej.
‫Teraz dostanę tę funkcję, nazwę, którą możesz zobaczyć w lewym panelu.
‫Utworzono nową funkcję w sekcji funkcji w moim panelu z projektem i wybrano ją do automatycznej
‫zmiany nazwy, ponieważ zdecydowanie powinniśmy zmienić nazwy tych funkcji, a ja będę
‫nazywał to pociskiem odradzania.
‫A dobre nazewnictwo jest absolutnie niezbędne w programowaniu, ponieważ kod zasadniczo dotyczy komunikacji.
‫Staramy się komunikować ze sobą, abyśmy mogli zrozumieć, co napisaliśmy.
‫Staramy się komunikować ze sobą w przyszłości.
‫Kiedy wracamy do tego projektu i zapominam, dlaczego napisaliśmy go w określony sposób, a kiedy
‫pracujesz w zespołach, próbujesz też komunikować się z resztą swojego zespołu.
‫Niektórzy twierdzą, że dobrą miarą jakości kodu jest to, ile do cholery jest na minutę.
‫Więc jeśli czytasz kawałek kodu i idziesz, do cholery, 50 razy na minutę, to jest całkiem zły kod,
‫jeśli czytasz go i idziesz tylko, do cholery, raz lub dwa razy na minutę, wtedy
‫to prawdopodobnie całkiem niezły kod i zawsze coś dostaniesz, co do cholery?
‫Więc po prostu próbujemy zredukować tę liczbę, która działa.
‫Co najważniejsze, mamy tendencję do nazywania funkcji czasownikami.
‫Jest kilka wyjątków od tej reguły, o których powiemy później, ale głównie funkcje to rzeczy, które
‫coś robią.
‫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
‫prostu porozmawiać z kimś innym i zapytać go, jak jego zdaniem powinieneś ją nazwać
‫i jakie rzeczy mają dla nich sens.
‫Często stwierdzasz, że jesteś tak zakorzeniony w problemie, że nie możesz pomyśleć, jak o tym porozmawiać.
‫Więc możesz zadać sobie pytanie: Cóż, gdzie podział się cały mój kod, kiedy stworzyłem tę funkcję pocisku
‫odradzania?
‫Cóż, możesz wrócić do szczegółów tego, jak ta funkcja jest faktycznie zaimplementowana, klikając ją dwukrotnie na
‫wykresie zdarzeń, klikając ją w zakładce Moje plany lub klikając ją dwukrotnie w zakładce
‫Moje plany.
‫Widać, że wszystkie nasze węzły wciąż znajdują się tutaj, a teraz znajdują się w osobnej
‫zakładce, więc możesz wrócić do zakładki wykresu zdarzeń lub zanurkować do zakładki Spawn pocisk, która pokazuje
‫tylko ten funkcjonować.
‫I widzicie, że jest tu nowy węzeł, ten mały fioletowy węzeł, który jest punktem wejścia do naszej
‫funkcji.
‫To mówi, co powinniśmy zrobić, gdy funkcja się uruchomi.
‫To tylko punkt wejścia.
‫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
‫naszej funkcji.
‫Wracając więc do wykresu zdarzeń i.
‫Oddalam, może trochę zbliżyliśmy do siebie anody, teraz, gdy nasz wykres węzłów jest o wiele mniejszy i łatwiejszy
‫do odczytania.
‫Myślę, że jest tu jeszcze kilku kandydatów do wycofania funkcji i zastąpienia rzeczy.
‫Jednym z nich byłoby miejsce, w którym drukujemy amunicję.
‫Czyli w tym przypadku drukowanie amunicji to coś, co robimy w dwóch miejscach.
‫Robimy to na początku gry i robimy to w pocisku odradzania.
‫A potem inne miejsce, inna rzecz, element funkcjonalności, który moglibyśmy wyodrębnić do funkcji,
‫to miejsce, w którym zmniejszamy amunicję, którą można by zamiast tego umieścić w funkcji zmniejszania amunicji.
‫Tak więc tuż przed wyzwaniem, chciałbym usunąć węzeł konwersji i węzeł napisu
‫po pocisku odradzania, ponieważ to skomplikuje sprawę.
‫Chciałbym skopiować funkcjonalność z góry, aby oba wyglądały dokładnie tak samo.
‫Więc jeśli skopiujemy trzy węzły z Rozpocznij odtwarzanie i wkleimy je poniżej i połączymy piny wykonawcze, to widać,
‫że mamy dokładnie ten sam zestaw węzłów, mamy taką samą funkcjonalność między nimi i
‫nie ma zamieszania, gdy dochodzimy do wyodrębnienia tego w funkcję.
‫Dlatego chciałbym rzucić wyzwanie, aby stworzyć więcej funkcji.
‫Pierwszym, który poleciłbym zrobić, to zmniejszenie amunicji.
‫Więc biorąc trzy węzły zaangażowane w zmniejszanie amunicji, wyodrębniając je do funkcji i nadając
‫im nazwę.
‫A drugi to amunicja do druku.
‫Więc zamierzasz wyodrębnić funkcjonalność pozyskiwania, konwertowania i drukowania amunicji w
‫jedną funkcję.
‫A ponieważ mamy dwie strony, na których drukujemy amunicję, chcesz usunąć jedną z nich i
‫zamiast tego wprowadzić funkcję, którą możesz zrobić, przeciągając z okienka mojego projektu.
‫I wreszcie mamy kilka wiadomości powitalnych, wyjście węzłów wiadomości powitalnych.
‫Możesz również wyodrębnić je do funkcji drukowania wiadomości powitalnych.
‫Zatrzymaj wideo i spróbuj.
‫Dobra.
‫Witamy spowrotem.
‫Więc najpierw wyciągniemy naszą mniejszą amunicję.
‫Więc są trzy węzły zaangażowane w to, że kliknięcie prawym przyciskiem zwinie funkcję.
‫Następnie nazwiemy to zmniejszeniem amunicji i jest to dość proste.
‫Więc spawnuj pocisk zmniejsza amunicję, a następnie drukuj amunicję.
‫Weźmy więc trzy węzły, get convert i print string, a następnie klikniemy prawym przyciskiem myszy,
‫zwiniemy funkcję i wywołamy tę jedną print ammo.
‫Teraz, jak powiedziałem, mamy tę funkcję powtórzoną w dwóch miejscach, więc usuniemy miejsce, w
‫którym to robi, i rozpoczniemy płytę, po prostu przeciągniemy amunicję do drukowania z naszej listy funkcji i połączymy
‫piny wykonawcze, aby działała po naszym Drukuj ciąg.
‫To prowadzi mnie do ostatniej funkcji, którą chcę utworzyć, a która, jak powiedzieliśmy, będzie nazywać komunikatami powitalnymi print.
‫Więc wybiorę dwa napisy.
‫Muszę zacząć odtwarzanie zwijania, aby funkcjonować i nazwać to drukowanie wiadomości powitalnych.
‫A ten węzeł możemy teraz zmienić rozmieszczenie wszystkich naszych węzłów, aby znacznie łatwiej było to wszystko przeczytać na jednym
‫pełnym ekranie.
‫Widać, że teraz znacznie łatwiej jest zrozumieć funkcjonalność naszej gry, ponieważ wszystko mieści się
‫na jednym ekranie i jest ładnie sprowadzone do podobnego poziomu abstrakcji i zrozumienia.
‫I to właśnie nazwalibyśmy kodem samodokumentującym, ponieważ jest to kod, który nie potrzebuje komentarzy ani dokumentacji,
‫aby wyjaśnić, co robi.
‫Po prostu czyta się jak po angielsku.
‫Świetna sprawa.
‫Do zobaczenia na następnym wykładzie.