private void GripDown(OVRInput.Controller c) { if (c == m_OVRController) { // Storing a possible reference Transform closest = null; // switch based on grab type switch (m_grabType) { case (grabType.Grip): // If grip, we grab from our grip detector closest = m_gripDetector.closestInRange; break; case (grabType.Distance): // We cannot use the teleport ponter for grabbing -_- closest = (m_pointer.GetPointerType() != "Teleport" && m_pointer.raycastTarget != null && m_pointer.raycastTarget.GetComponent <CustomGrabbable>()) ? m_pointer.raycastTarget.transform : null; break; case (grabType.Both): // If grip, we grab from our grip detector closest = m_gripDetector.closestInRange; // closest is updated based on if it's already not null or not - if it is still null, we check the pointer closest = (closest != null) ? closest : (m_pointer.GetPointerType() != "Teleport" && m_pointer.raycastTarget != null && m_pointer.raycastTarget.GetComponent <CustomGrabbable>()) ? m_pointer.raycastTarget.transform : null; break; } // If closest is not == null, we grab it! if (closest != null && m_grabbedObject == null) { GrabBegin(closest.GetComponent <CustomGrabbable>()); } } }