‫Cześć i witaj.
‫W tym wykładzie będziemy tworzyć tryb gry KML, który będzie tylko jednym z
‫możliwych trybów gry, które możemy stworzyć dzięki zastosowaniu wirtualnej -- zabitej metody, którą można wywołać w dowolnej
‫grze. tryby, które chcemy.
‫Zanurzmy się i zobaczmy, jak zamierzamy wdrożyć tę wirtualną metodę.
‫Chcielibyśmy więc, aby nasza gra mogła się zakończyć.
‫Co to znaczy, że gra się kończy?
‫Oznacza to, że wchodzimy w jakiś stan, w którym mamy lub przegraliśmy.
‫Informujemy gracza za pomocą jakiegoś interfejsu użytkownika.
‫Dajemy im możliwość ponownego uruchomienia i zagrania jeszcze raz, coś w tym stylu.
‫Teraz klasy zaangażowane w to zazwyczaj są w trybie gry.
‫Tryb gry odpowiada za decydowanie o zasadach gry, takich jak kto wygrał, a kto przegrał.
‫A do tego będziemy musieli wiedzieć, kto zostanie zabity.
‫Więc będziemy mieli tę wirtualną metodę zwaną zabicie pionka, która zostanie wywołana jako pionek
‫strzelca, gdy umrze.
‫Niezależnie od tego, czy jest to A. I. albo to gracz umiera.
‫Co więcej, chcę dodać tutaj małą komplikację, która polega na tym, że będą miały różne
‫tryby gry wywodzące się z naszego głównego trybu strzelanki.
‫Zaimplementują ten tryb gry.
‫To właśnie oznacza strzałka.
‫Kierunek strzały często jest trochę sprzeczny z intuicją, ale zabij ich wszystkich.
‫Tryb gry dziedziczy z trybu strzelanki i zastępuje zabitego pionka, aby liczyć i inaczej
‫decydować o zasadach gry.
‫Dlatego chcę umieścić metodę wirtualnego zabicia pionka w trybie nadrzędnej strzelanki, a następnie wdrożyć ją
‫lub zastąpić ją ponownie w trybie kill all game, który będzie trybem gry, który wdrażamy
‫dla siebie.
‫I możesz wybrać różne tryby gry, w których być może chcesz po prostu zabić
‫określoną liczbę wrogów na poziomie, a nie wszystkich lub coś podobnego.
‫Może zdobądź flagę, coś innego.
‫Ale w zasadzie to, co się wydarzy, to strzelec -- znajdzie tryb gry, który
‫ma typ strzelanki i będzie nazywał się -- zabity.
‫A potem, w zależności od implementacji, która faktycznie tam jest, przejdzie do
‫implementacji poprzez override.
‫Kolejną komplikacją jest to, że nasza logika interfejsu użytkownika i logika restartu to coś, co powinno
‫się wydarzyć w interfejsie użytkownika kontrolera gracza, który ogólnie jest domeną gracza, a nie czymś globalnym, takim jak
‫tryb gry.
‫Jest to szczególnie ważne w grach wieloosobowych, ponieważ tryb gry w rzeczywistości nie istnieje na komputerze
‫gracza, istnieje tylko na serwerze.
‫Tak więc w kontrolerze gracza powinny dziać się wszystkie elementy interfejsu użytkownika.
‫To komplikacja, o którą nie musimy się martwić, ponieważ nie jest
‫to gra wieloosobowa, ale nadal dobrze jest używać klas do tego, do czego mają być używane w Unreal.
‫Tak więc kontroler gracza, rzeczywista klasa głównego kontrolera gracza, ma wirtualną metodę zwaną grą, która została zakończona
‫specjalnie w tym celu, aby tryb gry mógł wywołać tę metodę, a my możemy zaimplementować ją w naszym własnym kontrolerze
‫gry strzelanki, aby wykonać interfejs użytkownika, ponowne uruchomienie wszystkich tego rodzaju rzeczy.
‫Ale będziemy musieli wywołać to z naszego trybu gry, kiedy zdecydujemy, że gra się skończyła.
‫Więc nazwiemy, że wirtualna gra zakończyła się na kontrolerze głównego gracza, a ponieważ ten główny kontroler
‫gracza jest w rzeczywistości graczem strzelającym, kontroler przekieruje się z powrotem i wywoła.
‫Ta gra się skończyła.
‫Wygląda więc na to, że będziemy wywoływać okrężną drogę od naszego pionka strzelca przez tryb gry strzelanki, aby
‫zabić ich wszystkich, tryb gry do kontrolera gracza do kontrolera gracza strzelającego.
‫Ale to pozwala nam na dużą elastyczność, jeśli chodzi o powiedzenie, no cóż, możemy mieszać i dopasowywać różne kontrolery gry,
‫które będą pokazywać interfejs użytkownika na różne sposoby, na różnych poziomach.
‫Możemy mieszać i dopasowywać różne tryby gry, które będą działać na różne sposoby, i to jest
‫powód, dla którego zaprojektowałem to w ten sposób.
‫To trochę przesada dla naszego projektu, ale pokazuje, jak może to rozszerzyć się na inne
‫projekty z przechwytywaniem trybów gry i różnymi rodzajami kontrolera gracza.
‫Więc spróbujmy go wdrożyć.
‫Pójdziemy i przede wszystkim znajdziemy tryb gry w trasę.
‫Jest już utworzony, ponieważ zaczynałem od projektu w C++.
‫Mamy tę prostą bazę trybów strzelanek i chcę tutaj stworzyć funkcję
‫publiczną, która zwróci void i zostanie -- zabita, a my będziemy musieli przejść przez --
‫to zginął tutaj.
‫Więc to będzie -- nazwana gwiazda -- zabita w ten sposób.
‫A potem, na początku, zrobimy z tego metodę wirtualną i
‫stworzymy podstawową implementację, która zasadniczo nic tu nie robi.
‫Następnie stworzymy podklasę.
‫Tak więc nowa klasa C++, pokażemy wszystkie klasy i będziemy szukać podstawowego trybu gry
‫strzelanki jako naszej podstawowej klasy i nazwiemy to trybem gry kill em all, tak jak to, i śmiało twórz
‫ta klasa.
‫Potem, kiedy to się skompiluje, chcę po prostu przełączyć się na sekundę i przejść do naszej postaci strzelanki.
‫CP I widzicie tutaj, że mamy naszych martwych w metodzie przyjmowania obrażeń.
‫Teraz, jeśli to jest martwe, to, co chcę zrobić, to zdobyć nasz tryb gry i nazwać --
‫zabity.
‫Więc sposób, w jaki to robimy, polega na tym, że zaczynamy od wezwania do zdobycia świata w celu uzyskania trybu gry.
‫Następnie wychodzi z trybu gry.
‫A potem to, co chcemy zrobić, to aby ten tryb gry był odpowiedniego typu, czyli prosty, główny,
‫prosty tryb strzelanki, który pozwala nam następnie zmienić tę postać, używać jej w różnych trybach
‫gry, takie jak tryby przechwytywania flagi.
‫Więc sposób, w jaki możemy to zrobić, możemy użyć nawiasów kątowych bezpośrednio w trybie pobierania lub gry.
‫Zrobimy prosty tryb strzelanki i będziemy musieli umieścić go na górze.
‫Dołącz więc prostą bazę trybów strzelanek, tak abym nie do końca poprawnie określiła nazwę klasy.
‫Myślę.
‫Będzie to więc prosta podstawa trybu strzelania.
‫Właśnie to staramy się uzyskać i możemy iść dalej i przechowywać to we wskaźniku zmiennej, nazwijmy to
‫trybem gry.
‫A potem to, co chcemy zrobić, to na tej nowej linii, prawdopodobnie chcemy sprawdzić, czy mamy to i nie jest to
‫wskaźnik zerowy.
‫Tak więc tryb gry nie jest równy wskaźnikowi zerowemu.
‫A jeśli to nie jest równe wszystkim punktom, to tutaj chcemy nazwać tryb gry strzałka pionek zabity
‫i pionek zabity, czy tak jest?
‫Więc teraz tryb gry jest świadomy, że pionek został zabity.
‫Małe mini wyzwanie, aby pominąć tryb gry „zabij ich wszystkich”, abyś mógł.
‫Wyloguj się, gdy -- zostanie zabity i ustaw go jako domyślny tryb gry na swojej mapie.
‫Dobra.
‫Miejmy więc nadzieję, że spróbowałeś tego małego wyzwania.
‫Idziemy dalej i wdrażamy.
‫Zamierzam to zrobić, kopiując publiczną sekcję naszej prostej bazy trybów strzelanek i trudno jest śledzić
‫wszystkie te rzeczy.
‫Następnie przejdziemy do naszej bazy trybów „zabij ich wszystkich”, która po niej dziedziczy.
‫I wkleimy metodę wirtualną i dodamy słowo kluczowe override, aby upewnić się, że
‫przesłaniamy tę metodę poprawnie.
‫Następnie stworzę implementację w C++ dla naszego podstawowego trybu gry KML.
‫To tutaj powinniśmy otrzymywać ten komunikat dziennika.
‫I żeby być bardzo ostrożnym, wiemy, że nie ma nic w implementacji.
‫Ale nigdy nie wiesz.
‫Sprawy mogą się później zmienić i możemy wbić się w bombę.
‫Więc chcemy zabić pionka.
‫Super -- zabity z -- zabity.
‫Ma sens.
‫A potem chcemy przeprowadzić tutaj dialog, mówiąc w zasadzie, że... został zabity.
‫Możemy sprawdzić, czy to działa, przechodząc do Unreal i kompilując, a następnie przechodząc do elementu
‫planów na pasku narzędzi i wybierając w ustawieniach projektu.
‫Domyślnym trybem gry, którym chcemy być, jeśli wybierzemy tryb gry, klasę podstawową, chcemy, aby był to tryb
‫gry podstawowej „zabij ich wszystkich”, w zasadzie śmiało zrób to.
‫W rzeczywistości nie jest to dokładnie to, co chcemy zrobić, jeśli pójdziemy i wybierzemy.
‫Chcieliśmy, żeby to było właściwie jego projektowe dziecko, a my już mamy projektowe dziecko, które ma wiele skonfigurowanych
‫rzeczy.
‫Więc zróbmy tam re-rodzicielstwo.
‫Zajrzymy do korzeni, znajdziemy tryb gry BP shooter, który mamy tutaj.
‫Zamierzamy zmienić nazwę tego trybu gry BP kill all, a następnie możemy go otworzyć, zadokować okno, otworzyć pełny
‫edytor planów, przejść do ustawień klasy i zmienić rodzica na tryb gry KML, w zasadzie C++.
‫W ten sposób powinniśmy uruchomić poprawny kod, jeśli przejdziemy do naszej wiadomości, aby wyświetlić
‫dziennik i nacisnąć przycisk odtwarzania, a następnie zabić postać, z którą mamy problem, wygląda na to, że nie
‫ma właściwej konfiguracji, więc jeśli wrócimy do domyślnych ustawień klasy i zmień domyślną klasę na postać strzelca BP, co powinno
‫być poprawne.
‫Zapisz i skompiluj na wszelki wypadek.
‫A potem sprawdź tutaj moje plany.
‫Wybrano grę KML, grę C++.
‫Więc tak naprawdę chcemy wybrać ten schemat tutaj i iść dalej i nacisnąć play.
‫Teraz mamy naszego pionka.
‫Możemy iść dalej i zabić tego gościa, a zobaczysz, że zabito pionka.
‫Czy Prince jest w komunikacie dziennika?
‫To działa fantastycznie.
‫Teraz, w następnej sekcji, przyjrzymy się drugiej części tego, czyli
‫wywołaniu gry zakończonej, gdy rzeczywiście chcemy ją zakończyć i móc od tego momentu zacząć ją od nowa.
‫Więc zobaczymy się w tym wykładzie.