Your Cart
Loading
unity 2d change gravity unity change gravity direction unity gravity change tutorial

Unity 2D Change Gravity | Unity Tutorial

Unity 2D Change Gravity | Unity Tutorial


Learn how to dynamically change gravity directions in Unity 2D and manage movement constraints with a single script. This quick tutorial will show you how to set up gravity to affect your game objects in any direction and automatically freeze movement along the perpendicular axis. Perfect for enhancing gameplay mechanics or adding unique physics effects!



WATCH FULL TUTORIAL ON YOUTUBE



CHECK OUR PROJECTS


SUBSCRIBE FOR LATEST OFFERS



=========================================================


Unity Projects - ON SALE!!!


1. Water Sort Puzzle 9000 Levels

https://payhip.com/b/cjDb8


2. Ball Sort Puzzle 9000 Levels

https://payhip.com/b/IbtoD


3. Sling Shot

https://payhip.com/b/PjLDH



=========================================================



Script:


GravityController.cs


using UnityEngine;


public class GravityController : MonoBehaviour

{

  // Enum to define the possible gravity directions

  public enum GravityDirection

  {

    PositiveX,

    NegativeX,

    PositiveY,

    NegativeY

  }


  // Public variables to set the gravity direction and value in the Inspector

  public GravityDirection gravityDirection = GravityDirection.NegativeY; // Default direction

  public float gravityValue = 2f; // Magnitude of gravity


  private Rigidbody2D rb2d;


  void Start()

  {

    // Get the Rigidbody2D component

    rb2d = GetComponent<Rigidbody2D>();

    if (rb2d == null)

    {

      Debug.LogError("Rigidbody2D component is missing from this GameObject.");

      return;

    }


    // Initialize gravity and constraints

    UpdateGravityAndConstraints();

  }


  void Update()

  {

    // Update gravity and constraints if the direction or value changes

    UpdateGravityAndConstraints();

  }


  void UpdateGravityAndConstraints()

  {

    // Determine the direction of gravity based on gravityDirection

    Vector2 gravity = Vector2.zero;

    RigidbodyConstraints2D constraints = RigidbodyConstraints2D.None;


    switch (gravityDirection)

    {

      case GravityDirection.PositiveX:

        gravity = new Vector2(gravityValue, 0);

        constraints = RigidbodyConstraints2D.FreezePositionY | RigidbodyConstraints2D.FreezeRotation;

        break;

      case GravityDirection.NegativeX:

        gravity = new Vector2(-gravityValue, 0);

        constraints = RigidbodyConstraints2D.FreezePositionY | RigidbodyConstraints2D.FreezeRotation;

        break;

      case GravityDirection.PositiveY:

        gravity = new Vector2(0, gravityValue);

        constraints = RigidbodyConstraints2D.FreezePositionX | RigidbodyConstraints2D.FreezeRotation;

        break;

      case GravityDirection.NegativeY:

        gravity = new Vector2(0, -gravityValue);

        constraints = RigidbodyConstraints2D.FreezePositionX | RigidbodyConstraints2D.FreezeRotation;

        break;

    }


    // Apply the new gravity direction and constraints to the Physics2D settings and Rigidbody2D

    Physics2D.gravity = gravity;

    rb2d.constraints = constraints;

  }

}





DOWNLOAD CODESTER FILES