protected void GrabEnd() { if (m_grabbedObj != null) { if (m_grabbedObj.gameObject.tag == "Dummy") { DMS.DS_AttemptGrabEnd(m_grabbedObj.gameObject); } OVRPose localPose = new OVRPose { position = OVRInput.GetLocalControllerPosition(m_controller), orientation = OVRInput.GetLocalControllerRotation(m_controller) }; OVRPose offsetPose = new OVRPose { position = m_anchorOffsetPosition, orientation = m_anchorOffsetRotation }; localPose = localPose * offsetPose; OVRPose trackingSpace = transform.ToOVRPose() * localPose.Inverse(); Vector3 linearVelocity = trackingSpace.orientation * OVRInput.GetLocalControllerVelocity(m_controller); Vector3 angularVelocity = trackingSpace.orientation * OVRInput.GetLocalControllerAngularVelocity(m_controller); GrabbableRelease(linearVelocity, angularVelocity); } // Re-enable grab volumes to allow overlap events GrabVolumeEnable(true); }