bool TryGetRaycastPoint(ref Vector3 raycastPos, ref Vector3 raycastNormal) { bool raycastHit = false; // Raycast against physics int hitCount = Physics.RaycastNonAlloc(m_Interactor.attachTransform.position, m_Interactor.attachTransform.forward, m_RaycastHits, m_MaxRaycastDistance, m_RaycastMask); if (hitCount != 0) { Array.Sort(m_RaycastHits, 0, hitCount, m_RaycastHitComparer); raycastPos = m_RaycastHits.First().point; raycastNormal = m_RaycastHits.First().normal; raycastHit = true; } // Get last Raycast against EventSystem system with attached XRPointer (if available) if (m_XRUIPointer && m_XRUIPointer.enabled) { TrackedDeviceModel model = m_XRUIPointer.GetTrackedDeviceModel(); RaycastResult lastRaycastResult = model.implementationData.lastFrameRaycast; if (lastRaycastResult.isValid) { if ((lastRaycastResult.worldPosition - m_Interactor.transform.position).sqrMagnitude < (raycastPos - m_Interactor.transform.position).sqrMagnitude) { raycastPos = lastRaycastResult.worldPosition; raycastNormal = lastRaycastResult.worldNormal; } raycastHit = true; } } return(raycastHit); }