‫Hej.
‫Witamy spowrotem.
‫Teraz wiemy, że musimy uzyskać wynik trafienia pod kursorem.
‫Porozmawiamy trochę więcej o tym, jak to działa i co to oznacza w tym filmie.
‫Naszym celem jest więc umieszczenie wyników trafień pod kursorem i pokazanie tej lokalizacji, a możemy to
‫zrobić, rysując sferę debugowania.
‫Dowiemy się również, jak to zrobić.
‫Porozmawiajmy więc o czymś, co nazywa się wynikiem trafienia.
‫W grach często będziesz chciał zrobić coś takiego.
‫Będziemy mieli punkt w kosmosie.
‫Nazwiemy ten punkt początkiem i będzie on miał wektor typu F i będziemy mieli lokalizację końcową.
‫Będzie to również punkt w przestrzeni wektora typu F.
‫Teraz powiedzmy, że chcielibyśmy narysować niewidzialną linię od punktu początkowego do punktu końcowego.
‫A w chwili, gdy rysujemy tę linię, chcielibyśmy zobaczyć, czy pomiędzy początkową i końcową lokalizacją
‫są jakieś obiekty.
‫Jeśli tak, to ta linia, którą rysujemy w przestrzeni, uderzy w ten obiekt.
‫Pozornie, kiedy to się dzieje, nazywamy to wydarzeniem hitu.
‫Teraz, kiedy narysujemy niewidzialną linię w ten sposób, nazywa się to wykonywaniem śledzenia linii.
‫A kiedy w coś trafimy, mówimy, że mamy trafienie śladowe.
‫Teraz, jeśli coś trafimy i otrzymamy zdarzenie trafienia, to trafienie śledzenia przechowuje informacje w strukturze
‫zwanej wynikiem trafienia.
‫Jego typ to wynik trafienia F.
‫Teraz struktura wyników trafień F zawiera zmienne, które przechowują informacje o zdarzeniu trafienia, w
‫tym lokalizację trafienia jako wektor f w przestrzeni i aktora, którego trafiliśmy, a także inne informacje.
‫Teraz, kiedy wykonujemy śledzenie linii, robimy to, określając kanał kolizji.
‫Zwykle przy śladach linii wybieramy kanał zwany widocznością.
‫Istnieje wyliczenie zwane E Collision Channel iw tym wyliczeniu jest stała wyliczeniowa zwana widocznością
‫XY.
‫Jest to jeden z parametrów, które określamy podczas śledzenia linii.
‫Teraz, jeśli określimy kanał widoczności, oznacza to, że obiekty, które są ustawione na blokowanie kanału
‫widoczności w swoich ustawieniach kolizji, będą rejestrować zdarzenia trafień.
‫Obiekty, które nie są ustawione do blokowania kanału widoczności, nie będą generować zdarzeń trafień.
‫Teraz chcielibyśmy, aby wynik śledzenia znajdował się pod kursorem.
‫Wyobraź sobie, że mamy tu ekran, a teraz jest nasz kursor.
‫Na końcu naszego kursora mamy punkt na ekranie, kiedy używamy funkcji, aby uzyskać wynik trafienia
‫pod kursorem.
‫To, co się dzieje, to to, że mamy kamerę i może ona zobaczyć niektóre obiekty na świecie, takie jak podłoga tutaj.
‫Wykonujemy narysowanie linii z kamery w punkcie na ekranie odpowiadającym położeniu naszego
‫kursora i wystrzeliwujemy narysowanie linii prosto w świat.
‫A jeśli coś trafimy, wygenerujemy zdarzenie trafienia i przechowamy informacje w strukturze wyniku trafienia.
‫Dowiedzmy się więc, jak możemy to zrobić.
‫Jestem tutaj w czołgu CP i chciałbym uzyskać wynik trafienia pod kursorem co klatkę, co oznacza, że
‫potrzebujemy funkcji tick.
‫Więc znowu wracamy do bazy i znajdujemy tutaj naszą funkcję tikową.
‫Teraz nie używamy jej do niczego w pionku podstawowym, więc możemy przenieść tę funkcję do klasy czołgu, tak jak zrobiliśmy
‫to z Begin Play.
‫Więc zamierzam podświetlić deklarację funkcji wraz z jej komentarzem i skopiować ją.
‫A potem usunę całą tę sekcję, public i całą resztę, a potem wrócę do Tank H
‫i tutaj w sekcji public zamierzam wkleić deklarację funkcji ticka.
‫Teraz nie używamy go w pionku podstawowym, więc usunę funkcję tika z pionka podstawowego.
‫CP Teraz zniknął z pionka podstawowego.
‫Teraz mamy tu zadeklarowaną intencję, ale musimy również zdefiniować funkcję w zbiorniku.
‫CP Zrobię to tutaj w zbiorniku DHCP, tuż pod komponentem wejściowym ustawień odtwarzacza.
‫Więc powiemy void tick.
‫Zajmuje pływak o nazwie Delta Time.
‫A oto nasze ciało.
‫Teraz znowu potrzebujemy zbiornika tuż przed funkcją tick, wraz z operatorem zakresu rozdzielczości.
‫Musimy też wywołać super tik i przejść w czasie delta.
‫Więc teraz mamy zaznaczenie w klasie czołgów.
‫To, co chcemy zrobić, to uzyskać wyniki trafień pod kursorem.
‫Oto jak to robimy.
‫Funkcja, której zamierzamy użyć, znajduje się na kontrolerze gracza i nazywana jest wynikiem trafienia pod kursorem.
‫Rozmawialiśmy o tym.
‫Oto składnia.
‫Zajmuje kanał śledzenia.
‫Pamiętaj, że musimy określić kanał śledzenia i użyjemy widoczności.
‫Teraz mamy dwa dodatkowe parametry wejściowe.
‫Pierwszym z nich jest bool zwany kompleksem śladowym B.
‫Porozmawiamy o tym, co to oznacza za sekundę.
‫A trzeci parametr wejściowy to wynik trafienia F.
‫Teraz kliknę na wynik trafienia F, aby zobaczyć ten typ w dokumentacji.
‫A jeśli przewinę w dół, zobaczymy niektóre zmienne.
‫Jeden z nich nazywa się aktor, a jego opis mówi „Aktor trafiony śladem”.
‫Mamy również uderzenie blokujące B, które wskazuje, czy to uderzenie było wynikiem kolizji blokującej.
‫Teraz, wśród innych zmiennych, mamy takie rzeczy jak punkt wpływu.
‫To miejsce w kosmosie, w którym faktycznie w coś uderzyliśmy.
‫Dlaczego więc nie spróbujemy wywołać tej funkcji?
‫Najpierw chcemy naszego gracza, kontrolera i dzięki temu, co tutaj zrobiliśmy i zaczęliśmy grać, mamy
‫gracza, kontrolera, ref.
‫Teraz pierwszą rzeczą, którą powinniśmy zrobić, to sprawdzić, czy ref kontrolera gracza jest prawidłowy.
‫Zawsze możemy przekazać wskaźnik do instrukcji if.
‫Zwróci true, jeśli sam wskaźnik nie jest wskaźnikiem zerowym.
‫Jeśli jest to pusty wskaźnik, zwróci false w instrukcji if i nigdy nie dotrzemy do wnętrza
‫instrukcji if.
‫Zawsze dobrze jest sprawdzić nasze wskaźniki i upewnić się, że nie są one puste, zanim ich użyjemy.
‫Teraz dostaniemy naszego gracza, kontroler ref i użyjemy operatora strzałki
‫do wywołania funkcji, uzyskania wyniku trafienia pod kursorem.
‫Teraz widzimy w wyskakującym okienku, że mamy trzy parametry wejściowe.
‫Pierwszym z nich jest kanał śledzenia.
‫Użyjemy EA Collision Channel i jeśli wpiszemy dwa dwukropki, otrzymamy listę rozwijaną, która pokazuje nam
‫wszystkie różne stałe wyliczenia w wyliczeniu EA Collision Channel.
‫Chcemy użyć widoczności, więc wpiszemy widoczność XY, aby określić, że używamy kanału
‫widoczności.
‫Teraz następny parametr nazywa się B Trace Complex i przekażemy temu fałsz.
‫Teraz omówimy za kilka minut, co to oznacza.
‫Ale na razie użyjemy false.
‫Teraz dla trzeciego parametru potrzebujemy wyniku trafienia.
‫Jest to struktura typu trafienia typu F.
‫Teraz, jeśli najedziesz na to kursorem, zobaczysz, że wynik trafienia F jest przekazywany jako odwołanie, jak
‫wskazuje operator odniesienia, który wygląda jak ampersand.
‫Teraz zwykle, gdy przekazujesz coś jako odwołanie, jest to odwołanie do kosztu, co oznacza, że funkcja nie będzie
‫w stanie tego zmienić.
‫Ale tutaj przekazujemy wynik trafienia F jako niestałe odniesienie.
‫Jest to zazwyczaj wskazówka, że funkcja jest przeznaczona do bezpośredniej zmiany tego parametru wejściowego.
‫To, co otrzyma wynik trafienia pod kursorem, to wypełnienie tych zmiennych w wyniku trafienia informacjami
‫o wyniku trafienia.
‫Oznacza to, że musimy przekazać jeden z tych wyników f hit.
‫Utworzymy tutaj zmienną lokalną w wyniku sprawdzenia jeśli typu F trafienia.
‫Możemy wywołać ten wynik trafienia i możemy po prostu przekazać to N jako trzeci parametr wejściowy.
‫Teraz, po wywołaniu tej funkcji, ten wynik trafienia zostanie wypełniony danymi o tym
‫śladzie linii.
‫Na przykład możemy uzyskać dostęp do aktora z kropką wyniku trafienia, aby uzyskać aktora, który został trafiony, lub punkt wpływu kropki, aby uzyskać
‫punkt w przestrzeni, w którym mieliśmy zdarzenie trafienia.
‫Tak więc wynik trafienia jest tym, czego użyjemy, aby uzyskać informacje o śledzeniu linii.
‫Teraz często fajnie jest móc zobaczyć wynik śledzenia linii.
‫Możemy łatwo zwizualizować wynik śledzenia linii, rysując sferę debugowania.
‫Kule debugowania to proste kształty, które rysujemy w przestrzeni i świetnie nadają się do pokazywania lokalizacji i
‫używamy ich podczas debugowania.
‫W rzeczywistości nie używamy sfer debugowania w grze zmianowej.
‫Zobaczmy więc, jak możemy narysować jedną z tych sfer debugowania.
‫Oto dokumentacja funkcji zwanej draw debug sphere.
‫Istnieje w pomocnikach debugowania rysowania.
‫Możemy więc skopiować ten nagłówek i dołączyć go wszędzie tam, gdzie chcemy wywołać sferę debugowania rysowania.
‫Teraz spójrz na wszystkie parametry wejściowe.
‫Po pierwsze, bierze świat w ten sposób, że wie, do którego świata narysować sferę.
‫Pobiera wektor F dla środka kuli oraz pływak dla promienia.
‫Liczba segmentów dla tej kuli jest równa N 32.
‫Im więcej segmentów, tym bardziej okrągła kula przybiera kolor F.
‫Dzięki temu wie, w jakim kolorze narysować tę sferę.
‫Chce wiedzieć, czy chcesz trwałych linii.
‫Innymi słowy, czy linie powinny zniknąć natychmiast, czy też powinny się utrzymywać?
‫Jeśli się upierają, chce poznać czas życia kuli.
‫Kiedy powinien przestać rysować kulę?
‫Jeśli nie rysujesz trwałych linii, powiedzmy, że chciałbyś narysować je dla jednej klatki,
‫wtedy przekażesz ujemną jako czas życia.
‫Teraz ostatnie dwa parametry są opcjonalne, więc zachowamy prostotę, omawiając tylko pierwsze siedem
‫parametrów.
‫Zobaczmy, jak to działa.
‫Narysuję teraz sferę debugowania na górze, dołączę pomoce debugowania rysowania.
‫To tam jest zadeklarowana funkcja sfer debugowania rysowania.
‫Teraz zejdźmy na dół, aby rozpocząć zabawę i po prostu narysuj sferę debugowania, aby zobaczyć, jak to działa.
‫Więc zamierzam wywołać sferę debugowania draw i .
‫Pierwszy parametr wejściowy to nowy świat.
‫Możemy uzyskać nasz świat w dowolnym momencie, dzwoniąc Get World, Get World Returns nowy świat wskazujący na nasz
‫obecny świat.
‫Więc to zadowoli pierwsze wejście.
‫Następnie potrzebujemy wektora f dla środka kuli.
‫Teraz nazywamy to i zaczynamy grać, więc mogę po prostu zadzwonić do lokalizacji aktora, a to
‫otrzyma lokalizację naszego stawu.
‫Ponieważ jesteśmy w klasie czołgów.
‫Teraz zamierzam nieco podnieść kulę.
‫Więc dodam wektor F z zerową kropką F dla x zero kropki F dla Y i powiem 200 F dla Z.
‫Teraz zamierzam umieścić te parametry wejściowe, każdy w osobnym wierszu.
‫Jasne jest więc, co przekazujemy dla każdego wejścia.
‫Drugie dane wejściowe to otrzymanie tego wyrażenia, które jest lokalizacją aktora oraz wektorem skierowanym w górę
‫o długości 200.
‫Dodanie tych dwóch wektorów razem da mi położenie zbiornika podniesionego w osi Z o 200
‫jednostek.
‫Teraz następnym parametrem wejściowym będzie promień kuli.
‫Wybiorę 100 F tylko po to, abyśmy mogli zobaczyć, jak wygląda sfera debugowania o promieniu 100.
‫Następna jest liczba segmentów.
‫wybieram 12.
‫Zobaczymy, jak to wygląda.
‫Teraz dla koloru F istnieje klasa koloru F i ma wiele wbudowanych kolorów, takich jak czerwony.
‫Teraz dla wartości logicznej zwanej B liniami trwałymi, wybiorę wartość true.
‫A dla następnego parametru wejściowego mamy informację o żywotności.
‫Ma domyślną wartość ujemną.
‫Oznacza to, że domyślnie narysuje sferę debugowania dla pojedynczej klatki.
‫Ale zamierzam przejść w 30 F, żeby otrzymać kulę na 30 sekund i mogę pominąć dwa ostatnie parametry.
‫Oto nasze wywołanie funkcji, aby narysować sferę debugowania.
‫Skompilujmy to i zobaczmy, jak to wygląda.
‫Ok, więc wróciłem do edytora.
‫Zamierzam otworzyć drugie okno, abyśmy mogli zobaczyć to na pełnym ekranie.
‫Mogę przejść do portów widoku okna i wybrać Viewport dwa, a teraz widzę to drugie okno.
‫Po otwarciu może nie być pełnego ekranu, ale zawsze możesz go zmaksymalizować.
‫Teraz mogę zagrać w grę z alt p.
‫Teraz sprawdź to.
‫Oto nasza sfera debugowania.
‫Zauważ, że nie jest idealnie okrągły.
‫Wybraliśmy 12 jako liczbę segmentów.
‫Im więcej segmentów wybierzesz, tym więcej linii potrzeba do narysowania kuli.
‫To jest kula o promieniu 100.
‫Jest dość duży, a środek kuli znajduje się w miejscu czołgu, plus 200 jednostek w
‫powietrzu.
‫W ten sposób możemy narysować sfery debugowania.
‫Więc Twoim wyzwaniem jest narysowanie sfery debugowania za pomocą wyniku śledzenia pod naszym kursorem.
‫Narysuj więc sferę debugowania w naszej nowej instrukcji if, w której sprawdzamy, czy ref kontrolera gracza nie ma wartości
‫NULL.
‫Teraz korzystając z naszego wyniku trafienia, uzyskaj punkt uderzenia z wyniku trafienia i użyj go jako Centrum
‫Sfery.
‫Teraz dla parametru wejściowego linii trwałych użyj wartości false, a dla czasu trwania użyj wartości ujemnej.
‫Spowoduje to narysowanie kuli dla pojedynczej klatki, co jest w porządku, ponieważ nazywamy
‫to każdą klatką wewnątrz funkcji tic.
‫Zatrzymaj więc wideo i narysuj sferę debugowania w funkcji zaznaczenia.
‫Dobra.
‫Więc wróciłem do Tanka.
‫Teraz mam to wywołanie funkcji sfer debugowania rysowania tutaj i zaczynam grać, więc mogę to skopiować i po
‫prostu usunąć to z rozpoczęcia odtwarzania, a my wrócimy do tiku tutaj wewnątrz naszej instrukcji if i
‫po prostu wkleimy go tutaj i zmienimy niektóre parametry wejściowe.
‫Po pierwsze, zmieniamy położenie środka kuli.
‫Użyjemy wyniku trafienia.
‫Więc powiem, że punkt uderzenia w wynik trafienia.
‫Teraz, jeśli chodzi o promień, chciałbym go nieco zmniejszyć.
‫Zróbmy to około 25.
‫W porządku.
‫Jeśli tego nie zrobiłeś, ja po prostu to robię.
‫Więc kula nie jest taka duża.
‫Teraz przedostatni parametr, który przekazujemy, dotyczy trwałych linii.
‫Przekażę fałsz i przez czas trwania zamiast 30 sekund użyję ujemnego jednego punktu
‫F.
‫W ten sposób otrzymamy sferę dla pojedynczej klatki, co jest w porządku, znowu wywołujemy to w funkcji tiku,
‫więc będziemy wywoływać to w każdej klatce.
‫Przejdźmy dalej i skompilujmy to.
‫Teraz wróć do edytora.
‫Jeśli teraz wcisnę Play, sprawdź to.
‫Mam sferę debugowania i jest ona rysowana w punkcie wpływu linii pod kursorem.
‫Teraz możemy przesunąć to w górę ścian i na inne obiekty, a ślad uderza w te obiekty, ponieważ są ustawione
‫tak, aby blokować kanał widoczności.
‫Całkiem niesamowite teraz.
‫Obiecałem, że omówimy śledzenie złożone kontra proste śledzenie.
‫Pokażę ci coś podczas gry.
‫Kliknijmy w rzutni, aby mieć kontrolę nad naszą dłonią.
‫Teraz naciśnij klawisz tyldy i wpisz polecenie konsoli pokaż kolizję.
‫Teraz może nie być tak łatwo zobaczyć na moim ekranie, ale na pewno możesz to zobaczyć na swoim ekranie.
‫Zwróć uwagę na kolizję naszych pionków.
‫Widzimy nie tylko kapsułę, ale także tę objętość kolizji wokół siatki naszego czołgu i wieży.
‫To jest prosta kolizja.
‫Pozwólcie, że pokażę wam bardzo szybko, gdzie możemy zobaczyć prostą kolizję.
‫Zajmę się zasobami i siatkami i jeśli kliknę dwukrotnie, powiedzmy, tutaj bazę czołgów, zobaczymy
‫złożoną kolizję.
‫Jeśli kliknę tę ikonę pokazu u góry i wybiorę kolizję złożoną, widzę wszystkie wielokąty w
‫kolizji złożonej, a jest ich dużo.
‫Jeśli ponownie kliknę ikonę pokazu i tym razem zaznaczę pole wyboru obok Prostej kolizji, zauważ, że jest
‫inny wolumin kolizji.
‫Nazywa się to kadłubem kolizyjnym i ma znacznie mniej geometrii.
‫Przy takiej objętości kolizyjnej istnieje mniejsza liczba wielokątów.
‫To jest to, co silnik fizyki wykorzystuje do wykrywania nakładania się zdarzeń trafień.
‫Gdyby używał złożonej kolizji, wymagałby znacznie więcej obliczeń.
‫Właśnie dlatego mamy proste woluminy kolizji, więc znacznie lepiej dla wydajności podczas
‫śledzenia linii, jeśli śledzimy kolizję prostą zamiast kolizji złożonej.
‫Więc teraz mamy wynik trafienia pod kursorem.
‫Dotarcie tam wymagało trochę pracy, ale teraz to mamy i udowodniliśmy to, pokazując tę lokalizację za
‫pomocą sfery debugowania.
‫To dobry sposób na potwierdzenie, że nasz ślad działa.
‫Więc teraz, gdy wiemy, że to działa, możemy użyć tej lokalizacji, aby obrócić wieżę naszego czołgu.
‫I zrobimy to w następnym filmie.
‫Zobaczymy się wkrótce.