- Home /
 
 
               Question by 
               Bilal_Aljandly · Feb 15 at 08:48 AM · 
                rigidbodyplayer movement  
              
 
              rigidbody based character controller
Hi! I makeíng a charater controller rigidboy based! The movement is all great but not when the player tries going up/down slops. When the player walk on a slop, the Y axies velocity goes crazy
Here is my code:
 [Header("Needed Components")]
     [SerializeField] Rigidbody playerRb;
     [SerializeField] CapsuleCollider playerCollider;
 
     [Header("Movement")]
     [SerializeField] float walkingSpeed;
     [SerializeField] float runningSpeed;
 
     [Header("Jump")]
     [SerializeField] float jumpForce;
     [SerializeField] GroundChecking groundChecking;
 
     [Header("Stair Climbing")]
     [SerializeField] LayerMask layerFilter;
     [SerializeField] GameObject lowerRay;
     [SerializeField] GameObject upperRay;
     [SerializeField] float stepHieght;
     [SerializeField] float stepSmooth;
 
     // Input
     private MovementInputManger playerInput;
 
     private void OnValidate()
     {
         // Stair Climbing
         upperRay.transform.localPosition = new Vector3(upperRay.transform.position.x, stepHieght, upperRay.transform.position.z);
     }
 
     private void Start()
     {
         playerInput = MovementInputManger.Instance;
 
         Cursor.lockState = CursorLockMode.Locked;
         Cursor.visible = false;
     }
 
     private void Update()
     {
         if (playerInput.PlayerJumpedThisFrame())
             Jump();
     }
 
     private void FixedUpdate()
     {
         Move();
     }
 
     private void Move()
     {
         float movingSpeed;
         if (playerInput.IsRunning())
             movingSpeed = runningSpeed;
         else
             movingSpeed = walkingSpeed;
 
         playerRb.velocity = Vector3.up * playerRb.velocity.y // Y velocity
                             + playerCollider.transform.right * movingSpeed * playerInput.GetPlayerMovement().x // X velocity
                             + playerCollider.transform.forward * movingSpeed * playerInput.GetPlayerMovement().y; // Z velocity
 
         if (playerRb.velocity.z != 0f || playerRb.velocity.x != 0f)
             stepClimb();
     }
 
     private void Jump()
     {
         if (groundChecking.IsGrounded())
         {
             playerRb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
         }
     }
 
 
     bool hitLower, hitUpper;
     private void stepClimb()
     {
         if (Physics.Raycast(lowerRay.transform.position, playerCollider.transform.forward, out RaycastHit lowerHit, playerCollider.radius + 0.2f, layerFilter))
         {
             hitLower = true;
             if (!Physics.Raycast(upperRay.transform.position, playerCollider.transform.forward, out RaycastHit upperHit, playerCollider.radius + 0.3f, layerFilter))
             {
                 playerRb.position += new Vector3(0f, stepSmooth, 0f);
                 hitUpper = true;
             }
             else hitUpper = false;
         }
         else 
         { 
             hitLower = false; 
             hitUpper = false;
         }
     }
 
     private void OnDrawGizmos()
     {
         if (hitLower)
         {
             Gizmos.color = Color.green;
             Gizmos.DrawLine(lowerRay.transform.position, lowerRay.transform.position + playerCollider.transform.forward * (playerCollider.radius + 0.2f));
         }
         else
         {
             Gizmos.color = Color.red;
             Gizmos.DrawLine(lowerRay.transform.position, lowerRay.transform.position + playerCollider.transform.forward * (playerCollider.radius + 0.2f));
         }
 
 
         if (hitUpper)
         {
             Gizmos.color = Color.green;
             Gizmos.DrawLine(upperRay.transform.position, upperRay.transform.position + playerCollider.transform.forward * (playerCollider.radius + 0.3f));
         }
         else
         {
             Gizmos.color = Color.red;
             Gizmos.DrawLine(upperRay.transform.position, upperRay.transform.position + playerCollider.transform.forward * (playerCollider.radius + 0.3f));
         }
 
     }
 
               I am kind sure the issue in the move function where i am setting the playerRb velocity, but i have no clue how to fixe it.
I will be greatfull for any help.
               Comment
              
 
               
              Your answer
 
             Follow this Question
Related Questions
Player keeps falling halfway through terrain floor 3 Answers
Stop rigidbody player from juddering when walking into a wall. 0 Answers
Trying to make a 2d object launch towards the mouse when I left click. can anyone help? 2 Answers
Player is Speeding up in collisions 0 Answers
5.4 broke rigidbody.addForce? 0 Answers