Planuję opracowanie gry w Unity3D i staram się pogodzić z tym, co silnik już dostarczył, i tym, co sam muszę kodować.
Sama gra będzie grą rytmiczną, co oznacza synchronizowanie zdarzeń dźwiękowych i graficznych, aby zawsze grały, kiedy powinny. To, czego chcę uniknąć, to potencjalny scenariusz opóźnienia, w którym dźwięk lub grafika zaczynają się rozwijać szybciej niż inne.
Kiedy omawialiśmy ten rodzaj układu koordynacyjnego w mojej klasie projektowania gier na uniwersytecie, mój profesor nazwał ten typ projektu klasą „Oś czasu”. Chodzi o to, że możesz utworzyć jedną lub więcej z nich, aby robić postępy w różnym tempie, planować różne rzeczy w przyszłości i synchronizować okresowe zdarzenia. Jednak nazywanie tego „klasą osi czasu” wydaje się ograniczać do samego mojego profesora, ponieważ szukanie informacji o tym, czy niektóre funkcje API mają funkcję „osi czasu”, było bezowocnym przedsięwzięciem.
Czy jest jakaś bardziej popularna nazwa tego rodzaju funkcjonalności? Czy Unity ma jakieś wcześniej istniejące metody koordynowania planowania takich wydarzeń, czy też jest to coś, co należy wbudować w silnik? A jeśli tak, byłbym wdzięczny za wskazanie kilku samouczków!
źródło
Odpowiedzi:
Chociaż ta funkcja nie jest dostępna w Unity, podstawowa implementacja takiej osi czasu nie powinna być zbyt trudna do wykonania.
Oto jak bym to zrobił:
timeline.AddEvent(0.25f, MyCallback)
.Za każdym razem
Update
klasa osi czasu:float
) o upływ czasuJeśli potrzebujesz funkcji przewijania do tyłu lub odtwarzania , oczywiście głupio byłoby usunąć wszystkie zdarzenia z kolejki (co oznacza, że musiałbyś je dodać ponownie podczas przewijania). Zamiast tego możesz również użyć tablicy, która przechowuje twoje zdarzenia . Wydarzenie składałoby się z
Time
iCallback
. Musisz posortować tablicę wedługTime
.Następnie zamiast usuwać elementy z tablicy, będziesz śledzić bieżący indeks tablicy , a przy każdej aktualizacji szukaj dalej tego indeksu i wykonuj wszystkie wywołania zwrotne,
Playhead >= Time
jednocześnie odpowiednio zwiększając indeks.Wdrożenie większej prędkości odtwarzania działa z obiema implementacjami i byłoby tak proste, jak:
źródło
Nie, Unity3D nie ma takiego interfejsu API od razu po wyjęciu z pudełka.
Obsługuje jednak coroutines i sugeruję, abyś je zbadał. Korpusy ogólnie ułatwiają planowanie i synchronizowanie wydarzeń.
źródło
Nie jestem pewien, czy jest to nowe od czasu odpowiedzi w 2012 r., Ale Unity faktycznie obsługuje kontrolę osi czasu za pośrednictwem (Legacy) edytora animacji .
Chociaż ta funkcja jest przeznaczona głównie do animowania parametrów obiektu za pomocą krzywych, obejmuje ona możliwość wyzwalania skryptów w zdarzeniach animacji . Te skrypty mogą sterować twoją grafiką i dźwiękiem.
źródło