Zdarzenie Tick oraz Akcje typu Latent w Blueprints

Unreal Engine 4 posiada zdarzenie o nazwie „Tick”, które jest generowane w każdej klatce gry. Na przykład w grze działającej z szybkością 60 klatek na sekundę zdarzenie „Tick” jest generowane 60 razy na sekundę.

Zdarzenie „Tick” dostarcza wartość znaną jako „Delta Seconds”, czyli czas, który upłynął od ostatniej klatki. Używając Eventu „Tick” możemy mieć precyzyjną kontrolę nad ruchem Planu w grze.

Aby zilustrować użycie zdarzenia „Tick”, stwórzmy prosty przykład, który przesuwa aktora wzdłuż osi X. Prędkość ruchu jest przechowywana w zmiennej typu float o nazwie „SpeedX”. Domyślna wartość, której używam dla tej zmiennej, to 100, czyli prędkość 100 centymetrów na sekundę, ponieważ w Unreal Engine 4 jedna jednostka Unreal jest równa jednemu centymetrowi. (1 jednostka = 1 cm)

Przykład:

Akcja „ Dodaj przesunięcie świata aktora ” zmienia położenie aktora na podstawie wartości parametru wejściowego o nazwie „Lokalizacja delta”, który jest wektorem zawierającym wartości pozycji na osiach X, Y i Z. W tym przykładzie chcemy zmodyfikować tylko oś X, więc wartości osi Y i Z wynoszą zero. Musimy pomnożyć wartość „Delta Seconds” przez prędkość znajdującą się w zmiennej „SpeedX”, aby znaleźć wartość równoważną małemu krokowi, który aktor musi przesunąć w osi X dla każdej klatki. Aby lepiej zrozumieć te obliczenia, zróbmy symulację, zakładając, że gra działa z prędkością 50 klatek na sekundę. Aby obliczyć wartość „Delta Seconds”, wystarczy podzielić 1 sekundę przez liczbę klatek: Delta Seconds = 1 s / 50 

Delta Seconds = 0,020 sek. ( Odpowiednik 20 milisekund )
Teraz, aby znaleźć wartość X, którą aktor będzie przesuwał w każdej klatce, po prostu pomnóż wartość „Delta Seconds” przez wartość „SpeedX”:

X = Speed X * Delta secondX = 100 cm / sec. * 0,020 secX = 2 cm
Średnio aktor przesunie się o 2 cm na każdą klatkę w tej symulacji.

Unreal Engine 4 ma typ akcji znany jako Latent . Utajone akcje działają równolegle z normalnym przepływem skryptu Planu. Tak więc zakończenie akcji ukrytej może nastąpić kilka klatek po jej rozpoczęciu. Najprostszą i najpowszechniejszą Akcją Latentną jest funkcja „Opóźnienie”, która wykonuje akcje podłączone do pinu „Zakończone” dopiero po upływie czasu zawartego w parametrze „Czas trwania”. Poniższy obraz przedstawia akcję „Opóźnienie” wraz z krótkim opisem:

Innym przykładem działania ukrytego jest „Timeline”, która będzie tematem następnego artykułu.

Aby zilustrować użycie funkcji „Delay”, stworzymy skrypt, który w prosty sposób oblicza liczbę klatek na sekundę w grze.

Na początek utwórz nowy plan zawierający trzy zmienne całkowite, które znajdują się na poniższym obrazku. Wszystkie z nich są oznaczone jako „edytowalne”, co ułatwia przeglądanie ich wartości w edytorze. Utworzyłem kategorię o nazwie „FPS”, aby pogrupować te zmienne.

Skrypt wykorzystuje zdarzenie „Tick” wraz z funkcją „Delay”. Zmienna „Klatki” zlicza liczbę klatek, które zostały już wyrenderowane. Używamy funkcji „Opóźnienie”, aby obliczyć liczbę klatek na sekundę co 5 sekund.

Obliczenie opiera się na odjęciu między zmiennymi „Ramki” i „Punkt kontrolny”, które reprezentują liczbę ramek, które minęły w ciągu 5 sekund. Ten wynik jest dzielony przez 5, aby znaleźć średnią liczbę klatek na sekundę. Następnie przechowujemy bieżącą wartość zmiennej „Frames” w zmiennej „Checkpoint”, która posłuży jako odniesienie dla następnych obliczeń. Oto scenariusz wydarzenia „Tick”:

Po uruchomieniu tego skryptu widzimy, że przepływ wykonania nie przechodzi przez funkcję „Opóźnienie”, dopóki nie zakończy wewnętrznego zliczania wyświetlanego w edytorze:

Poniższy obraz pokazuje niektóre wartości zmiennych podczas wykonywania mojego przykładu, który obliczał średnio 32 klatki na sekundę.

Ze względu na równoległą funkcję ukrytych akcji, nie można ich używać w ramach funkcji schematu. Poniższy obraz przedstawia błąd kompilacji generowany podczas próby użycia ukrytej akcji w funkcji, którą utworzyłem o nazwie „Test Latent”.


Źródło:https://romeroblueprints.blogspot.com/2014/12/tick-event-and-latent-actions-in.html