Need very specific help with Quaternions (561666)

I need to make a character to always stand up against an artificial Gravity Vector.

The artificial gravity source can be anywhere and any angle/vector.

When I am inside the trigger collider of the gravity source, I want my character to slowly “stand up”, meaning its feet pointing towards the floor, even if not touching, while keeping its rotation around its local Y axis to keep looking approximately in the same direction.

I have a script attached to my character gameObject.

By now I achieved to make the character to stand up against the global Vector3.up, I simply need help with doing it against a specific vector.

Here’s the part of this script I need help with :

 Vector3 gravityVector = artificialGravitySource.transform.up; // unused for now...
 
 Quaternion startRotation = transform.rotation;
 Quaternion endRotation = new Quaternion (0, transform.rotation.y, 0, transform.rotation.w);

 transform.rotation = Quaternion.RotateTowards(startRotation, endRotation, 100 * Time.deltaTime);

I need to set my endRotation according to gravityVector, keeping my local y rotation.

Thank you for your help.

Hello,

I think there different way to achieve that, i will try :

// - init rotation movement 
Vector3 charDir = charDir.up;
Vector3 targetDir = artificialGravitySource.transform.up;
Quaternion targetRotation= Quaternion.FromToRotation(charDir ,targetDir );

// - rotation movement (in update function or a coroutine)
transform.rotation = Quaternion.Lerp(transform.rotation,targetRotation, Time.time * speed);

This is not working for me… unless I don’t understand how to implement it well…

I need a very simple solution to rotate towards the gravity vector… Something like multiplying my endRotation with my gravityVector…