‫Witam ponownie.
‫W tym filmie porozmawiamy o tym, jak możemy przyspieszyć nasz czołg.
‫Chcielibyśmy dokładnie kontrolować, jak szybko porusza się nasz czołg.
‫A teraz po prostu przechodzimy w tym wektorze lokalizacji delta do dodawania aktu, lokalnego przesunięcia, i nie
‫mamy kontroli nad tym, jak szybko porusza się czołg.
‫W rzeczywistości porusza się dość wolno.
‫Więc stworzymy zmienną prędkości, której będziemy mogli użyć do kontrolowania tej prędkości.
‫Weźmiemy również pod uwagę liczbę klatek w naszej grze, ponieważ nasza gra zmienia liczbę klatek z klatki
‫na klatkę.
‫Właściwie nie mamy stałego ruchu.
‫Aby wziąć pod uwagę tę liczbę klatek na sekundę, porozmawiamy o czymś, co nazywa się Delta Time.
‫Jesteśmy więc tutaj w edytorze i jeśli wcisnę Play i zacznę poruszać czołgiem, nie jest to
‫coś, co naprawdę można zauważyć.
‫Ale nasz czołg nie porusza się w stałym tempie od klatki do klatki.
‫Powodem jest to, że zmienia się nasza liczba klatek na sekundę i tutaj, w lewym górnym rogu widocznego obszaru, znajduje
‫się małe menu.
‫Jeśli to kliknę, obok pojawi się pole wyboru, aby pokazać DPS PES oznacza klatki na sekundę.
‫Jeśli to sprawdzę, to w prawym górnym rogu widzę moje klatki na sekundę.
‫A tuż pod tym, ile milisekund minęło od ostatniej klatki?
‫A te wartości zmieniają się z klatki na klatkę.
‫Jeśli nacisnę Play, możesz to przegapić, ale liczba klatek na sekundę spadła, a potem wróciła,
‫ponieważ na tym początkowym etapie gry działo się wiele.
‫Wszyscy aktorzy wywoływali swoje początkowe funkcje i jest kilka zakulisowych ustawień dla
‫świata.
‫Teraz, jeśli zacznę grać w tę grę, 120 aplikacji, które otrzymuję, zmienia się z klatki na klatkę,
‫mimo że oscyluje wokół 120.
‫Powodem, dla którego powoduje to niespójny ruch, jest to, że wraz ze spadkiem liczby klatek na sekundę
‫aktualizacje tików są wywoływane rzadziej.
‫A jeśli przesuwamy ten czołg o tę samą wartość w każdej klatce, to polegamy na tej liczbie klatek
‫na sekundę, aby zachować spójność, aby uzyskać ten spójny ruch.
‫A kiedy gra staje się bardziej skomplikowana, zmiany liczby klatek na sekundę będą coraz gorsze.
‫Musimy więc upewnić się, że dostosowujemy się do tego, używając czegoś, co nazywa się Delta Time.
‫Więc co to za tajemniczy czas Delta?
‫Cóż, powiedzmy, że mamy tutaj tę oś czasu, która zaczyna się od 0 sekund i rośnie wraz z upływem czasu.
‫Teraz, gdy czas mijał, oznacza to, że wywoływana jest funkcja tiku.
‫Zauważ jednak, że funkcja kleszcza nie jest zbyt spójna.
‫Czasami nazywa się to bardzo szybko, a czasami rzadziej.
‫Dzieje się tak, ponieważ komputer musi wykonywać obliczenia klatka po klatce, a czasami te
‫obliczenia zajmują więcej zasobów z komputera, co może spowolnić naszą szybkość odtwarzania.
‫Teraz ta zmienna czasu delta, którą mamy w funkcji tiku, to ilość czasu, który upłynął
‫od ostatniej klatki.
‫Więc tutaj może być 0. 1 sekunda.
‫To naprawdę zależy od użycia procesora i tego, jak to się zmienia.
‫Ponieważ wykorzystanie procesora jest różne, czas delta również będzie się różnić.
‫A to oznacza, że gdy mamy więcej klatek na sekundę, mamy więcej wywołań funkcji.
‫Teraz, jeśli częściej będziemy wywoływać dodanie lokalnego przesunięcia aktora, zobaczymy, jak nasz staw porusza się szybciej i
‫nie będzie miał stałego tempa ruchu.
‫Rozwiązaniem jest więc skalowanie ruchu według czasu delta.
‫Więc jeśli czas delta wynosi 0. 1 i chcemy przesunąć nasz staw o, powiedzmy,
‫dziesięć centymetrów na sekundę, skalując ten ruch o 0. 1 sekunda daje nam dokładną ilość ruchu, jakiej potrzebujemy, aby czas aktualizacji klatki
‫wynosił 0. 1 sekunda.
‫Rozważmy teraz tę część, w której mamy mniejszy czas delta, co oznacza, że TIC jest wywoływane
‫częściej.
‫Załóżmy, że czas delta wynosi tutaj 0. 0 1 sekundy.
‫Więc TIC jest tu wywoływane dziesięć razy częściej.
‫Cóż, moglibyśmy po prostu przeskalować nasz ruch o 0. 01 dla tej konkretnej ramy, w ten sposób przesuniemy nasz staw
‫o dziesięć centymetrów na sekundę razy, 0. 0 1 sekundy.
‫Dlatego przesuwamy staw trochę, ponieważ TIC jest wywoływane znacznie częściej.
‫Dzięki temu nasz staw będzie się poruszał w sposób spójny, niezależnie od zmian liczby klatek na
‫sekundę.
‫Wracając więc do kodu VSE, zastanówmy się, jak lubimy zająć się tym problemem.
‫Mamy wektor położenia delta i ustawiamy jego x równe wartości, ale wiemy, że chcielibyśmy przeskalować
‫wartość według czasu delta.
‫Zamierzam więc umieścić tutaj mały komentarz i powiem, że X równa się czasom wartości, czas delta, co oznacza, że chcielibyśmy przeskalować
‫wartość według czasu delta.
‫Teraz, gdy to zrobimy, sprawimy, że wartość będzie bardzo mała, ponieważ sam czas delta jest bardzo małą wartością,
‫zwłaszcza jeśli twoja liczba klatek na sekundę jest bardzo wysoka.
‫Więc będziemy też musieli przeskalować to przez coś.
‫Inny rodzaj zmiennej prędkości i możemy zdecydować, jaka powinna być ta wartość, aby kontrolować
‫prędkość czołgów.
‫Mamy więc trochę pseudokodu, który nas poprowadzi, a teraz musimy to zaimplementować, tworząc wartość
‫szybkości i dowiedzieć się, jak możemy uzyskać tę wartość czasu delta.
‫Porozmawiajmy więc o tym, jak możemy uzyskać dostęp do czasu delta z funkcji przenoszenia.
‫Teraz Unreal Engine ma wiele sposobów na kontrolowanie czasu Delta.
‫W rzeczywistości, jeśli spojrzysz na funkcję tikową, którą mamy w oparciu o Delta, czas jest parametrem wejściowym zmiennoprzecinkowym.
‫Jeśli więc pracujemy w funkcji tiku, mamy już dostęp do czasu Delta, ale w zbiorniku DHCP
‫nasza funkcja move nie ma tego parametru wejściowego, ale nierealny silnik ma swoje sposoby.
‫Jednym ze sposobów jest dostęp do funkcji o nazwie get world delta seconds, która istnieje w klasie o nazwie U
‫statystyki rozgrywki.
‫Jak sama nazwa wskazuje, statyka rozgrywki ma wiele funkcji statycznych, które pomagają w programowaniu rozgrywki.
‫Get World Delta sekund zwraca czas delta.
‫Teraz ma parametr wejściowy.
‫Tutaj przyjmuje obiekt kontekstu światowego.
‫Często zobaczysz to w Unreal Engine.
‫Wiele funkcji statycznych będzie wymagało obiektu kontekstu świata.
‫Świat jest obiektem typu ty świat.
‫To obiekt najwyższego poziomu w naszej grze.
‫Reprezentuje naszą mapę, która zawiera wszystkie powiązane obiekty w naszej grze.
‫Teraz statyczne funkcje, takie jak pobieranie sekund delta świata, nie mają pojęcia, w jakim świecie się znajdujemy.
‫Musimy powiedzieć tej funkcji, w jakim świecie się znajdujemy, aby mogła uzyskać dostęp do tego świata i uzyskać wartość
‫czasu delta.
‫Teraz, aby powiedzieć, w jakim świecie się znajdujemy, możemy przekazać wskaźnik do obiektu, który istnieje w tym
‫świecie.
‫Podczas gdy pracujemy w klasie czołgów, możemy przekazać słowo kluczowe to.
‫Jest to słowo klucz, którego możemy użyć wewnątrz dowolnej klasy w C++.
‫To słowo kluczowe jest wskaźnikiem do wystąpienia dowolnego konkretnego obiektu, nad którym pracujemy.
‫Więc jeśli pracujemy w klasie czołgów, jest to wskaźnik do czołgu, w którym się znajdujemy.
‫Tak więc funkcje, które wymagają obiektu kontekstu świata, często mogą otrzymać to jako parametr wejściowy, ponieważ zbiornik,
‫w którym pracujemy, istnieje we właściwym świecie.
‫Więc uzyskaj deltę świata w sekundach, będzie wiedział, w którym świecie się znajduje, i może pobrać nam odpowiednią deltę.
‫Czas na ten świat.
‫Więc jeśli wywołamy polecenie get world delta sekund z klasy -- , przekażemy to
‫jako obiekt kontekstu świata.
‫Masz teraz wszystkie narzędzia potrzebne do kontrolowania prędkości czołgów.
‫Więc to, co zamierzasz zrobić, to utworzyć zmienną prędkości, sprawić, że będzie to pływak i umieścić w
‫prywatnej sekcji w klasie czołgów.
‫Teraz udostępnij to projektom, abyśmy mogli dostosować go w trakcie opracowywania, co
‫oznacza, że nadasz mu swoją właściwość i użyjesz odpowiednich specyfikatorów właściwości, które odpowiadają
‫pożądanemu poziomowi ekspozycji.
‫Teraz w funkcji MOV mamy ten fragment pseudokodu, który umieściliśmy jako komentarz.
‫Więc użyj tego jako przewodnika.
‫Weźmiesz lokalizację delta, wektor F i skalę.
‫To X według czasu delta.
‫Właśnie widzieliśmy, jak możemy uzyskać dostęp do czasu delta za pomocą statystyk gry U.
‫I zamierzasz również skalować X przez zmienną prędkości.
‫Teraz, ponieważ używamy funkcji w statystykach rozgrywki, będziesz musiał dołączyć plik nagłówkowy
‫dla statystyk rozgrywki.
‫Teraz wielokrotnie pokazywałem, jak znajduję include dla konkretnej klasy, korzystając z dokumentacji
‫Unreal Engine.
‫Dlatego rzucę Ci wyzwanie, abyś poszukał statystyk swojej rozgrywki w dokumentacji Unreal Engine i
‫znalazł ten plik nagłówkowy.
‫A jeśli nie możesz go znaleźć, po prostu znajdź link w zasobach tego filmu,
‫który zawiera dokumentację statystyczną rozgrywki, ale spróbuj znaleźć go samodzielnie.
‫Najpierw zatrzymaj wideo i kontroluj teraz prędkość czołgu.
‫Dobra.
‫Mam więc swój pseudokod, który mnie poprowadzi i muszę skalować wartość według czasu delta i prędkości.
‫Więc najpierw stworzę zmienną prędkości.
‫Teraz z powrotem w zbiorniku godz.
‫Tutaj mogę umieścić zmienną prędkości.
‫Jednakże, jeśli pamiętasz ćwiczenia z wcześniejszego wykładu, dodałem do zajęć Base Pond pływak o
‫nazwie Speed.
‫Teraz nie potrzebuję zmiennej prędkości w stawie podstawowym.
‫To była tylko praktyka, więc tak naprawdę nie potrzebuję tego tutaj.
‫W rzeczywistości nie potrzebuję tych pozostałych 30 dwójek, które stworzyłem, aby zademonstrować, że są specyfikatorami właściwości.
‫Więc po prostu zaznaczę je wszystkie i usunę z podstawowej klasy stawu.
‫Już ich nie chcę.
‫Więc odeszli.
‫Teraz możesz również pamiętać, że odniosłem się do tej zmiennej prędkości w schemacie zbiornika stawu.
‫Więc zamierzam otworzyć zbiornik stawu BP.
‫A tutaj, na wykresie zdarzeń, jest ta zmienna prędkości, do której się odniosłem.
‫Ponieważ już tego nie potrzebuję, zamierzam usunąć te węzły, skompilować i zapisać mój
‫zbiornik stawowy BP.
‫Dobra.
‫Po oczyszczeniu tego wszystkiego wracam do zbiornika, aby dodać zmienną prędkości.
‫I to będzie w sekcji prywatnej tutaj.
‫Dodam to tuż nad funkcją move i będzie to liczba zmiennoprzecinkowa o nazwie speed.
‫Teraz podam tutaj wartość początkową.
‫Myślę, że wypróbuję 200 F i zobaczę, jak to działa.
‫Ale ponieważ chciałbym móc edytować to w edytorze w miarę rozwoju, otrzymam nowe makro
‫właściwości i chciałbym móc edytować to w instancjach i domyślnie.
‫Więc zamierzam go edytować w dowolnym miejscu.
‫Nie musiałeś tego robić, ale nadaję temu kategorię.
‫Stworzę nową kategorię o nazwie ruch.
‫Teraz wystawienie go na wykres zdarzeń jest opcjonalne.
‫Powstrzymam się z tym, ponieważ nie sądzę, abym potrzebował dostępu do tego na wykresie zdarzeń.
‫Jeśli będę musiał.
‫W przyszłości mogę udostępnić go za pomocą planu, odczytu, zapisu lub planu tylko do odczytu i użyj tego
‫meta, aby określić prywatny dostęp.
‫Ale na razie nie zamierzam.
‫Więc mam zmienną prędkości i tutaj w zbiorniku DHCP, wezmę wartość i przeskaluję ją według prędkości.
‫Teraz ostatnią rzeczą do zrobienia jest skalowanie wartości według czasu delta, co oznacza, że potrzebuję statystyki rozgrywki.
‫Oto dokumentacja Unreal Engine.
‫Zamierzam iść dalej i poszukać statystyki rozgrywki, a oto statystyki rozgrywki gry.
‫Więc muszę tylko przewinąć w dół do linii dołączania i skopiować to iz powrotem do czołgu CP.
‫Mogę to wkleić.
‫Teraz, gdy mam dostęp do nowych statystyk rozgrywki, mogę uzyskać czas Delta, więc mam zamiar pomnożyć przez ciebie.
‫Statystyka rozgrywki ma delta sekund świata i jak widzieliśmy, wymaga to obiektu kontekstu świata.
‫Możesz nawet zobaczyć w wyskakującym okienku, że prosi o obiekt kontekstu światowego.
‫Więc zamierzam to przekazać.
‫Więc teraz, kiedy ustawiam lokalizacje Delta X na wartości czasów, prędkości, czasów, czasu delta, zamierzam to
‫skompilować.
‫Mamy więc udaną kompilację.
‫Wracając do edytora, mogę wejść do BP Pond Tank i tam jest moja prędkość.
‫A jeśli wybiorę instancję czołgu na świecie, mogę wyszukać w panelu szczegółów ruchu i tam jest
‫prędkość i mogę ją ustawić na dowolną wartość.
‫Jeśli podkręcę i wcisnę odtwarzanie, poruszam się trochę szybciej.
‫Jest to więc zaleta wystawiania zmiennej na plany.
‫Mogę poeksperymentować i znaleźć dobrą prędkość, która będzie dla mnie odpowiednia.
‫W porządku, więc wygląda świetnie.
‫Przejdę dalej i przestanę teraz pokazywać FPSO.
‫A teraz mamy zmienną prędkości i możemy ją zmienić.
‫I ta zmiana znajdzie odzwierciedlenie w ruchu mojego pionka.
‫Więc teraz kontrolujemy prędkość ruchu naszego czołgu i mamy niezłą zmienną prędkości, którą wystawiamy na
‫działanie planów i możemy ją ustawić, gdy rozwijamy eksperyment z jej wartością.
‫Dowiedzieliśmy się również o czasie Delta i dlaczego ważne jest skalowanie naszego ruchu według czasu Delta.
‫Jest więc niezależny od liczby klatek na sekundę, ponieważ zmiany liczby klatek na sekundę będą nadal zapewniać płynny, spójny ruch z
‫naszym czołgiem.
‫Więc patrząc wstecz na nasz plan sekcji, prawie skończyliśmy z naszym pierwszym podpunktem.
‫Stworzyliśmy czołg, który może poruszać się po całym świecie.
‫Naszym drugim punktem jest obsługa danych wejściowych za pomocą klawiszy WASD i myszy.
‫Mamy opuszczoną część W i SW, ale nadal musimy być w stanie używać klawiszy A i D i
‫użyjemy ich do obracania czołgiem.
‫Dlatego robimy duże postępy w nadchodzących filmach.
‫Będziemy pracować nad dokończeniem naszej umiejętności poruszania czołgiem.
‫Zobaczymy się wkrótce.