¿Cómo detecto las repisas?

18

En mi juego, me gustaría que mi personaje pueda agarrarse a las repisas y poder levantarse si hay espacio para hacerlo.

¿Cómo detecto si hay una repisa y si el personaje tiene suficiente espacio para subir?

doppelgreener
fuente
Esta pregunta fue creada como una versión canónica de dos preguntas anteriores. Vea la meta discusión aquí .
doppelgreener
1
Además, la vinculación de las preguntas mencionadas en meta: gamedev.stackexchange.com/questions/38066/… y gamedev.stackexchange.com/questions/15491/…
MichaelHouse

Respuestas:

22

El video de Overgrowth Alpha 132 muestra cómo implementaron la escalada en salientes.

Su método debería funcionar en cualquier motor, incluso en motores 2D en los que usaría un rectángulo y un círculo en lugar de un cilindro y una esfera.

Su detección de repisas implica dos partes:

Detección de pared (usando la esfera)

El juego verifica si el jugador está actualmente colisionando con una pared. Si hay una pared, puede haber repisas a las que el jugador pueda agarrarse. La segunda parte se encarga de analizar las repisas.

Detección de salientes (usando el cilindro)

Si el jugador entra en contacto con una pared, un cilindro se desliza hacia abajo desde una cierta distancia por encima de la posición del jugador hasta que toca una repisa. Esto determina tres cosas:

  • Si existe una repisa sobre el jugador
  • La altura de la repisa
  • Si hay espacio para que el jugador suba a la repisa, teniendo en cuenta que el cilindro ocupa el mismo espacio horizontal que el jugador.
doppelgreener
fuente
Método increíble y ejemplo fantástico +1
Bugster
"un cilindro se mueve hacia abajo desde una cierta distancia por encima de la posición del jugador" ¿Qué distancia? Esto es muy importante cuando se trata de ambientes interiores (se cruzaría el techo por accidente).
Tara
1
@Dudeson en el pasado, usé una emisión de rayos para encontrar inicialmente la superficie de la repisa, antes de seguir con una verificación de volumen para verificar que haya suficiente espacio sin obstáculos para subir. Dado que la emisión de rayos es direccional, no lee los techos como falsos positivos, aunque aún podría engancharse en el siguiente piso si el origen es demasiado alto. Las métricas exactas dependerán de muchos detalles de cada juego: el tamaño del personaje, alcance del brazo, espacio libre en el diseño del nivel, velocidades de caída, etc.
DMGregory
@DMGregory ¡Buena idea con el elenco de rayos!
Tara