BH
En el ejemplo de three.js para un juego en primera persona https://threejs.org/examples/?q=game#games_fps , debe notar que en las esquinas se atasca, aparentemente porque choca con un lado y luego lo empuja hacia el otro lado (cuando hay menos de un ángulo de 90 grados), entonces ese lado lo empuja hacia el primer lado, y si uno sigue tratando de moverse, este proceso se sigue repitiendo.
La parte relevante de la colisión es https://github.com/mrdoob/three.js/blob/dev/examples/games_fps.html
function playerCollisions() { const result = worldOctree.capsuleIntersect( playerCollider ); playerOnFloor = false; if ( result ) { playerOnFloor = result.normal.y > 0; if ( ! playerOnFloor ) { playerVelocity.addScaledVector( result.normal, - result.normal.dot( playerVelocity ) ); } playerCollider.translate( result.normal.multiplyScalar( result.depth ) ); } }Primero solo verifica si está en el suelo (y si no, lo hace caer a lo largo de la pared con la que está chocando, o al menos eso es lo que creo que hace) luego lo desliza en la dirección opuesta a lo que choca, que aparentemente es lo que está causando el nerviosismo ya que simplemente lo empuja hacia la otra pared cuando está en un ángulo agudo.
Intenté ajustarlo pero no tengo idea de qué hacer o cómo comenzar, ¿alguna idea?