void GetRayIntersection(IRaycastSource source) { // Move camera to position and rotation for the ray origin var eventCameraTransform = m_EventCamera.transform; eventCameraTransform.position = source.rayOrigin.position; eventCameraTransform.rotation = source.rayOrigin.rotation; var eventData = source.eventData; eventData.Reset(); eventData.delta = Vector2.zero; eventData.position = m_EventCamera.pixelRect.center; eventData.scrollDelta = Vector2.zero; eventSystem.RaycastAll(eventData, m_RaycastResultCache); var result = FindFirstRaycast(m_RaycastResultCache); // TODO: Investigate zero'ed world positions if (result.worldPosition == Vector3.zero) { foreach (var otherResult in m_RaycastResultCache) { if (otherResult.worldPosition != Vector3.zero) { result.worldPosition = otherResult.worldPosition; break; } } } eventData.pointerCurrentRaycast = result; m_RaycastResultCache.Clear(); }
void OnSelectReleased(IRaycastSource source) { var eventData = source.eventData; var currentOverGo = eventData.pointerCurrentRaycast.gameObject; OnPointerUp(eventData, currentOverGo); }
void OnSelectPressed(IRaycastSource source) { var eventData = source.eventData; var currentOverGo = eventData.pointerCurrentRaycast.gameObject; BeginPointerDown(eventData, currentOverGo); EndPointerDown(eventData, currentOverGo); }
internal bool IsValidHover(IRaycastSource source) { var eventData = source.eventData; var currentRaycast = eventData.pointerCurrentRaycast; var go = eventData.pointerDrag; if (!go) { go = currentRaycast.gameObject; } if (!go) { return(true); } if (go == gameObject) { return(true); } var rayOrigin = eventData.rayOrigin; DeviceData deviceData = null; foreach (var currentDevice in m_ToolModule.deviceData) { if (currentDevice.rayOrigin == rayOrigin) { deviceData = currentDevice; break; } } if (deviceData != null) { if (go.transform.IsChildOf(deviceData.rayOrigin)) // Don't let UI on this hand block the menu { return(false); } var scaledPointerDistance = currentRaycast.distance / this.GetViewerScale(); var menuHideFlags = deviceData.menuHideData; var mainMenu = deviceData.mainMenu; IMenu openMenu = mainMenu; if (deviceData.customMenu != null && menuHideFlags[mainMenu].hideFlags != 0) { openMenu = deviceData.customMenu; } if (openMenu == null) { return(false); } if (scaledPointerDistance < openMenu.localBounds.size.y + k_MenuHideMargin) { // Only set if hidden--value is reset every frame menuHideFlags[openMenu].hideFlags |= MenuHideFlags.OverUI; return(true); } return(menuHideFlags[openMenu].hideFlags != 0); } return(true); }