‫Cześć i witaj.
‫W tym wykładzie będziemy wyświetlać luźny ekran i zamierzam to zrobić
‫całkowicie z poziomu C++, aby stworzyć ten widżet.
‫Zanurzmy się i zobaczmy, jak to się robi.
‫Okej, więc chcielibyśmy wyświetlić jakiś interfejs, gdy gracz umiera, aby powiedzieć mu, co się dzieje, że przegrał
‫i że poziom zaraz się zresetuje.
‫Więc nie jest to dla nich zaskoczeniem.
‫Więc nie musimy tworzyć jakiegoś UI, widżetów UI, UMG, widżetu nierealnej ruchomej grafiki.
‫Zróbmy to przede wszystkim, tworząc folder do przechowywania interfejsu użytkownika.
‫I już wiem, że będziemy mieć dwa elementy interfejsu użytkownika, więc myślę, że będę miał tutaj folder interfejsu użytkownika, a
‫potem wejdźmy tutaj i kliknij prawym przyciskiem myszy, a potem idź, powinieneś był to zrobić wcześniej, ale zróbmy to. Przeprowadzę cię
‫przez to.
‫Przejdziemy do sekcji interfejsu użytkownika, następnie wybierzemy schemat widżetów, a prefiksem do
‫użycia jest podkreślenie WB P, a następnie będzie to luźny ekran.
‫Teraz możesz zrobić kilka klas bazowych dla tego rodzaju rzeczy w C++, ale nie będziemy tego omawiać w
‫tej sekcji.
‫Generalnie nie jest to konieczne, ao wiele łatwiej jest zrobić to w Blueprint.
‫Nie ma dużej korzyści z robienia tego w C++, chyba że interfejs użytkownika będzie bardzo skomplikowany i chciałbyś
‫umieścić część tej logiki interfejsu użytkownika w C++.
‫W naszym przypadku tak nie jest, więc możemy po prostu skorzystać z planów.
‫W końcu interfejs użytkownika to rzecz wizualna.
‫Teraz warto użyć narzędzia wizualnego, aby je złożyć, ponieważ już wiesz, jak tworzyć
‫widżety.
‫Następnie dam wam to wyzwanie, aby ustawić luźny ekran.
‫Chcemy dodać tekst wyjaśniający, że gracz przegrał i że czeka nas restart.
‫Chcesz umieścić ten tekst prawdopodobnie centralnie, aby był widoczny, upewnij się, że jest widoczny w grze.
‫A jednak, tak jak powiedziałem, wyjaśnij, że zbliża się restart.
‫A potem, gdy spróbujesz tego wyzwania, przyjrzymy się, jak możemy stworzyć to z C++.
‫Być może widziałeś, jak to zrobić w Blueprint, zanim zobaczymy, jak możemy to zrobić z poziomu C++.
‫Więc zatrzymaj wideo i puść.
‫OK, witaj z powrotem.
‫Więc zamierzam najpierw stworzyć trochę tekstu.
‫Więc chcę poszukać w palecie po lewej stronie, poszukam elementu tekstowego i wniosę go.
‫Zmienię to, że przegrasz.
‫Całkiem proste i pozbawione wyobraźni pisanie dialogów tutaj.
‫Zmienię kolor, krycie i wygląd na czerwony, aby było bardzo jasne, że zgubili, i
‫po prostu wcieram go trochę bardziej, a ja rozszerzę tę czcionkę i zmienię rozmiar na większy .
‫A potem rozszerzę ramkę wokół naszego tekstu i wyśrodkuję nasz tekst.
‫Więc schodząc w dół, skoncentruję tekst.
‫A jeśli się rozszerzę, zobaczmy, czy jest gdzieś indziej, gdzie mogę zrobić wyrównanie do środka, którego nie
‫ma.
‫Więc po prostu idę i z grubsza sprawię, że pudła będą odpowiednie, a potem przejdę do moich wyrównań, moich kotwic i
‫tego typu rzeczy.
‫I zamierzam wybrać menu rozwijane dla kotwic i wybrać ustawienie wstępne do kotwiczenia w środku, ponieważ to jest to, co
‫chcę zrobić.
‫Chcę ustawić moje wyrównanie na 0. 5 i 0. 5, co zasadniczo oznacza, że wyrównujemy się
‫do środka obiektu, a nie lewy górny róg, który ponownie wykona kotwicę.
‫Dobra, to nie było bardzo pomocne.
‫A potem pozycja X, dlaczego myślę, że jeśli ustawię pozycję obok zera i zera, bo
‫tak ustawiłem swoje kotwice, to moja przegrana pozycja będzie gdzieś pośrodku i po
‫prostu ją przesunę nawet nieznacznie.
‫Utrzymuj moją pozycję X na zero, pozycję Y na -50, ponieważ chcę dodać jakiś wtórny tekst mówiący, że w efekcie
‫może być łatwiej po prostu zduplikować inny tekst tutaj, ponieważ ma wszystkie ustawienia, których
‫już potrzebuję.
‫Chcę tylko trochę go zmniejszyć.
‫Ponownie ustaw zero, a powiem, że poziom zostanie zrestartowany za 5 sekund i zamierzam znacznie zmniejszyć
‫rozmiar czcionki.
‫Więc jest mniej na twojej twarzy, coś takiego, a potem po prostu przesuń go trochę
‫w dół, trochę nacięcie i ustaw ponownie tę pozycję X na zero i w 100% zadowolony z pozycjonowania.
‫Po prostu podniosę to trochę bardziej.
‫Jeśli przytrzymam Shift w dół, mogę zablokować go na osi, z którą się poruszam, tak aby była mniej więcej
‫centralna.
‫Ok, więc jestem z tego zadowolony.
‫Teraz musimy iść dalej i spróbować odrodzić tę rzecz.
‫Jak zamierzamy to zrobić?
‫Cóż, przede wszystkim musimy wiedzieć, jaką klasę widżetów mamy odradzać, i musimy wiedzieć, gdzie
‫będziemy to robić od teraz.
‫Jak już powiedziałem, myślę, że dobrym miejscem do tego jest sam kontroler gracza.
‫I będziemy musieli wiedzieć w kontrolerze gracza, jaką klasę, jaką klasę widżetu próbujemy odrodzić?
‫Teraz wiem, że jest to klasa schematu, ale wciąż potrzebujemy, aby była to klasa, którą próbujemy odrodzić.
‫Więc zamierzamy to zrobić, tworząc nową właściwość tutaj.
‫Edycje będą dostępne wszędzie i chcemy, aby była to podklasa, ponieważ jest to zawsze dobry sposób na
‫upewnienie się, że otrzymamy nową klasę.
‫Zasadniczo możesz użyć typu new class, jeśli chcesz, ale to nie ogranicza tego, jakiego rodzaju klasy
‫możemy użyć.
‫I tutaj chcemy ograniczyć to tylko do korzystania z widżetów.
‫Jeśli przejdziesz do swojego planu, możesz zobaczyć, czy idziemy gdzieś tutaj, możesz dowiedzieć się, czy klasa nadrzędna używa widżetu,
‫o którym wiemy, że po umieszczeniu na nim prefiksu staje się używanym widżetem.
‫Więc to jest podklasa.
‫A potem użyjemy naszych nawiasów kątowych, będzie to widżet, którego używasz, i faktycznie zamierzam zadeklarować go
‫tutaj, a nie zawierać żadnych dołączeń.
‫A więc class używasz widżetu, a następnie nazwiemy to klasą Losuj ekran.
‫Po prostu niech to naprawdę oczywiste, co się tam dzieje.
‫Teraz zamierzam skompilować na tym etapie, podczas gdy będziemy robić następne rzeczy, ponieważ kompilacja przy zmianie pliku
‫trwa tylko trochę dłużej.
‫Teraz właściwie kompilacja nie powiedzie się na tym etapie, ponieważ nie dołączyliśmy modułu UMG.
‫Nie wiemy, jak to zrobić.
‫Nie martw się o kompilację na tym etapie i po około 9 minutach filmu naprawimy ten
‫błąd.
‫Teraz, w C++, to, co będziemy chcieli zrobić, to odrodzenie tego widżetu.
‫Więc nie chcemy tego robić może nawet przed czasem.
‫To naprawdę nie ma znaczenia, ponieważ minutnik nie czeka.
‫Po prostu ustawia czas, a następnie przechodzi od razu do następnego wiersza kodu, więc nie będziemy czekać 5 sekund,
‫jeśli zrobimy to w Stripe, jeśli odrodziliśmy interfejs użytkownika zaraz potem, nie ma znaczenia, w jakiej kolejności zrób
‫to w.
‫Więc to, co zamierzamy zrobić, to użyć funkcji o nazwie Utwórz widżet, która nie jest obecnie dostępna.
‫Więc musimy najpierw dodać hash, a my zamierzamy uwzględnić to, że plan ukośnika używa
‫widżetu.
‫I to jest klasa, której potrzebujemy, aby uzyskać dostęp do funkcji tworzenia widżetu.
‫I po prostu powiemy utworzyć widżet.
‫Właściwie musi być dobrze, zobaczmy, czego potrzebujemy, aby to zapewnić.
‫Zamierzam f 12 do jego realizacji.
‫Widać, że jest to trochę skomplikowane, ale mamy tutaj parametr szablonu, który jest zasadniczo
‫domyślnie używanym widżetem, więc prawdopodobnie nie musimy go podawać.
‫A potem jest obiekt będący właścicielem i klasa, którą musimy utworzyć, a następnie nazwa widżetu, której
‫niekoniecznie musimy podawać.
‫A potem powraca jako wskaźnik do widżetu.
‫Więc to, co właściwie zamierzam zrobić, to dać temu obiekt właścicielowi.
‫Teraz tylko niektóre rzeczy mogą być właścicielem widżetu.
‫Jedną z tych rzeczy jest właściwie kontroler gracza.
‫Więc możemy to po prostu przekazać.
‫A następną rzeczą jest to, że chcemy przekazać podklasę t, w której używasz widżetu.
‫Na szczęście już to skonfigurowaliśmy w nagłówku pliku.
‫Więc możemy po prostu iść dalej i przekazać to, a ja powstrzymam moje wcięcie przed próbami naprawienia, dopóki nie
‫umieściłem średnika na końcu wiersza.
‫A potem chodźmy i zobaczmy, co jeszcze.
‫Cóż, to wszystko.
‫W tym momencie po prostu zwraca widżet.
‫Możemy więc mieć do ciebie wskaźnik, użyć sklepu z widżetami, a to będzie nasz ekran przegranych.
‫Więc musimy stracić klasę ekranu.
‫Po utworzeniu widżetu staje się on rzeczywistym luźnym ekranem.
‫Następną rzeczą, którą musimy zrobić, to uczynić ten interfejs widocznym.
‫Robimy to, dodając go do rzutni w nierzeczywistym języku.
‫Ale najpierw, ponieważ dodajemy do rzutni, wywołując funkcję na niebieskim ekranie, musimy upewnić się, że nie
‫jest to wskaźnik zerowy.
‫Więc jeśli stracił ekran nie jest równy null pointerowi, dlaczego może nie być punktów?
‫Przy okazji, małe wyzwanie dla ciebie.
‫Sprawdź, czy możesz dowiedzieć się, dlaczego możemy skończyć z pustym wskaźnikiem tutaj.
‫Cóż, jednym z powodów może być to, że zapomnieliśmy ustawić klasę utraty ekranu.
‫A jeśli tak jest i nie mamy ustawionej poprawnej klasy niebieskiego ekranu, to create widget po
‫prostu zwróci nam pusty wskaźnik.
‫I nie chcemy, aby tak się stało i nie chcemy na pewno wywoływać funkcji na wskaźniku zerowym.
‫Podobnie jak niebieska strzałka ekranu.
‫A potem to, czego chcemy tutaj, to funkcja o nazwie add to viewport.
‫Co po prostu to zrobi.
‫Idź i dodaj go do ekranu, abyśmy mogli zobaczyć ten niebieski ekran.
‫Teraz zamierzam iść dalej i to również skompilować, przejść do Unreal i otworzyć
‫nasz plan kontrolera gracza.
‫Więc strzelaj tutaj kontrolerem gry, a gdzieś tutaj powinniśmy być w stanie coś zobaczyć.
‫A zmienna jeszcze się nie pojawiła.
‫Może miałem kilka obszarów budowlanych.
‫Chodźmy i przyjrzyjmy się dziennikowi wiadomości.
‫Tak, widzimy tutaj kilka błędów kompilacji, a mianowicie te dziwne dotyczące braku zewnętrznych symboli.
‫Jeśli mamy trochę informacji o Tobie, użyj widżetu, który nie jest dostępny.
‫Teraz, jeśli cofniesz się do kilku wcześniejszych wykładów, wiemy, że tego rodzaju błędy pojawiają
‫się, gdy brakuje nam zależności modułu.
‫Więc jeśli otworzymy nasze proste dokumenty dotyczące budowania strzelanek, a ja po prostu zamknę terminal, aby uzyskać
‫nieco więcej miejsca, to możesz zobaczyć, co musimy zrobić, to dodać tutaj nową publiczną zależność.
‫Na koniec dodamy publiczną zależność dla UMG.
‫Więc nowy przecinek, a następnie w cudzysłowie, wstawi UMG.
‫A to w zasadzie pozwala nam korzystać z dołączonych elementów, które mieliśmy tutaj, jako widżet użycia projektu z ukośnikiem w
‫przód.
‫Wszystko to jest w osobnym module.
‫Więc standardowe rzeczy, które są wliczone w cenę.
‫Więc musimy iść i powiedzieć unveil, że chcemy użyć tego modułu w C++.
‫Przejdźmy dalej i zbudujmy i zobaczmy, czy teraz działa.
‫Dobra.
‫To wygląda na udane.
‫Jeśli przejdziemy do edytora i wrócimy, aby nakręcić kontroler gry.
‫Z jakiegoś powodu wydaje mi się, że nie przeładowałem poprawnie, więc musiałem nacisnąć kompilację w edytorze.
‫Wracamy teraz do kontrolera gry w strzelankę.
‫W końcu możesz zobaczyć tę luźną klasę ekranu.
‫Możemy kliknąć tam menu rozwijane i wybrać AWP, podkreślić, stracić tam ekran, skompilować, zapisać i chodźmy
‫i dajmy się zabić.
‫Zastrzel się kilka razy.
‫Huk, huk.
‫I proszę bardzo.
‫Pojawił się ekran Alu informujący nas, co się dzieje, że poziom zostanie ponownie uruchomiony za 5 sekund i
‫rzeczywiście tak się dzieje.
‫Więc teraz wiesz nie tylko, jak możesz tworzyć grafikę UMG, ale także jak możesz tworzyć je z C++, a
‫nie z Blueprint.
‫W następnym wykładzie będziemy mieć mniej pesymistyczne spojrzenie na sprawy i spróbujemy
‫stworzyć warunki do wygranej w tej grze.
‫Zobaczymy się wtedy.