Joakim
Joakim

Reputation: 165

Unity, How to make the friction work with movement

I have a 3d world with a simple platform with a cube representing the player. When I rotate the platform the cube glides and perform as you expect when increase and decrease the friction in the physics material.

I want the cube to glide after the input for example forward is terminated. It does not. I tried to update the position with rigidbody.position and update it. I quickly understood that it would not work with the physics engine.

Now I have the following code. It does not work as expected anyway. I would like to have some pointers to solve this.

    public class Player1 : MonoBehaviour
    {
     private float speed = 10f;
     private Vector3 direction;
     private Vector3 velocity;
     private float vertical;
     private float horizontal;


     Rigidbody playerRigidBody;

     // Start is called before the first frame update
     void Start()
     {
        playerRigidBody = GetComponent<Rigidbody>();
     }

     // Update is called once per frame
     void Update()
     {
        vertical = Input.GetAxisRaw("Vertical");
        horizontal = Input.GetAxisRaw("Horizontal");
        direction = new Vector3(horizontal, 0, vertical);  
     }

     private void FixedUpdate()
     {
        velocity = direction.normalized * speed * Time.fixedDeltaTime;
        playerRigidBody.MovePosition(transform.position + velocity);
     }
    } 

Upvotes: 4

Views: 2077

Answers (1)

miishuriinu
miishuriinu

Reputation: 117

Use playerRigidBody.AddForce(Vector3 direction, ForceMode forceMode) to move your player.

If you don't want your player to move at a demential speed use playerRigidBody.velocity = Vector3.Clamp(Vector3 vec3, float minValue, float maxValue);

Then play with different variables to get the result you want !

Upvotes: 1

Related Questions