Pracuję nad bardzo prostą przewijaniem pionowym dla Unity iOS. W mojej grze występują niespójne drgania. Przeszukałem internet w poszukiwaniu rozwiązania bez żadnego szczęścia. Używam wersji Unity 5.3.4 f1.Niespójny jitter w grze na iOS
The Game
- Postać spada. Używamy kontrolera znaków Unity do przesuwania znaku w mnożeniu
Update()
(Time.deltaTime
). - Kamera podąża za postacią w
LateUpdate()
(za pomocąVector3.Lerp()
do naśladowania). - Ponieważ postać porusza się w dół, przeszkody wydają się przesuwać w górę ekranu.
- W scenie jest 1 światło kierunkowe, ustawienie cienia w czasie rzeczywistym. Jakość cieni to wysokie i twarde cienie.
- Na scenie nie ma sztywnych ciał. I nie ma większych skoków w profilerze.
- Mamy bardzo prostą geometrię i bardzo mało połączeń wywołań/zestawów połączeń wychodzących (średnio 7 zestawów połączeń).
- Mamy stałe 60 fps.
- Ponieważ pracujemy na iOS, vSync jest domyślnie włączony i nie można go wyłączyć.
problem
- elementów tła/przeszkody (drzewa, skały itp) zaczynają drgania bez wyraźnego powodu. Zachowanie jest niespójne, czasami drży, a czasami nie.
- Nawet gdy nie występuje drgania, pojawia się małe zacinanie, gdy użytkownik podaje dane za pośrednictwem dotyku.
Co staraliśmy
- Próbowaliśmy wszystkie kombinacje
Update()
,LateUpdate()
,FixedUpdate()
,Time.deltaTime
Time.smoothDeltaTime
, Lerp, zmniejszając sceny do kilku kostek i wyprowadzenie wszystkich collidery i wyzwala. - Przebadaliśmy już następujące wątki: Link1, Link2, Link3 oraz niezliczone inne wątki.
- Początkowo nasza gra działała z domyślnym 30 fps. Ale po kilku badaniach wydawało się, że nasz problem wynika z różnicy między "Szybkością klatek" a "Szybkością odświeżania ekranu". (aby zrozumieć ten problem, zobacz następujący LINK). Ponieważ urządzenia z systemem iOS mają częstotliwość odświeżania 60 Hz, ustawiliśmy docelową liczbę klatek na 60, a nasza gra utrzymuje stałą 60 fps.
- Po ustawieniu docelowej liczby klatek na 60, jitter się poprawił, ale teraz jest niespójny.
Nie mam pomysłów. Każda pomoc lub wskaźnik będą bardzo cenne.
Z góry dziękuję.
Ile świateł czasu rzeczywistego znajduje się na scenie i czy możesz podzielić się kodem ruchu kamery? –
Brat Chussu. Jest tylko jedno kierunkowe Światło. I używam 'Vector3.Lerp()', aby przesunąć kamerę. Przetestowałem ruch kamery i to nie jest problem. Zaktualizuję też post i dodam w nim tę informację. –
Witamy w StackOverflow! byłby bardziej przydatny, jeśli zaktualizujesz pytanie, dodając ** trochę kodu **. A jeśli jeszcze go nie czytałeś, [Dokumenty] (https://docs.unity3d.com/ScriptReference/Application-targetFrameRate.html) mówią tak: ** Pamiętaj, że ustawienie targetFrameRate nie gwarantuje tej szybkości klatek. Mogą występować wahania ze względu na specyfikę platformy lub gra może nie osiągnąć liczby klatek na sekundę, ponieważ komputer jest zbyt wolny. ** Plus, chciałbyś udostępnić zrzut ekranu Profiler z włączonym profilem __deep i bez ograniczania targetfps. –