Wpis z mikrobloga

Mam w Unity zwykłe przepisanie pozycji a obiekt i tak porusza się z opóźnieniem:

public class copyPosition : MonoBehaviour
{

public Transform cube;
public Transform ball;

void FixedUpdate()
{
cube.position=ball.position;
}

void OnDrawGizmos()
{
Gizmos.DrawCube(cube.position,1f);
Gizmos.DrawSphere(ball.position,1f);
}
}

Da się to jakoś skorygować żeby w FixedUpdate działało? Bo jak pomieszam Update z FixedUpdate to potem na innych etapach rzeczy będą się glitchować. W sumie to opóźnienie jest też pewnie w Update ale jest tak małe że go nie widać
#unity3d #csharp
  • 5
via Wykop Mobilny (Android)
  • 2
@jacku: bo fixed masz stała ilość na sekundę, domyślnie 50 a rendering się zmienia. Ja bym przepisywał pozycję w LateUpdate bo to zaraz przed wyrenderowaniem, moment w którym masz już wszystko uaktualnione i napisujesz np pozycję animowanych obiektów
@jacku: FixedUpdate jest do korzystania z fizyki - czyli nadawanie prędkości czy rotacji obiektom typu Rigidbody itp. Ty nie masz fizyki tylko bruteforcem teleportujesz obiekt co odświeżenie FixedUpdate.

FixedUpdate wykonuje sie niezależnie od renderowania. Rzadziej, częściej zależy jak ustawisz.
Update wykonuje się co klatkę.

Twój sposób będzie wyglądał płynnie jeśli będziesz go robił co render klatki czyli w Update. Jeśli chcesz korzystać z FixedUpdate korzystaj z fizyki silnika.
@MostlyRenegade: @zibizz1: @draculeq:
Idealnie zatem byłoby ustawić fizykę na 50 fps i grę na 50 fps wtedy mamy zdarzenie co klatkę. Tylko pytanie czy te zegary idą synchronicznie? Chyba nie bo np. dla odczytu buttonów przydałoby się 200 fps i jak ustawię w skrypcie buttonów FixedUpdate na 50 fps to niektóre nie zdążą być zarejestrowane ale jak ustawię Update na 15 fps to gra skacze ale odczyt przycisków jest
via Wykop Mobilny (Android)
  • 2
@jacku: targetFramerate to tylko do oszczędzania energii. Te updaty są osobno przeliczane i nie da się tego zsynchronizować.
Jeśli np zwalniasz czas w grze (timescale) to nadal klatek fizycznych masz 50/ sekundę symulacji a rendering masz ok targetFramerate na realna sekundę. Żeby obiekty z fizyką ci nie skakały w zwolnionym tempie to np ustawiasz na rigidbody pozycję interpolowana wtedy obiekty będą przesuwane pomiędzy klatkami fizycznymi w klatkach renderowania.