I want to call `FromToRotation`

with a desired up vector to avoid Z axis rotation. `LookRotation`

allows us to pass in our desired up vector but `FromToRotation`

doesn’t.

Is there an algorithm or series of function calls I can do to achieve the desired effect?

If the two Directions that you pass into `FromToRotation`

are perpendicular to the desired Up Vector then it will give you back a `Quaternion`

that represents a rotation around that Vector. If one or more of the directions you passed in was not perpendicular to the desired Up Vector it would be impossible to generate a `Quaternion`

that both rotates around the Up Vector and rotates the start vector to the end vector. In short, it’s up to you to pass in vectors that are perpendicular to the desired up vector.

Here’s one way you could do it that assumes your desired Up Vector is in-fact WorldSpace Up or `(0, 1, 0)`

:

```
Quaternion rotation = Quaternion.FromToRotation(
new Vector3(fromDirection.x, 0, fromDirection.z),
new Vector3(toDirection.x, 0, toDirection.z)
);
```

By zeroing out the y component in both Directions I guarantee that the rotation between them is around the y-axis.

I’ve found the solution in case anyone is curious, and it’s so simple it makes me wonder why I can’t find the answer online (maybe it’s too obvious that no one bothers asking it). Multiply the resulting FromToRotation quaternion with Vector3.forward. Then, call LookRotation(resultingVector, Vector3.up).