0
0
UnityHow-ToBeginner ยท 4 min read

How to Use 2D Physics in Unity: Simple Guide

To use 2D physics in Unity, add Rigidbody2D and Collider2D components to your GameObjects. Control physics behavior by adjusting Rigidbody2D properties and handle collisions using Unity's event methods like OnCollisionEnter2D.
๐Ÿ“

Syntax

Unity's 2D physics uses components attached to GameObjects. The main parts are:

  • Rigidbody2D: Makes the object respond to physics forces and gravity.
  • Collider2D: Defines the shape for collision detection (e.g., BoxCollider2D, CircleCollider2D).
  • Physics2D Methods: Functions like OnCollisionEnter2D detect collisions.

You control physics by changing Rigidbody2D properties like velocity or applying forces.

csharp
public class SimplePhysics : MonoBehaviour {
    private Rigidbody2D rb;

    void Start() {
        rb = GetComponent<Rigidbody2D>();
    }

    void Update() {
        // Move right constantly
        rb.velocity = new Vector2(5f, rb.velocity.y);
    }

    void OnCollisionEnter2D(Collision2D collision) {
        Debug.Log("Collided with " + collision.gameObject.name);
    }
}
๐Ÿ’ป

Example

This example shows a GameObject moving right with 2D physics and detecting collisions. Attach this script to a GameObject with Rigidbody2D and a BoxCollider2D.

csharp
using UnityEngine;

public class MoveAndCollide : MonoBehaviour {
    private Rigidbody2D rb;

    void Start() {
        rb = GetComponent<Rigidbody2D>();
    }

    void Update() {
        rb.velocity = new Vector2(3f, rb.velocity.y);
    }

    void OnCollisionEnter2D(Collision2D collision) {
        Debug.Log("Hit " + collision.gameObject.name);
    }
}
Output
When the GameObject moves and hits another collider, the console logs: "Hit [OtherObjectName]"
โš ๏ธ

Common Pitfalls

  • Forgetting to add Rigidbody2D means physics won't affect the object.
  • Using 3D colliders (Collider) instead of 2D colliders (Collider2D) causes no collisions.
  • Setting Rigidbody2D to isKinematic disables physics forces.
  • Not setting collision layers properly can prevent collision events.
csharp
/* Wrong: Using 3D collider with 2D physics */
// GameObject has Rigidbody2D but BoxCollider (3D) instead of BoxCollider2D

/* Right: Use 2D collider */
// GameObject has Rigidbody2D and BoxCollider2D
๐Ÿ“Š

Quick Reference

Component/MethodPurpose
Rigidbody2DEnables physics simulation on 2D GameObjects
BoxCollider2D / CircleCollider2DDefine collision shapes for 2D objects
OnCollisionEnter2DCalled when this object collides with another
velocity (Rigidbody2D)Controls object speed and direction
AddForce (Rigidbody2D)Applies a force to move the object
โœ…

Key Takeaways

Add Rigidbody2D and Collider2D components to use 2D physics in Unity.
Use Rigidbody2D properties like velocity or AddForce to move objects.
Handle collisions with OnCollisionEnter2D and related event methods.
Always use 2D colliders with Rigidbody2D, not 3D colliders.
Check collision layers and Rigidbody2D settings to avoid common issues.