Obecnie pracuję nad systemem orbity do gry. Mam to, aby obiekt poruszy się wzdłuż okręgu na podstawie wartości postępu, która będzie między 0,0 a 1,0 (0,5 w połowie drogi wokół okręgu). Obliczam to w ten sposób:

float angle = Mathf.Deg2Rad * 360 * t;
float xPos = Mathf.Sin(angle) * xAxis;
float yPos = Mathf.Cos(angle) * yAxis;

return new Vector3(xPos, yPos, 0.0f);

Z T po prostu bycie Deltatime i Xaxis / Yaxis zmienne są promieniem okręgu. Obecnie jestem trochę utknięty, ale jak mógłbym uzyskać postęp wokół kręgu na podstawie popieki. Więc jeśli mam obiekt, który uderza w dół okręgu, jak mogę obliczyć, że jest postępem 0,5?

1
codelyoko373 14 styczeń 2020, 21:26

1 odpowiedź

Najlepsza odpowiedź

Pierwszy krok: Sprawdź kąt określonej pozycji za pomocą osi Y.

Drugi krok: Oblicz frakcję pełnego okręgu (360 ° C), że twój kąt ma.

Pierwszy krok obejmuje trochę trygonometrii, a musisz upewnić się, że otrzymasz odpowiedni rodzaj kąta na podstawie tego, w jakim kwadrancie, w którym jesteś. Drugi krok powinien być trywialny.

Możesz sprawdzić funkcję atan2, która jest dostępna w wielu językach programowania: HTTPS: // en. wikipedia.org/wiki/atan2.

Daje kątowi między punktem (X, Y) a dodatnią osią X. Tak więc w twoim przypadku, w zależności od tego, gdzie zaczyna się twój koło, przesunąłbyś, że o 90 stopni, aby uzyskać kąt z dodatnią osią Y. Poza tym, że powinno być dobrze działać.

3
Lagerbaer 14 styczeń 2020, 18:34