- Home /
Aligning an object to both the surface normal and the input direction at the same time
I currently have a utility script that looks something like this:
public class Utilities
{
/// <summary>
/// Returns true if the thumbstick is pulled or if the arrow keys or WASD keys are pressed.
/// </summary>
public static bool LeftThumbstickAxisIsInUse()
{
return Input.GetAxis("Horizontal") != 0 || Input.GetAxis("Vertical") != 0;
}
/// <summary>
/// The vector direction that the analog controls are being held in, normalized.
/// </summary>
public static Vector3 AnalogDirectionVector()
{
return new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")).normalized;
}
/// <summary>
/// The direction that the analog controls are being held in around the direction 'upwards', as a Quaternion.
/// </summary>
public static Quaternion AnalogDirectionQuaternion(Vector3 upwards)
{
if (LeftThumbstickAxisIsInUse())
{
return Quaternion.LookRotation(AnalogDirectionVector(), upwards);
}
return Quaternion.identity;
}
/// <summary>
/// The direction that the analog controls are currently held in, in euler angles around the direction 'upwards'.
/// </summary>
public static float AnalogDirectionEulerY(Vector3 upwards)
{
return AnalogDirectionQuaternion(upwards).eulerAngles.y;
}
}
In my character's 'look' code, I have the following method:
private Quaternion SlopeAlignment ()
{
return Quaternion.FromToRotation(Vector3.up, hit.normal);
}
My goal is to allow the character to align itself with a slope to move across, up and down it using directional input from the arrow keys or a thumbstick on a controller, or otherwise. When the character moves to a section of ground with a different surface normal, it should align itself with the new normal and continue to be able to move in all directions across the slope without rotating locally on the X or Z axis when in motion, unless the surface normal changes.
Any help or advice would be much appreciated.
Your answer
![](https://koobas.hobune.stream/wayback/20220612170105im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Rotate object with quaternion to direction points 1 Answer
Doing 2D only rotation using FromToRotation + RotateTowards 0 Answers
Rotate object towards another object without using the local Y axis 0 Answers
to rotate along z axis 1 Answer
How to constantly rotate an object to 0f by X-axis? 2 Answers