Unity How to Drag Rigidbody using the Mouse Cursor

To drag Rigidbodies with the mouse cursor we need to create a script that will be attached to a Camera and detect if any Rigidbody was clicked, if so, it will initialize the drag motion.

Sharp Coder Video Player


using UnityEngine;

public class SC_DragRigidbody : MonoBehaviour
    public float forceAmount = 500;

    Rigidbody selectedRigidbody;
    Camera targetCamera;
    Vector3 originalScreenTargetPosition;
    Vector3 originalRigidbodyPos;
    float selectionDistance;

    // Start is called before the first frame update
    void Start()
        targetCamera = GetComponent<Camera>();

    void Update()
        if (!targetCamera)

        if (Input.GetMouseButtonDown(0))
            //Check if we are hovering over Rigidbody, if so, select it
            selectedRigidbody = GetRigidbodyFromMouseClick();
        if (Input.GetMouseButtonUp(0) && selectedRigidbody)
            //Release selected Rigidbody if there any
            selectedRigidbody = null;

    void FixedUpdate()
        if (selectedRigidbody)
            Vector3 mousePositionOffset = targetCamera.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, selectionDistance)) - originalScreenTargetPosition;
            selectedRigidbody.velocity = (originalRigidbodyPos + mousePositionOffset - selectedRigidbody.transform.position) * forceAmount * Time.deltaTime;

    Rigidbody GetRigidbodyFromMouseClick()
        RaycastHit hitInfo = new RaycastHit();
        Ray ray = targetCamera.ScreenPointToRay(Input.mousePosition);
        bool hit = Physics.Raycast(ray, out hitInfo);
        if (hit)
            if (hitInfo.collider.gameObject.GetComponent<Rigidbody>())
                selectionDistance = Vector3.Distance(ray.origin, hitInfo.point);
                originalScreenTargetPosition = targetCamera.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, selectionDistance));
                originalRigidbodyPos = hitInfo.collider.transform.position;
                return hitInfo.collider.gameObject.GetComponent<Rigidbody>();

        return null;


  • Attach the SC_DragRigidbody script to any Camera
  • Place the Objects you want to drag in front of the Camera (Make sure the objects you intend to drag have a Rigidbody component attached).

Now you can drag Rigidbodies with a mouse cursor!

Suggested Articles
Working with Unity's Rigidbody Component
How to Detect Collisions using Code in Unity
How to Check if a Rigidbody Player is Grounded in Unity
Implementing a 2D Grappling Hook in Unity
Creating a Flag Simulation in Unity
C# Script for Creating a Rigidbody Magnet in Unity
Adding Bouncing Ball Physics in Unity