How to drag a rigidbody object with the mouse?

I’m trying to move a rigidbody object by dragging it with the mouse. Over the past several hours I’ve exhausted google and tried probably 50 different rigidbody dragging scripts and not one of them has worked. I can get a normal dragging script to work fine, but it requires a 2D box collider and unity won’t allow both that and a rigidbody on the same object.

I thought the standard assets DragRigidbody.cs would work for sure but it doesn’t seem to do anything. When I tried it I made sure isKinematic was turned off and I even added a spring joint but no luck.

Can anyone tell me what I’m doing wrong here and how I can drag a rigidbody object with the mouse?

//DragRigidbody.cs

using System;
using System.Collections;
using UnityEngine;

namespace UnityStandardAssets.Utility
{
    public class DragRigidbody : MonoBehaviour
    {
        const float k_Spring = 50.0f;
        const float k_Damper = 5.0f;
        const float k_Drag = 10.0f;
        const float k_AngularDrag = 5.0f;
        const float k_Distance = 0.2f;
        const bool k_AttachToCenterOfMass = false;

        private SpringJoint m_SpringJoint;


        private void Update()
        {
            // Make sure the user pressed the mouse down
            if (!Input.GetMouseButtonDown(0))
            {
                return;
            }

            var mainCamera = FindCamera();

            // We need to actually hit an object
            RaycastHit hit = new RaycastHit();
            if (
                !Physics.Raycast(mainCamera.ScreenPointToRay(Input.mousePosition).origin,
                                 mainCamera.ScreenPointToRay(Input.mousePosition).direction, out hit, 100,
                                 Physics.DefaultRaycastLayers))
            {
                return;
            }
            // We need to hit a rigidbody that is not kinematic
            if (!hit.rigidbody || hit.rigidbody.isKinematic)
            {
                return;
            }

            if (!m_SpringJoint)
            {
                var go = new GameObject("Rigidbody dragger");
                Rigidbody body = go.AddComponent<Rigidbody>();
                m_SpringJoint = go.AddComponent<SpringJoint>();
                body.isKinematic = true;
            }

            m_SpringJoint.transform.position = hit.point;
            m_SpringJoint.anchor = Vector3.zero;

            m_SpringJoint.spring = k_Spring;
            m_SpringJoint.damper = k_Damper;
            m_SpringJoint.maxDistance = k_Distance;
            m_SpringJoint.connectedBody = hit.rigidbody;

            StartCoroutine("DragObject", hit.distance);
        }


        private IEnumerator DragObject(float distance)
        {
            var oldDrag = m_SpringJoint.connectedBody.drag;
            var oldAngularDrag = m_SpringJoint.connectedBody.angularDrag;
            m_SpringJoint.connectedBody.drag = k_Drag;
            m_SpringJoint.connectedBody.angularDrag = k_AngularDrag;
            var mainCamera = FindCamera();
            while (Input.GetMouseButton(0))
            {
                var ray = mainCamera.ScreenPointToRay(Input.mousePosition);
                m_SpringJoint.transform.position = ray.GetPoint(distance);
                yield return null;
            }
            if (m_SpringJoint.connectedBody)
            {
                m_SpringJoint.connectedBody.drag = oldDrag;
                m_SpringJoint.connectedBody.angularDrag = oldAngularDrag;
                m_SpringJoint.connectedBody = null;
            }
        }


        private Camera FindCamera()
        {
            if (GetComponent<Camera>())
            {
                return GetComponent<Camera>();
            }

            return Camera.main;
        }
    }
}

huh? you can have a collider and a rigidbody on the same gameobject… where did this come from?

are you doing a 3d or 2d game?

Aah it seems it wouldnt let me add it because the Rigidbody is 3D and the box collider is 2D. I knew I could have sworn I’ve used colliders and rigidbodies on the same object in the past lol.

I just tried using a rigidbody2d and they seem to come with a whole host of problems. Those problems aside though, I still can’t seem to get a dragging script to work with one.

Edit: I just did away with the 2D box collider and added a 3D box collider and that seemed to solve the problem, though I’m sure the 2D collider was probably much more efficient than the 3D one.