¿Cómo hago para que un personaje sea capaz de caminar sobre paredes?


34

Estoy tratando de hacer que un personaje se mueva como una araña: dada una pendiente ascendente que una bola normalmente no podría rodar, la araña lentamente se arrastraría hacia arriba.

De manera similar, dada una plataforma rectangular en el aire, en lugar de caerse al llegar al borde, la araña continuaría, envolviéndose sobre el borde y continuaría por el costado y luego por debajo de la plataforma (eventualmente caminando alrededor del perímetro de la plataforma).

He examinado varios componentes de Unity 2D, con poco éxito. :(

La mayoría de los límites de colisión de mi mundo están marcados por componentes Collider 2D (que funcionan muy bien con una bola simple afectada por la gravedad, pero menos con este personaje de araña).


1
Ese juego: youtube.com/watch?v=ga4Zqq1tXa8 ("Spider" en PS1, lo jugué hace mucho tiempo) podría ser una fuente de inspiración.
tigrou

Respuestas:


43

Estaba a punto de publicar un enlace al blog de la Base de Asteroides en el enemigo Walker cuando noté que Karmington ya estaba vinculado al artículo de Gamasutra en un comentario.

Sin embargo, probablemente valga la pena dar a esto un poco más de visibilidad y explicación como respuesta.

Estoy caminando sobre los rayos, oh-oh!

El truco son los rayos . Estos permiten que su código escanee a lo largo de una línea en busca de una colisión.

Para que el Walker se alinee bien con las superficies, disparan dos rayos hacia el terreno, uno desde el lado izquierdo del Walker y otro desde la derecha (líneas rojas y amarillas arriba).

De cada objeto RaycastHit2D, puede obtener un vector normal que apunta perpendicular a la superficie (líneas magenta y verde). Al promediar las normales de los dos golpes, obtienes una orientación adecuada para tu personaje que refleja razonablemente el terreno subyacente (línea cian).

Puede aplicar una fuerza hacia abajo a lo largo de esta línea de orientación para mantener al personaje pegado al terreno (aunque esto puede causar cierto deslizamiento si la fricción es baja), o posicionar manualmente el personaje en el punto de intersección de rayos promedio como se hace con el Caminante.

Querrás mezclar la orientación del personaje gradualmente para evitar que tu personaje vibre o se vea robótico (mira cómo la normalidad cambia bruscamente cuando el Caminante cruza la esquina, pero el cuerpo se mueve suavemente).

Si tiene esquinas afiladas en su terreno, es probable que desee inclinar ligeramente estos rayos hacia adentro, de modo que si la araña pasa por el borde de un acantilado de 90 grados, el rayo que sobresale golpeará la cara del acantilado.

El equipo de la Base de Asteroides también dispara un rayo corto en la dirección del movimiento del Caminante (no se muestra), que anula el rayo de ese lado si toca el terreno. Eso asegura que el caminante no se atasque al caminar en una esquina cóncava de 90 grados.

Según los documentos, la emisión de rayos 2D difiere de la de 3D en que detecta colisionadores dentro de los cuales comienza el rayo. Eso me parece sospechoso, pero si sus pruebas lo confirman, querrá usar una máscara de capa para limitar los rayos para detectar solo colisionadores de terreno escalables.


Puedo confirmar que raycasts 2D detectarán colisionadores que contienen punto de partida de la raycast. Esto puede ser fácilmente filtrada, sin embargo, como que la primera detección siempre se devuelve con una distancia de 0 y una opuesta normal de la dirección de la raycast.
XenoRo

2

Usted necesitará un código personalizado para esto.

Básicamente lo que necesita saber lo que es el objeto más cercano, al igual que la plataforma en cuestión, y luego encontrar el borde más cercano, y el punto más cercano en ese borde, y luego averiguar la posición y rotación de la araña de allí.

No va a ser fácil para que sea realmente agradable, pero debe ser un reto buena para conseguir que funcione en absoluto.


2
Aquí hay un enlace realmente agradable, no estoy seguro de si es exactamente adecuado para su caso, pero tal vez tal vez ... gamasutra.com/blogs/AdamWinkels/20140220/211306/…
karmington
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.