// happens on grab by controller
        public virtual void OnGrab(GameObject grabGO)
        {
            MoveToNearestGrabPoint(grabGO.transform);

            //Debug.Log(controllerWrapper.name + " grabbed " + name);
            if (rigidbody != null)
            {
                if (grabMethod == GrabMethod.RigidbodyJoint)
                {
                    // grab with a joint on controller
                    JointGrabUtils.JointGrab(grabGO.transform, rigidbody);
                }
                else if (grabMethod == GrabMethod.RigidbodyKinematicMove)
                {
                    TransformGrabUtils.RigidbodyGrab(grabGO, rigidbody);
                }
            }
            else
            {
                if (grabMethod == GrabMethod.TransformOnlyPosition)
                {
                    TransformGrabUtils.TransformGrab(grabGO, transform, true, false);
                }
                else if (grabMethod == GrabMethod.transformOnlyRotation)
                {
                    TransformGrabUtils.TransformGrab(grabGO, transform, false, true);
                }
                else if (grabMethod == GrabMethod.TransformMove)
                {
                    TransformGrabUtils.TransformGrab(grabGO, transform);
                }
                else
                {
                    TransformGrabUtils.TransformGrab(grabGO, transform);
                }
            }

            whoGrabbin.Add(grabGO);

            if (OnGrabEvent != null)
            {
                OnGrabEvent(grabGO);
            }
        }
        // happens on ungrab by controller
        public virtual void OnUngrab(GameObject grabGO)
        {
            //Debug.Log(controllerWrapper.name + " released " + name);

            if (rigidbody != null)
            {
                JointGrabUtils.JointUngrab(grabGO.transform, rigidbody);
            }
            else
            {
                TransformGrabUtils.TransformUngrab(grabGO, transform);
            }

            whoGrabbin.Remove(grabGO);

            if (OnUngrabEvent != null)
            {
                OnUngrabEvent(grabGO);
            }
        }