Znalazłem więc problem w grze, nad którą pracuję, ale wydaje się, że jest to dość fundamentalna rzecz, która prawdopodobnie pojawia się w wielu grach.
Moja gra wymaga, aby niektóre funkcje gry występowały w bardzo konkretnym momencie podczas animacji postaci. Tak więc, jak mówi tytuł, zastanawiam się, jakie są dobre techniki i podstawowe strategie synchronizacji wydarzeń / funkcji / akcji związanych z rozgrywką do określonych punktów w animacji postaci.
Oto kilka prostych przykładów tego, o czym mówię w różnych typach gier:
Twoja postać przeładowuje broń w strzelance . Twoja postać odtwarza swoją animację „przeładowania”, ale ważne jest, aby funkcja, która ustawia zmienną currentAmmo, była wywoływana tylko w tym samym momencie, kiedy magazynek został zamieniony, a pistolet wystrzelił. Może to być punkt w środku animacji przeładowania.
W turowej grze RPG twoje postacie stoją w szeregu naprzeciw linii wrogów. Po otrzymaniu rozkazu ataku jedna z twoich postaci biegnie / podskakuje na jednego z wrogów i tnie gigantyczny miecz, po czym biegnie / skacze z powrotem na swoje miejsce. Chcesz się upewnić, że wróg zostanie uszkodzony w tym samym momencie, w którym odtwarzana jest animacja cięcia - w pewnym momencie między podbiegiem a powrotem.
W grze typu stealth Twoja postać może podkraść się i wchodzić w interakcje z komputerami i przyciskami na całym świecie. Może jest przycisk, który wyłącza zasilanie świateł placówki, którą infiltrujesz. Kiedy przycisk akcji jest wciśnięty, twoja postać wyciąga rękę i naciska przycisk, a następnie powraca do swojej bezczynności. Chcesz, aby światła wyłączały się dokładnie w punkcie animacji „push_button”, gdy przycisk jest wciśnięty.
Trzeba przyznać, że mój szczególny przypadek jest najbardziej podobny do drugiego przykładu , w którym stworzyłem animację, w której moja postać turowa rzuca się do przodu podczas ataku i chcę, aby obrażenia zostały zastosowane dokładnie w momencie, w którym animacja wydaje się nawiązać kontakt. . Ponieważ moja gra wykorzystuje system turowy (wyobraź sobie coś takiego jak Final Fantasy lub Fire Emblem) chcę obrażeń / leczenia / magii / itp. do zastosowania we właściwym czasie podczas animacji każdej postaci, mimo że tak naprawdę nie używam kolizji / hitboxów.
Należy wspomnieć, że robię moją grę w popularnym silniku gry, a teraz jestem obsługi to za pomocą swoich animacji zdarzenia lub notyfikuje osiągnąć coś zbliżone do pożądanych rezultatów - moje wykonuje charakter pewnego polecenia i wyzwala animacja specyficzna dla komendy (tj. „polecenie_ataku”) i zasoby animacji dla każdego z moich poleceń muszą zawierać zdarzenie animacji / powiadomić „wywołanie zwrotne” w funkcji ExecuteCommand moich postaci. Innymi słowy - postać nakazuje odtworzenie animacji ataku, a następnie animacja ataku emituje zdarzenie / powiadamia oddzwonienie do postaci dokładnie w momencie animacji, kiedy należy zadać obrażenia.
Szczerze mówiąc, na razie to działa, ale wydaje mi się, że jest źle - jakby brakowało mi tutaj części większego obrazu! Jednym z powodów, dla których ta metoda wydaje się niewłaściwa, jest połączenie logiki gry z zasobami animacji; jeśli mój zasób animacji zapomni o dołączeniu zdarzenia / wywołania zwrotnego ExecuteCommand (), polecenie nie wykona się poprawnie i potrzebny jest dodatkowy kod, aby sprawdzić, czy animacja polecenia zakończyła się bez wykonania polecenia. Jest bałagan i oznacza, że moja gra ma dziwną zależność od swoich zasobów. Oczywiście chcę, aby obrażenia wystąpiły w określonym momencie podczas animacji ataku, ale czuję się naprawdę dziwnie, nazywając kod gry wewnątrz zasobów animacji.
Więc co tu przeoczę? Jakie są dobre ogólne techniki radzenia sobie z tego rodzaju sytuacjami, w których chcesz, aby pewne ważne działania rozgrywki miały miejsce w określonych momentach podczas animacji?
Edycja: Aby wyjaśnić, nie jest to pytanie specyficzne dla silnika, ani nie szukam projektów / technik specyficznych dla silnika. Interesują mnie ogólne techniki synchronizacji animacji / rozgrywki, które można wykorzystać w projektach gier niezależnie od zastosowanych technologii.