public void ForceDrop() { waitingOnFirstRelease = false; if (HeldObject != null) { var tempObject = HeldObject; if (HeldObjectInteractable.type == Interactable.InteractableType.Grabable) { if (grabJoint) { DestroyJoint(); } Vector3 RadiusVector = HeldObject.transform.position - Transform.position; HeldObject.GetComponent <Rigidbody>().AddForce(InteractorVelocity + Vector3.Cross(InteractorAngularVelocity, RadiusVector), ForceMode.VelocityChange); HeldObject.GetComponent <Rigidbody>().AddTorque(InteractorAngularVelocity / (1 + RadiusVector.magnitude), ForceMode.VelocityChange); } else if (HeldObjectInteractable.type == Interactable.InteractableType.Climbable) { ClimbScript.RemoveInfluencer(this); Climbing = false; Vector3 RadiusVector = HeldObject.transform.position - Transform.position; XRRigRigidbody.AddForce(-XRRigRigidbody.velocity, ForceMode.VelocityChange); // zero the velocity XRRigRigidbody.AddForce(-InteractorVelocity, ForceMode.VelocityChange); // fling } else if (HeldObjectInteractable.type == Interactable.InteractableType.JointManipulator) { if (grabJoint) { DestroyJoint(); } Vector3 RadiusVector = HeldObject.transform.position - Transform.position; HeldObject.GetComponent <Rigidbody>().AddForce(InteractorVelocity + Vector3.Cross(InteractorAngularVelocity, RadiusVector), ForceMode.VelocityChange); } HeldObject = null; HeldObjectInteractable = null; tempObject.GetComponent <Interactable>().Drop(); } }