Jak mogę wdrożyć funkcję szybkiego przewijania do mojej gry tower defense, takiej jak w http://fieldrunners.com/ i innych grach TD?
Używam Unity 3D. Czy byłoby coś do zarządzania mniejszą liczbą klatek na sekundę lub jakiś ręcznie ustawiony szybki ruch wrogów i prędkość strzelania z wieży, itd.?
unity
tower-defense
timing
Syed
źródło
źródło
Odpowiedzi:
jeśli twoja gra nie ma skomplikowanych lub kosztownych obliczeniowo symulacji, które wymagają rozdzielenia ich na niezależne ramy czasowe aktualizacji, możesz zastosować proste podejście polegające na oparciu kodu w swoich
Update()
funkcjach na wartości Time.time Unity, a w kodzie ustaw wartość Time .timeSkaluj, aby być tym, czego chcesz. 0 == wstrzymane, 1 = normalne, nasi testerzy uwielbiają ustawiać Skalę czasu> 1, aby szybciej wykonywać zadania.http://unity3d.com/support/documentation/ScriptReference/Time-timeScale.html
źródło
Podejście: wyższy wskaźnik symulacji
Twoje wyczucie interfejsu użytkownika powinno być oddzielone od rzeczywistej pętli gry, podobnie jak renderowanie. Powiedz na przykład, że twój świat biegnie z prędkością 4x. Powiedzmy, że przy podstawowej (1x) prędkości Twoja gra uruchamia 30 aktualizacji na sekundę.
W trybie szybkiego przewijania będziesz mieć coś takiego:
Innymi słowy, gra jako całość nie działa szybciej. Część symulacyjna jest.
Możesz z tego wywnioskować dwie rzeczy:
Musisz utrzymać logikę gry na tyle prostą, abyś mógł ją z łatwością uruchomić cztery razy szybciej na docelowej platformie, LUB musisz wprowadzić metody szybszej ekstrapolacji różnych aspektów gry - może to jednak skutkować modelem, który jest różni się od tego, co by było, gdybyś po prostu użył szybszej symulacji. Zatem kompromisem będzie koszt przetwarzania dla dokładności. Zobacz podejście 2 poniżej.
To oddzielenie problemów pozwala z łatwością przyspieszyć symulację świata, przy czym separacją jest model, widok i kontroler ( MVC ). Jeśli twoje dane świata (M), logika renderowania (V) i logika gry (C) są pomieszane, naprawdę nie będziesz w stanie tego zrobić, przynajmniej nie bez ogromnej migreny.
Podejście: ekstrapolacja oparta na delcie czasowej
Jak wspomniano powyżej, musisz obliczyć ruch na podstawie tego, jak daleko coś by przebyło w danym czasie. Zakłada się jednak, że fizyka gry jest z natury bardziej realistyczna w symulacji, co może nie być prawdą. Jest to raczej większy temat i znacznie bardziej złożony. Musisz zadać więcej pytań, jeśli chcesz wiedzieć. Zasadniczo będziesz robić rachunek różniczkowy, aby wszystko było dobrze. Będziesz musiał poradzić sobie z przenikaniem się kolizji i wieloma innymi zagadnieniami, o których tu nie będę mówić.
Podsumowując
To daje ogólny zarys. Twój wybór języka należy do ciebie, prawdopodobnie albo wiesz, jak to zrobić w Unity, albo nie. Czas w każdym języku wymaga szczegółowego zrozumienia tajników, sugeruję zacząć od artykułów Gaffera i przejrzeć dokumenty Unity API.
źródło
Zgodnie z ogólną zasadą aktualizacja logiki gry powinna być oddzielona od aktualizacji grafiki gry - to znaczy symulacja rozgrywki, sztuczna inteligencja, ruch jednostek itp. Nie powinny być powiązane z prędkością renderowania gry . Zwykle główna pętla gry oblicza, ile czasu rzeczywistego upłynęło od ostatniej aktualizacji gry, i przesyła ten krok czasu delta do procedur aktualizacji każdego pojedynczego obiektu logiki gry.
W takim scenariuszu łatwo jest wdrożyć skalowanie czasu (w tym szybkie przewijanie do przodu) w grze. Po prostu przedwcześnie zastosuj krok logiki gry o pewną wartość skalarną, która kontroluje, ile czasu można „przyspieszyć” lub spowolnić. Domyślnie ta wartość będzie wynosić jeden, a na przykład, gdy użytkownik naciśnie klawisz „przewijanie do przodu”, ustawisz go na 1,5, a cała symulacja będzie wydawać się szybsza o 50%. Jednak nadal renderowałbyś w tym samym tempie.
Nie jestem zbyt obeznany z Unity i dlatego może się mylić w poniższej sugestii, ale Unity ma komponent zarządzania czasem, który może być przydatny do wdrożenia tego. W rzeczywistości ma już właściwość czasu. Opis komponentu sugeruje, że klasa została zaprojektowana dla obiektów fizycznych, ale może mieć również zastosowanie do twojego scenariusza.
źródło