# How to move downwards on an angle?

I’ve been struggling for a while. When I slide down a slope that has an angle greater than my controller `slopeLimit` which is 45f , the slide stops a bit too early so that only 90% of the slide is completed. In the photo the slide is “completed” but it’s not.

``````// Entire PlayerMovement script
RaycastHit hit;
Vector3 hitPointNormal;
private bool willSlideOnSlopes = true;
public bool isSliding;

void FixedUpdate()
{
RaycastHit hit;

if (controller.isGrounded && Physics.Raycast(transform.position, Vector3.down, out hit, 2f))
{
hitPointNormal = hit.normal;

float slopeAngle = Vector3.Angle(hitPointNormal, Vector3.up);
if (slopeAngle > controller.slopeLimit)
{
isSliding = true;
}
else
{
isSliding = false;
}
}
}

void Update()
{
isGrounded = controller.isGrounded;

if (isGrounded && velocity.y < 0)
{
velocity.y = -2f;
}

float x = Input.GetAxis("Horizontal");
float z = Input.GetAxis("Vertical");

Vector3 move = transform.right * x + transform.forward * z;
controller.Move(move * speed * Time.deltaTime);

velocity.y += gravity * Time.deltaTime;

if (isGrounded)
{
if (willSlideOnSlopes && isSliding)
{
move += new Vector3(hitPointNormal.x, -hitPointNormal.y, hitPointNormal.z) * 2f;
controller.Move(move * Time.deltaTime);
}
}
controller.Move(velocity * Time.deltaTime);
}
``````
1 Like