How to make Rigidbody movement not slippery?

I already try changing the speed changing the ForceMode changing the rigidbody mass and drag, nothing seems to make the movement “responsive”, all these does is making the character feels “heavier” or “lighter”.

Here’s the movement script

using UnityEngine;
using System.Collections;

public class Movement : MonoBehaviour
{
    public float speed = 10f;
    private Rigidbody rb;

    void Awake()
    {
        rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {  
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");
        Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical).normalized;
        rb.AddForce(movement * speed * Time.fixedDeltaTime, ForceMode.Impulse);
    }
}

My guess is that you have no idea when you should use AddForce, am I right? If yes, then just replace your line#19 (rb.AddForce) with that one:

rb.velocity = movement * speed;

In FixedUpdate, at first, set the RB’s velocity to Vector3.zero. After that, use Transform.Translate to set the desired movement vector.

Note 1: Many users say that Translate shouldn’t be used with RB movement, but I haver never had any problems with it, and it is also used in at least one comprehensive RB movement tutorial.
Note 2: If the RB is being affected by other phyics (explosions, being pushed etc), this needs to be suspended temporarily, of course.

Adding force to a Rigidbody means you are using the physics engine to move a GameObject. In real life (ie, using physics), when you move an object you apply a force to it and it accelerates to a point where the dynamic friction of the surface it is moving over prevents it from accelerating any further. Sometimes this acceleration appears very sudden, like when a sprinter shoots off the starting blocks, but it’s still a gradual acceleration from no velocity to fast velocity.

I suggest either not using the Rigidbody to move your GameObject (just translate the Transform manually) or specify VelocityChange as the ForceMOde when you call AddForce(). VelocityChange means you are immediately changing the velocity to something else, ignoring mass and acceleration. You can use this to immediately begin moving at some velocity or to immediately stop.

In the input manager, increase the gravity for the vertical and horizontal axis inputs. I did this while using the movePosition function, and it worked well. I think it would also help in your case.