R0NIN Napisano 1 Sierpień 2012 Napisano 1 Sierpień 2012 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.
legomir Napisano 1 Sierpień 2012 Napisano 1 Sierpień 2012 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
R0NIN Napisano 1 Sierpień 2012 Autor Napisano 1 Sierpień 2012 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ł.
legomir Napisano 1 Sierpień 2012 Napisano 1 Sierpień 2012 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.
arev Napisano 2 Sierpień 2012 Napisano 2 Sierpień 2012 Czy ten skrypt działa na piłce, czy na innym obiekcie? p.s. Nie pisz postów kolorem utrudniającym czytanie, pls :)
R0NIN Napisano 2 Sierpień 2012 Autor Napisano 2 Sierpień 2012 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.
arev Napisano 2 Sierpień 2012 Napisano 2 Sierpień 2012 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.
Rekomendowane odpowiedzi