‫Witam ponownie.
‫Teraz stworzyliśmy czołg, który może się poruszać, a nawet obracać swoją wieżą.
‫Jesteśmy teraz gotowi do stworzenia klasy wieży, która może odziedziczyć niektóre funkcje, które
‫czołg odziedziczył po podstawowej klasie kapsuł.
‫Teraz, gdy stworzymy klasę wieży, zamierzamy zastąpić funkcję zaznaczenia, aby móc również
‫obracać jej wieżą.
‫Naszym celem jest więc obracanie wieżyczek tak, aby zawsze patrzyły na czołg.
‫W ten sposób, kiedy zaczną strzelać pociskami, czasami trafią w czołg, o ile czołg
‫nie odsuwa się szybko.
‫Zamierzamy również wymyślić, w jaki sposób możemy zdobyć zbiornik --.
‫W ten sposób możemy namierzyć czołg i obrócić wieżę wieży w kierunku czołgu.
‫Przygotowujemy się do walki na pociski.
‫Więc jestem tutaj w edytorze i zamierzam przejść do naszego folderu z tuningiem czołgów, gdzie znajdują się
‫bazy -- i klasy czołgów.
‫Teraz chciałbym stworzyć klasę wieży w oparciu o klasę bazową.
‫Sposób, w jaki zrobiliśmy to z klasą czołgów, był taki, że mieliśmy rację.
‫Kliknięto na bazę - i wybraliśmy utwórz klasę C++ pochodną w oparciu o alternatywny sposób jest
‫przejście do narzędzi i wybranie nowej klasy C++.
‫I stąd możemy kliknąć zakładkę, która zawiera wszystkie klasy i wyszukać bazę --.
‫I tutaj widzimy naszą bazę -- klasę.
‫Jeśli wybiorę to i kliknę dalej, teraz będę tworzył nową klasę opartą na bazie --.
‫Zostawię to na tej samej ścieżce, co wszystkie nasze inne klasy C++ i nazwę tę wieżę.
‫Więc kliknijmy Utwórz klasę.
‫Oto moja nowa era wieży i kropka w wieży.
‫CP Teraz pierwszą rzeczą, jakiej potrzebujemy, jest funkcja tiku, ponieważ wieża będzie chciała obrócić swoją wieżę, aby
‫była skierowana w stronę --.
‫Więc zamierzamy zastąpić tutaj funkcję tiku.
‫Stworzę więc nową sekcję publiczną i wpiszemy wirtualny void tick, który przyjmuje zmiennoprzecinkową
‫Delta Time, a to jest przesłonięcie.
‫Teraz zajmiemy się bardziej szczegółowymi informacjami o wirtualnym i zastępowaniu w przyszłych filmach, ale zasadniczo
‫bierzemy odziedziczoną funkcję ticka i tworzymy dla niej nową implementację.
‫Weźmy więc funkcję tick i zaimplementujmy ją tutaj w Tower CP.
‫Teraz musimy poprzedzić nazwę funkcji ticka wieżą i podwójnymi dwukropkami.
‫I jak zawsze, dobrym pomysłem jest wywołanie super tika i musimy zdać w czasie Delta.
‫Teraz chciałbym tutaj obrócić wieżę czołgu tak, aby zagrażała czołgowi i była gotowa
‫do wystrzeliwania pocisków.
‫Ale chciałbym to zrobić tylko wtedy, gdy czołg jest w zasięgu.
‫Teraz, aby wiedzieć, czy czołg jest w zasięgu, musimy znać odległość od wieży
‫do czołgu.
‫Oto mały gadżet, który reprezentuje początek świata.
‫Innymi słowy, punkt w przestrzeni, w którym X, Y i Z wynoszą zero.
‫Teraz, kiedy mówimy o lokalizacji aktora, mówimy o wektorze od początku do tej
‫lokalizacji.
‫I zawsze możemy uzyskać ten wektor lokalizacji, używając lokalizacji aktora, dzięki czemu możemy uzyskać lokalizację jednej
‫z wież i lokalizację zbiornika.
‫A jeśli znamy te dwie lokalizacje, możemy obliczyć odległość między nimi.
‫Moglibyśmy to zrobić za pomocą matematyki wektorowej, ale klasa wektora F ma funkcję o
‫nazwie dist, która pobiera wektory lokalizacji i zwraca odległość między nimi.
‫Więc tutaj, w pliku tower CP, w funkcji tick, napiszę kilka notatek, żeby wiedzieć,
‫co mamy zrobić.
‫Najpierw musimy znaleźć odległość do czołgu, a następnie sprawdzić, czy czołg jest w zasięgu i czy
‫w zasięgu obróć wieżę w kierunku czołgu.
‫Więc mamy tu kilka rzeczy do zrobienia.
‫Teraz, aby znaleźć odległość do czołgu, musimy złapać czołg.
‫Teraz dobrym miejscem do tego jest Begin Play.
‫Więc oprócz funkcji tick, przejdźmy dalej i zastąpmy Begin Play.
‫Teraz zauważ, że w Tank H rozpocznij grę w strefie chronionej.
‫Będziemy go również chronić w wieży.
‫Dlatego umieścimy chronioną sekcję tuż pod publiczną i wprowadzimy rozpoczęcie gry tuż pod haczykiem.
‫Przejdźmy więc do Tower Dot, CP, zaimplementuj, zacznij grać w pełni określ nazwę funkcji i jak
‫zapewne zgadłeś, nazywamy Super Begin Play.
‫Teraz, aby pobrać zbiornik i zapisać go w zmiennej, potrzebujemy zmiennej typu zbiornik.
‫Więc umieścimy to tutaj, w Towers H, w sekcji prywatnej.
‫Teraz to będzie czołg A, to wskaźnik i możemy po prostu nazwać ten czołg.
‫Aby uniknąć konieczności uwzględniania tutaj Tanka H, możemy oświadczyć, że widzieliśmy, jak ważne może
‫to być.
‫Więc teraz mamy ten wskaźnik czołgu i jeśli możemy wymyślić, jak uzyskać dostęp do czołgu, możemy go zapisać w
‫naszym wskaźniku czołgu tutaj i rozpocząć grę.
‫Pierwszą rzeczą, którą zamierzam zrobić, jest dodanie Tank H, dzięki czemu będziemy mogli używać tego typu.
‫Jak więc mamy dostęp do zbiornika?
‫Cóż, oto nierealna dokumentacja silnika przydatnej funkcji o nazwie get player pawn.
‫Istnieje w statyce rozgrywki.
‫Więc skoro mam to otwarte, zamierzam skopiować dołączenie do statystyk rozgrywki i przyjrzeć
‫się składni.
‫Posiada dwa wejścia obiektu kontekstu świata.
‫Wiemy już, jak sobie z tym poradzić oraz indeks graczy.
‫Jak widzieliśmy w przypadku gier dla jednego gracza, takich jak nasza, indeks gracza zawsze będzie wynosił zero,
‫co pozwoli nam uzyskać dostęp do pionka odpowiadającego graczowi zero.
‫Więc nazwijmy tę funkcję tutaj w Tower Dot CP.
‫Zamierzam wkleić dla ciebie statystyki rozgrywki i na początku gry ustawię
‫zbiornik na równą statystyce rozgrywki dla gracza – dla obiektu kontekstu świata.
‫Mogę to przekazać, a dla indeksu gracza możemy przekazać zero.
‫Teraz przyjrzyj się czerwonemu zawijasowi.
‫Mówi, że wartość typu pionek nie może być przypisana do jednostki typu czołg.
‫Jest to dokładnie ten sam problem, który napotkaliśmy, gdy próbowaliśmy wywołać, zdobyć kontroler i zapisać
‫wynik w kontrolerze gracza A.
‫Czołg jest dzieckiem pionka, więc nie możemy przechowywać typu rodzica we wskaźniku dziecka.
‫Musimy.
‫Zgadłeś, musimy rzucić.
‫Więc weźmiemy wartość zwróconą z tego i umieścimy ją w wywołaniu funkcji rzutowania.
‫Więc powiemy, że rzucamy i rzucamy do zbiornika.
‫A to, co przekazujemy do obsady, to wezwanie, aby zdobyć staw gracza.
‫Więc umieśćmy to w nawiasach.
‫A po obsadzie będziemy mieli dostęp do czołgu.
‫Więc teraz, gdy mamy dostęp do zbiornika, możemy znaleźć odległość do zbiornika, a odległość to pływak.
‫Możemy więc utworzyć lokalną zmienną zmiennoprzecinkową o nazwie odległość.
‫A to, co ustawimy na równe, jest wynikiem wywołania funkcji statycznej wektora F, dist.
‫Teraz dist przyjmuje dwa parametry wejściowe wektora typu F.
‫Teraz chcemy odległość między dwoma punktami w przestrzeni.
‫Jednym z nich jest lokalizacja wieży.
‫Jesteśmy w klasie wieży, więc możemy wywołać lokalizację aktora, a to daje nam lokalizację wieży.
‫Ale co z czołgiem?
‫Cóż, możemy zadzwonić do czołgu, ustalić lokalizację aktora, a teraz mamy odległość.
‫Teraz jedynym problemem jest to, że używamy wskaźnika czołgu bez uprzedniego sprawdzenia, czy nie jest on
‫pusty.
‫Więc najpierw musimy powiedzieć, czy tank, a następnie możemy wziąć wywołanie tej funkcji i przeciągnąć ją tutaj, wewnątrz
‫instrukcji if.
‫Jeśli więc zbiornik jest prawidłowy, możemy uzyskać dostęp do jego lokalizacji za pomocą funkcji pobierz lokalizację aktora.
‫Doskonały.
‫Ponieważ pracujemy nad tym stwierdzeniem if, zamierzam przenieść te inne komentarze tutaj, w środku, ponieważ
‫wiemy, że nie możemy sprawdzić, czy czołg jest w zasięgu, jeśli czołg nie jest nawet prawidłowy.
‫Chciałbym więc rzucić wam wyzwanie, aby obrócić wieżę w kierunku czołgu.
‫Teraz chcemy to zrobić tylko wtedy, gdy czołg jest w zasięgu, mamy odległość.
‫Więc teraz potrzebujemy zmiennej zasięgu ognia.
‫Więc stwórz pływak zwany zasięgiem ognia w klasie wieży i pokaż to ze swoją własnością.
‫Chcielibyśmy mieć możliwość edytowania tego z edytora.
‫Teraz sprawdzisz, czy czołg jest w zasięgu.
‫Jeśli nazywa się to obracaniem wieżyczki i obracaniem wieżyczki, trzeba spojrzeć na cel.
‫Przejedziesz obok lokalizacji zbiorników.
‫Więc zatrzymaj wideo i zaimplementuj to zachowanie teraz.
‫Dobra.
‫Więc potrzebujemy zmiennej zasięgu ognia.
‫Więc tutaj, w Wieży H, mamy prywatną sekcję.
‫Zrobimy pływak.
‫Zamierzam nazwać ten zasięg ognia i zainicjować go do wartości, powiedzmy, 300
‫F.
‫Ale poeksperymentujemy z tym, ponieważ będzie to twoja własność.
‫Więc jesteś własnością.
‫A ponieważ chciałbym, aby wszystkie czołgi miały ten sam zasięg ognia, zamierzam to zrobić i to
‫tylko domyślnie.
‫W ten sposób możemy go edytować tylko na domyślnym planie.
‫Teraz, jeśli edytujesz gdziekolwiek, a może tylko edytujesz instancję, to jest w porządku.
‫To tak naprawdę kwestia preferencji i możemy to później zmienić.
‫Nadaję temu również kategorię i nazwę tę kategorię walką.
‫Przejdźmy do Tower CP i mamy tutaj kolejny punkt.
‫Sprawdź, czy czołg jest w zasięgu, co oznacza, że musimy sprawdzić, czy odległość jest mniejsza
‫lub równa zasięgowi ognia.
‫Mamy mniej niż lub równe, a nie tylko równe, ponieważ od klatki do klatki odległość może w
‫rzeczywistości być większa niż zasięg ognia, jedna klatka i mniejsza niż zasięg ognia w następnej klatce, całkowicie przechodząc przez zasięg
‫ognia.
‫Tak więc w rzeczywistości może nigdy nie stać się dokładnie równym zasięgowi ognia.
‫W rzeczywistości, przy wartościach zmiennoprzecinkowych, dwie wartości zmiennoprzecinkowe są dokładnie równe jest dość rzadkie.
‫Więc mamy to, jeśli sprawdzamy i jeśli dotrzemy do jego wnętrza, oznacza to, że odległość jest mniejsza lub
‫równa zasięgowi ognia.
‫Czołg jest teraz w zasięgu, co oznacza, że ten komentarz można przenieść właśnie tam.
‫Teraz, jeśli jesteś w zasięgu, obróć wieżę w kierunku czołgu, oznacza to, że wywołamy funkcję
‫obracania wieży.
‫To nasza chroniona funkcja, którą umieściliśmy w podstawowym zasobniku.
‫Teraz obróć wieżyczkę, aby spojrzeć na cel i potrzebujemy lokalizacji czołgu.
‫Więc to będzie lokalizacja czołgu i aktora.
‫W związku z tym nazywamy teraz obracanie wieży tylko wtedy, gdy czołg jest w zasięgu.
‫Więc skompilujmy to i zobaczmy, jak to działa.
‫Wracamy więc do edytora i musimy przejść do planów, pionków, znaleźć wieżyczkę pionka
‫BP i otworzyć pełny edytor planów.
‫Teraz w prawym górnym rogu widzimy bazowy pionek klasy rodzicielskiej, ale chcemy, aby nasza klasa rodzicielska była wieżą,
‫abyśmy mogli przejść do ustawień klasy, klasy rodzicielskiej i wyszukać wieżę i wybrać ją.
‫Teraz nasza wieża pionowa jest oparta na klasie wieży.
‫Zobaczmy teraz, co się stanie, gdy zaczniemy grać.
‫Dobra, więc przenoszę zbiornik.
‫Nie jesteśmy w zasięgu, więc nie widzimy żadnego ruchu z wież.
‫Ale jeśli znajdę się w zasięgu, spójrz na to.
‫Teraz chodzą za mną i wygląda to dość groźnie.
‫Teraz 300 jednostek nie jest tak daleko.
‫Więc to, co chciałbym zrobić, to edytować tę odległość.
‫Więc stąd, w BP Pawn Turret, mam zamiar wybrać własny BP Pond Turret.
‫A oto sekcja walki.
‫Idę dalej i ustawię to na około 700.
‫Teraz, jeśli nacisnę odtwarzanie, zobaczę, że nie będą się obracać, gdy będę się tu wracać.
‫Ale jak tylko znajdę się w zasięgu, teraz patrzą na mnie.
‫Idealny.
‫Podsumowując, stworzyliśmy klasę tower.
‫Mamy teraz wroga dla czołgu.
‫Obróciliśmy również wieżę wieży w kierunku czołgu w funkcji zaznaczenia i robimy to tylko wtedy, gdy czołg znajduje
‫się w zasięgu ognia.
‫Ujawniliśmy również zmienną zasięgu ognia, aby można ją było dostosować na planie.
‫Jesteśmy prawie gotowi do walki.
‫Zaczniemy to konfigurować w nadchodzących filmach.
‫Zobaczymy się wkrótce.