Wpis z mikrobloga

Próbuję zaimplementować kolizję gracza z terenem w grze 2D. Rzut z góry, Unity. Przykład gry z taki rzutem patrz załącznik 1. Nie wiem jak się za to zabrać, próbowałem dwóch podejść z tutoriali ale oba nie działają:

1. W oparciu o Collider.Cast

direction - znormalizowany wektor kierunku z którym ma się poruszać postać
float distance = SPEED * Time.deltaTime;
int numberOfHits = moveCollider.Cast(direction, hits, distance);
if (numberOfHits <= 0)
{
transform.Translate(direction.x * distance, direction.y * distance, 0);
}
Dodatkowo postać ma przypisany Rigidbody2D typu static, bo bez tego z jakiegoś magicznego powodu cast nie działa(wtf?).

Efekt: postać wchodzi trochę na ścianę i potem nie może się z niej wydostać. Wygląda jakby były różnie pomiędzy Cast a Translate.

2. W oparciu o Rigibody2D Dynamic.

Inny tutorial sugerował żeby użyć body type Dynamic z grawitacją zero, ale jeżeli postać zahaczy trochę o teren to zaczyna się obracać, co były do przewidzenia.

Jakie jest prawidłowe podejście?

#gamedev #programowanie #unity
notauser - Próbuję zaimplementować kolizję gracza z terenem w grze 2D. Rzut z góry, U...

źródło: comment_1654242407jyKxKb8MVHHEInTzVsMqDE.jpg

Pobierz
  • 6
@notauser: Nie wiem czy dobrze rozumiem. Po prostu chcesz, żeby postać nie mogła wejść na ten podwyższony teren? Jeśli tak to nie potrzebujesz żadnego kodu do tego. Postać musi mieć collider i rigidbody. Teren musi mieć swój collider. I tyle system kolizji z unity już sam zadba o wykrywanie kolizji.
@notauser: Weź poprawkę na to, że nie jestem znawcą :D Ale tak ja bym szedł w rozwiązanie drugie czyli domyślny system kolizji z Unity, chyba że bym miał jakieś specjalne wymagania których on by nie spełniał. Co do wydajności to nie mam pojęcia, przypuszczam że tak. Nie dowiesz się jednak dopóki nie spróbujesz.

A jeszcze jakbyś miał problem, że mimo wszystko postać wpada czasem w collider i nie może się z
@notauser: po pierwsze mały tip : prosząc o pomoc skup się na tym co chcesz osiągnąć a nie jak. W tym przypadku chcesz kolizje z elementami otoczenia. rigidbody na przeszkodzie, zaznacz kinematic, dodaj collider, zaznacz static. na postaci rb, collider i tyle.
co do performance, nie martw się o to, jest to w miarę wydajne, tym bardziej na nowych telefonach. Defaultowy silnik fizyczny Unity jest ułomny ale też wydajny do takich