Come posso rilevare sporgenze?


18

Nel mio gioco, vorrei che il mio personaggio fosse in grado di afferrare e trattenere le sporgenze, e di essere in grado di sollevarsi se c'è spazio per farlo.

Come posso rilevare se c'è una sporgenza e se il personaggio ha abbastanza spazio per arrampicarsi?


Questa domanda è stata creata come una versione canonica di due domande precedenti. Vedi la meta discussione qui .
doppelgreener,


1
Inoltre, collegando le domande di cui abbiamo parlato in meta: gamedev.stackexchange.com/questions/38066/… e gamedev.stackexchange.com/questions/15491/…
MichaelHouse

Risposte:


22

Il video di Overgrowth Alpha 132 mostra come hanno implementato l'arrampicata.

Il loro metodo dovrebbe funzionare su qualsiasi motore, anche su motori 2D in cui utilizzeresti un rettangolo e un cerchio anziché un cilindro e una sfera.

Il loro rilevamento del bordo coinvolge due parti:

Rilevamento del muro (usando la sfera)

Il gioco controlla se il giocatore si sta attualmente scontrando con un muro. Se c'è un muro, potrebbero esserci delle sporgenze su cui il giocatore può afferrare. La seconda parte sostituisce per analizzare le sporgenze.

Rilevamento del bordo (usando il cilindro)

Se il giocatore entra in contatto con un muro, un cilindro viene spostato verso il basso da una certa distanza sopra la posizione del giocatore fino a toccare una sporgenza. Ciò determina tre cose:

  • Se esiste una sporgenza sopra il giocatore
  • L'altezza della sporgenza
  • Se c'è spazio per il giocatore di arrampicarsi sulla sporgenza, considerando che il cilindro occupa lo stesso spazio orizzontale del giocatore.

Metodo straordinario e fantastico esempio +1
Bugster

"un cilindro viene spostato verso il basso da una certa distanza sopra la posizione del giocatore" Quale distanza? Questo è molto importante quando si ha a che fare con ambienti interni (si interseca accidentalmente il soffitto).
Tara,

1
@Dudeson in passato ho usato un raycast per trovare inizialmente la superficie della sporgenza, prima di dare seguito a un controllo del volume per verificare che ci sia abbastanza spazio libero per arrampicarsi. Dato che il raycast è direzionale, non legge i massimali come falsi positivi - anche se potrebbe essere ancora bloccato sul piano successivo se l'origine è troppo alta .. Le metriche esatte dipenderanno da molti dettagli di ogni gioco - il dimensione del personaggio, portata del braccio, distanza nella progettazione del livello, velocità di caduta, ecc.
DMGregory

@DMGregory Buona idea con il cast di ray!
Tara,
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.