public virtual void attach(Interactor interactor)
        {
            attachedInteractor = interactor;
#if CONF_JOINT
            ConfigurableJoint joint = gameObject.AddComponent <ConfigurableJoint>();
            joint.connectedBody = interactor.Rigid;
            //joint.spring = interactor.attachForce;
            //joint.damper = interactor.attachViscosity;
            joint.autoConfigureConnectedAnchor = false;
            joint.anchor          = Vector3.zero;
            joint.connectedAnchor = Vector3.zero;

            joint.xMotion = ConfigurableJointMotion.Limited;
            joint.yMotion = ConfigurableJointMotion.Limited;
            joint.zMotion = ConfigurableJointMotion.Limited;

            var limit = joint.linearLimitSpring;
            limit.spring            = interactor.attachForce;
            limit.damper            = interactor.attachViscosity;
            joint.linearLimitSpring = limit;
#else
            SpringConnection joint = gameObject.AddComponent <SpringConnection>();
            joint.connectedBody = interactor.Rigid;
            joint.force         = interactor.attachForce;
            joint.damping       = interactor.attachViscosity;
#endif
        }
        public virtual void detach()
        {
#if CONF_JOINT
            ConfigurableJoint joint = gameObject.GetComponent <ConfigurableJoint>();
            if (joint == null)
            {
                return;
            }
            GameObject.Destroy(joint);
#else
            SpringConnection joint = gameObject.GetComponent <SpringConnection>();
            if (joint == null)
            {
                return;
            }
            GameObject.Destroy(joint);
#endif

            attachedInteractor = null;
        }