Autor Wątek: postać 2d w świecie 3d wyświetlanie odpowiedniego sprite do kierunku poruszania  (Przeczytany 2892 razy)

Offline kozuya

  • Użytkownik

# Styczeń 07, 2014, 21:17:09
Witam,

mam taki problem mam plane po którym porusza się postać 2d(click2move) i chciał bym wyświetlić odpowiednią animacje do kierunku porusza się postaci

mniej więcej chodzi o to że:

jeżeli postać porusza się na Pn. to widać jej tył
jeżeli postać porusza się na Pd. to widać jej przód
jeżeli postać porusza się na wsch. to widać jej lewy bok
jeżeli postać porusza się na zach. to widać jej prawy bok
tak samo jeżeli postać porusza się pod kontem czyli pd. wsch. , pd. zach. , pn. wsch. , pn. zachód.


Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline steckel

  • Użytkownik

  • +1
# Styczeń 07, 2014, 23:04:05
No i w czym problem?

Offline kozuya

  • Użytkownik

# Styczeń 07, 2014, 23:18:41
Nie wiem za bardzo od której strony mam to ugryźć. Mogę dodać że klasa click2move jest w c#

Offline Xirdus

  • Redaktor

# Styczeń 08, 2014, 00:14:56
Nie mam zielonego pojęcia czym jest click2move, ale generalnie problem jest prosty. Jeśli znasz punkt początkowy i końcowy, to robisz wektor z punktu A do punktu B, liczysz kąt między tym wektorem a wektorem odniesienia (jeden z tych ośmiu kierunków - albo poziomo w prawo, albo pionowo w górę, albo cokolwiek wolisz), patrzysz któremu z tych ośmiu kierunków ten kąt jest najbliższy (będą to kolejno kąty 0, 45, 90, 135, 180, 225, 270, 315 stopni) i wyświetlasz animację odpowiednią dla tego najbliższego kierunku. Zapewne da się to zrobić bez wyznaczania kątów, tylko na gołych współrzędnych, ale nie chce mi się myśleć. No i polecam stosowanie radianów zamiast stopni (wtedy jedna ósma obrotu to po prostu pi/4 - o wiele prościej myśli się w ten sposób niż na stopniach).

Offline Pawelx156

  • Użytkownik

# Styczeń 08, 2014, 00:55:05
Napisz coś więcej.
Bo  dział jest unity3D, postać 2d -  robisz w nowym unity 4.3 2D?
click2move - to chodzi o klikanie myszką i postać idzie do punktu?

Xirdus ci wyjaśnił co trzeba zrobić żeby wyznaczyć kąty.

A jak to postać 2d (zgaduje) w unity 4.3 2D to masz:
http://forum.unity3d.com/threads/212172-Animator-state-machine-for-top-down-2d-games-with-non-rotational-sprite-animation
https://www.youtube.com/watch?v=7URRg8J6mz8


Jak w nic nie trafiłem to przepraszam.

Offline PsichiX (ΨΧΞ)

  • Użytkownik
    • PsichiX Website

# Styczeń 08, 2014, 11:15:32
dot() ze znormalizowanych wektorow  i wczesniej wyliczona granica miedzy katami w radianach przy sprawdzaniudo ktorego kierunku sie zalicza, beda Twoim przyjacielem. tak bez liczenia katow.

Offline ArekBal

  • Użytkownik

# Styczeń 08, 2014, 16:32:15
Zapewne da się to zrobić bez wyznaczania kątów, tylko na gołych współrzędnych, ale nie chce mi się myśleć.
Podpowiem...
X=0 Y > 0 to góra to 0 stopnie
Y=0 X > 0 to prawo to 90 stopni
Y=X i X > 0 lub Y > 0 to prawo-góra to 45 stopni
idąc dalej
X>0 i Y > 0 i X=Y/2 to środek pomiędzy góra, a prawo-góra czyli 22.5 stopni.

Wniosek: licząc relacje miedzy X a Y z przesunięcia można wyliczyć kąty.

Offline PsichiX (ΨΧΞ)

  • Użytkownik
    • PsichiX Website

# Styczeń 08, 2014, 16:36:41
twoje rozwiazanie nie zadziala - nie zmusisz go, by ktorekolwiek pole wektora kierunku bylo rowne 0.

Offline ArekBal

  • Użytkownik

# Styczeń 08, 2014, 16:43:08
Mam jedną maluśką prośbę: pomyśl ;)

A tak serio to podałem te dwa wektory "kierunki" dla przykładu ale koniec końców istotne jest tylko to
x/y = 1

+ kilka ifów na znaki by wyłowić o którą ćwiartkę chodzi, bo przecież -1/-1=1; tak jak 1/1=1

Offline Pawelx156

  • Użytkownik

# Styczeń 08, 2014, 17:06:38
@UP

Wszystko pięknie jeśli sterowanie jest klawiaturą.
Podpinasz sobie pod animatora  dwa parametry Horizontal i Vertical, i masz 8 stron za darmo.  Zero myślenia postać idzie jak należny.

Ale chyba tu chodziło o

mam taki problem mam plane po którym porusza się postać 2d(click2move) i chciał bym wyświetlić odpowiednią animacje do kierunku porusza się postaci


Czyli  o kliknięcie myszką, i wtedy  musisz wyznaczyć sobie  kąt, a dopiero potem ustawiasz odpowiednie wartości tak jak napisałeś.


Offline ArekBal

  • Użytkownik

# Styczeń 08, 2014, 19:16:59
Kolejny... :D



  if (x > y)
  {
    return y / x * 45.0 + 45.0;
  }
  else
    return x / y * 45.0;


Działa dla prawej górnej ćwiartki, kolejne po naiwności można po ifach na znakach dorobić. :)

PS. Powyższy przykład nie zadziała dla dwóch zer. Zgadnijcie dlaczego. ;)
PS2. Ambitny ktoś może jeszcze ify zamienić na operacje algebraiczne.
PS3. Przypminam że jest to podstawa funkcji trygonometrycznych... relacja długości na osi X do Y jest miarą kąta...
« Ostatnia zmiana: Styczeń 08, 2014, 22:49:46 wysłana przez ArekBal »

Offline Xirdus

  • Redaktor

# Styczeń 08, 2014, 21:33:33
X>0 i Y > 0 i X=Y/2 to środek pomiędzy góra, a prawo-góra czyli 22.5 stopni.
Yyy nie.


Edit: chociaż jak by się zastanowić, to jest to dość przybliżenie - mimo że niedokładne (wektor [2,1] jest odchylony od osi X o ok. 26,5st., nie 22,5). Zagadza się że to trygonometria - z tym że źle ją stosujesz.

Edit 2: kurde, właśnie se przypomniałem że kąt wektora względem Ox to przecież jedno wywołanie funkcji atan2(). Taki banał. Zbyt długo nie kodziłem żadnej gry.
« Ostatnia zmiana: Styczeń 08, 2014, 21:44:17 wysłana przez Xirdus »

Offline ArekBal

  • Użytkownik

# Styczeń 08, 2014, 22:55:55
No tak... Pi mi zabrakło. Trygonometria bez PI <facepalm> ;)
« Ostatnia zmiana: Styczeń 08, 2014, 22:58:14 wysłana przez ArekBal »

Offline kozuya

  • Użytkownik

# Styczeń 09, 2014, 22:43:10
Dzięki wszystkim moja wizja uległa niewielkiej zmianie, ale wrócę do tego w najbliższym czasie.