Gracz drga o ścianę, gdy przytrzymany jest przycisk

17

Więc tworzę odgórne RPG.

Wszystko idzie dobrze, ale ten problem jest dość irytujący. Teraz, gdy postać porusza się pod ścianą, gracz drży w tę iz powrotem. Zgaduję, że dzieje się tak, ponieważ gracz próbuje wejść w ścianę, a następnie zderzenie ze ścianą odpycha ją do tyłu, co powoduje denerwujący ruch w przód iw tył. Moje pytanie brzmi oczywiście: jak temu zapobiec?

Dzięki!

PS: Używam transform.translate do przenoszenia odtwarzacza i używam C #.

EDYCJA : Używam również 2D Rigidbody i zderzaczy 2Dbox na obu.

Genevra
źródło
Przed tłumaczeniem potrzebujesz tylko testu zamiatania
MickLH
O. Uh ... Nie jestem pewien, jak to dodać w Unity C #. Jestem trochę nowy w C #. Jeśli masz wiedzę, czy mógłbyś wyjaśnić, jak to wdrożyć?
Genevra

Odpowiedzi:

51

Występują drgania, ponieważ wypaczasz gracza w ścianę za pomocą Transformacji. Przetłumacz, a krok fizyki mówi: „Hej, jesteśmy w ścianie. Rozwiążmy problem kolizji i wypchnij gracza z powrotem ze ściany . ”

Aby tego uniknąć, podczas korzystania z Rigidbody2D zaleca się użycie Rigidbody2D.MovePosition . Dzięki temu nie będziesz mieć nakładających się zderzaczy podczas przenoszenia. Jeśli zderzacz i sztywniak nie mogą się poruszyć, ponieważ coś przeszkadza, nie drgnie.

Używając Rigidbody2D.MovePosition, możesz chcieć ustawić wartość Rigidbody2D.interpolation, aby ruch wyglądał płynnie.

Jeśli jednak Rigidbody2D.MovePosition z jakiegoś powodu nie jest idealny do twojej gry i nadal chcesz używać Transform.Translate, użyj Physics2D.Raycast (lub innych rzutów Physics2D ), aby sprawdzić, czy poruszenie spowodowałoby uderzenie w ścianę, czy nie, i poruszaj się tylko, jeśli nie zostanie trafiona ściana.

Chris McFarland
źródło