Skocz do zawartości

Unity3D (odbijanie piłki od ściany)


R0NIN

Rekomendowane odpowiedzi

Witam,

 

Próbuję zrobić "coś" w Unity. Podpierając się różnymi tutkami z sieci męczę aktualnie... odbijanie piłki od ścian.

Problem w tym, że jak już dodam do piłki siłę to piłeczka dolatuje do ściany i uparcie próbuje się przez nią przebić zamiast odbić xD.

 

Jest w Unity jakaś funkcja "odbij się od ściany" ?

 

Moja piłka porusza się na zasadzie:

Na poczatku skryptu losuje kierunek:

Random.Range (10, 170);

później podstawiam tę wartość pod rotacje piłki i dodaje jej siłę:

GameObject.Find("Ball").rigidbody.AddForce(transform.forward * Speed);

Dodałem piłce materiał metalu i ustawiłem "Bouncyness" na 1, na 2 itp.

efekt jest taki ze piłka się odbija od ściany i... zawraca :/

 

Jest na takie coś jakaś metoda, czy muszę z palca na if'ach jakoś ustawiać odbicie ?

typu

if(kat >= 90) { kat = 180;} itp ?

 

Ps. programistą wielkim nie jestem. w okienku robiłem takie rzeczy właśnie na zasadzie dodaj lub odejmij do x,y xD

 

Pozdr.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Odpowiedzi 6
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Popular Days

Top Posters In This Topic

Wystarczy pomyśleć logicznie siła, która kieruje piłką z tego co zrozumiałem cały czas działa w tym samym kierunku, więc momencie kiedy włącza się kolizja powinieneś skierować ją w stronę odpychającą od ściany. O unity nie wiem za dużo tylko wniosku z tekstu jakbym coś głupiego powiedział :P

Odnośnik do komentarza
Udostępnij na innych stronach

legomir to co napisałeś to ja wiem ;p

W innym "sofcie" to ja sobie z tym radzę bez problemu jak mam piłkę i współrzędne X i Y to ustawiam jakieś wartości dla x,y i w momencie zetknięcia z przeszkodą mnożę daną współrzędną przez -1 i piłeczka się odbija ;p.

A w unity tego sposobu nie mogłem ogarnąć :/ więc zrobiłem inaczej - w tym konkretnym przypadku nie wiem co dalej począć (jak wyliczyć / zmienić kąt odbicia).

 

Teraz mam tak, że na dzień dobry ustawiam jakiś kąt dla piłki np. 60 stopni i dodaje jej siłę w tym kierunku (forward). Problem w tym że jak piłka się odbije to się nie obraca i po chwili wraca w tym samym kierunku xD.

 

Ale jakiś przykład znalazłem więc będę kombinował.

Odnośnik do komentarza
Udostępnij na innych stronach

Możesz pomnożyć wartość force w momencie impacta(wtedy pojawiają sie dodatkowe dane). Wgl to zamiast bym zrobił anregular velocity/impulse to emituje Ci wartość wektora siły na początku a potem resztę liczy silnik.

 

http://docs.unity3d.com/Documentation/ScriptReference/Rigidbody-angularVelocity.html tak na szybko znalezione.

Odnośnik do komentarza
Udostępnij na innych stronach

Skrypt działa na piłce.

 

Sorry za czarny kolor, jakoś przypadkiem się przestawił a zauważyłem to dopiero pisząc kolejną wiadomość ;).

 

Chyba póki co przerobie jakiś zestaw tutoriali "strzelający robak" xD.

Odnośnik do komentarza
Udostępnij na innych stronach

Skoro działa na piłce, to możesz usunąć całe "GameObject.Find("Ball").". Generalnie powinno wystarczyć jednorazowe przyłożenie siły, przy czym ustaw parametr "Drag" w Rigidbody na 0 - wtedy piłka nie powinna hamować. Dodając cały czas siłę nakłada się ona, prawdopodobnie, z siłą odbicia od ściany. Kolejną sprawą jest miejsce, w którym wymuszasz stałą siłę. Trzeba to robić w FixedUpdate, nigdy w Update, bo ten nie działa synchronicznie z silnikiem fizycznym.

Odnośnik do komentarza
Udostępnij na innych stronach




×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj więcej Polityka prywatności