Giocatore che fa jogging contro il muro quando viene premuto il pulsante


17

Quindi, sto realizzando un gioco di ruolo top down.

Tutto sta andando alla perfezione, ma questo problema è abbastanza fastidioso. Ora, quando il personaggio si muove contro il muro, il giocatore si muove avanti e indietro. Immagino sia perché il giocatore sta provando a muoversi nel muro, e poi la collisione del muro lo sta spingendo indietro, il che fa un fastidioso movimento avanti e indietro. La mia domanda è ovviamente: come posso impedire che ciò accada?

Grazie!

PS: sto usando transform.translate per spostare il lettore e sto usando C #.

EDIT : sto anche usando un 2D Rigidbody e 2Dbox collider su entrambi.


Hai solo bisogno di un test di scansione prima di tradurre
MickLH,


Oh. Uh ... Non sono sicuro di come aggiungere questo in Unity C #. Sono un po 'nuovo in C #. Se hai le conoscenze, ti dispiacerebbe spiegare come implementarlo?
GMR516

Risposte:


51

Il jitter sta accadendo perché stai deformando il giocatore contro il muro usando Transform.Translate, e il passo di fisica sta dicendo: "Ehi, siamo nel muro. Risolviamo questo problema di collisione e spingiamo il giocatore fuori dal muro ".

Per evitare ciò, quando si utilizza un Rigidbody2D, è consigliabile utilizzare Rigidbody2D.MovePosition . In questo modo non avrai collettori sovrapposti durante lo spostamento. Se un collider e un corpo rigido non riescono a muoversi perché qualcosa è in mezzo, non si muoveranno.

Utilizzando Rigidbody2D.MovePosition, potresti voler impostare il valore di interpolazione Rigidbody2D. per mantenere il movimento fluido.

Tuttavia, se Rigidbody2D.MovePosition non è l'ideale per il tuo gioco per qualche motivo e vuoi comunque usare Transform.Translate, usa Physics2D.Raycast (o altri cast di Physics2D ) per vedere se lo spostamento ti farà colpire un muro o no, e si sposta solo se non viene colpito nessun muro.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.