Character bouncing on slopes

Hello there, I’ve started making a 3D game and I don’t have much idea of scripting so I’ve followed Brackeys’ first person movement tutorial. All of the tutorial works fine for me but when I try to go down a slope my character bounces which causes not being able to jump (which is very crucial for my game).
I’ve searched solutions in YouTube but I did understand nothing so I couldn’t do what other tutorials tried to teach me.

Anyone could tell me how may I fix this issue or send the code with that made pls? As I said I don’t know what to do to fix it, even watching some YT tutorials.

This is my code:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{

    public CharacterController controller;

    public float speed = 12f;
    public float gravity = -9.81f;
    public float jumpHeight = 3f;

    public Transform groundCheck;
    public float groundDistance = 0.4f;
    public LayerMask groundMask;

    public bool isOnSlope = false;
    private Vector3 hitNormal;

    Vector3 velocity;
    bool isGrounded;

    // Start is called before the first frame update
    void Start()
    {
       
    }

    // Update is called once per frame
    void Update()
    {
        isGrounded = Physics.CheckSphere(groundCheck.position, groundDistance, groundMask);

        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);

        if (Input.GetButtonDown("Jump") && isGrounded)
        {
            velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity);
        }

        velocity.y += gravity * Time.deltaTime;

        controller.Move(velocity * Time.deltaTime);

    }

}

I present to you the two common ways you can fix slope movement:
The lazy way:

Pros: Easy to grasp, easy to implement
Cons: works well until you realize you can’t jump very well on slopes anymore, and flying over a slope without contacting it pulls you into it

The “logically this is clearly better but for some reason I keep having to debug it over and over” way:

Pros: Doesn’t involve adding “fake gravity” that messes things up
Cons: Understanding of how it works is absolutely required if you need to tweak it at some point.

But neither of them address another fun caveat of character controllers - if your character moves at a sufficient speed, it will fly off the edge of a platform and over the slope the first frame you leave the horizontal platform, and neither approach will really help you with that. You will need to do extra handling for that, as in cast a collider or ray down and see if you’re flying over a slope you should be descending.

1 Like