Home > Blockchain >  How to freeze the rotation of a Rigidbody2D within scripts?
How to freeze the rotation of a Rigidbody2D within scripts?

Time:07-28

I am trying to make a 2d platformer, but lets say that if the character collides with any object, then it just rotates. Is there a way to set the rotation to 0? or keep it on 0?

Ive tried making the box collider far wider, it made my character alteast not fall after moving right/left, but thats not enough. It just falls over if there are any objects colliding with it, unless its taller than him.

Heres the code i try to use:

using System.Collections;

public class PlayerController : MonoBehaviour 
{

//Movement
    public float speed;
    public float jump;
    float moveVelocity;

    //Grounded Vars
    bool grounded = true;

    void Update () 
    {
        //Jumping
        if (Input.GetKeyDown (KeyCode.Space) || Input.GetKeyDown (KeyCode.UpArrow) || Input.GetKeyDown (KeyCode.Z) || Input.GetKeyDown (KeyCode.W)) 
        {
            if(grounded)
            {
                GetComponent<Rigidbody2D> ().velocity = new Vector2 (GetComponent<Rigidbody2D> ().velocity.x, jump);
            }
        }

        moveVelocity = 0;

        //Left Right Movement
        if (Input.GetKey (KeyCode.LeftArrow) || Input.GetKey (KeyCode.A)) 
        {
            moveVelocity = -speed;
        }
        if (Input.GetKey (KeyCode.RightArrow) || Input.GetKey (KeyCode.D)) 
        {
            moveVelocity = speed;
        }

        GetComponent<Rigidbody2D> ().velocity = new Vector2 (moveVelocity, GetComponent<Rigidbody2D> ().velocity.y);

    }
    //Check if Grounded
    void OnTriggerEnter2D()
    {
        grounded = true;
    }
    void OnTriggerExit2D()
    {
        grounded = false;
    }
}```

CodePudding user response:

You are looking for Rigidbody2D.freezeRotation.

  • Related