Así que estoy creando un controlador de personajes que usa Quaternion.FromToRotation para alinear al jugador con el centro de gravedad en este fragmento de código:
this_body.transform.rotation *= Quaternion.FromToRotation(this_body.transform.up,gravity_up);
Y cuando estoy en ciertas partes del planeta esfera comienza a volcarse por todas partes, como en este video, y no sé cómo remediarlo, aunque tal vez la implementación de la gravedad podría ser el problema, o el controlador de personajes, aunque yo creo que usar fuerza relativa no debería meterse con eso.
Implementación de gravedad:
float distance = direction.magnitude; float forceMagnitude = G * (obj.GetComponent<MultiAttractor>().rb.mass * rb.mass) / Mathf.Pow(distance, 2); Vector3 force = direction.normalized * forceMagnitude; rb.AddForce(force);El guión de mi controlador de personajes es un poco largo, así que no creo que deba aburrirlos con él, aunque si es necesario, podría proporcionárselo.
Esto es para cualquier persona que tenga problemas con el uso de Quaternion.FromToRotation con un controlador de caracteres de cuerpo rígido:
No profundicé mucho en su problema, pero está manipulando la rotación directamente en el código con Quaternion.FromToRotation y también con la física. Creo que debe ceñirse a uno de los dos, porque el uso de ambos puede provocar comportamientos inesperados. Si introduce una modificación de rotación "en bruto", el motor de física se ocupa de ello. – rustyBucketBay
Básicamente, solo use la rotación física como Rigidbody.rotation para rotar cosas como Transform.Rotate o si desea rotar objetos físicos como si estuviera agregando fuerza, pero en lugar de mover las cosas, rota las cosas, luego use Rigidbody.AddTorque , o simplemente no lo haga use cualquier rotación física con otros tipos de rotación, ya que puede causar problemas, como lo indica rustyBucketBay