private MouseState getAirVRPointerEventData(AirVRPointer pointer) { AirVRPointerEventData leftData; var created = getAirVRPointerData(pointer, kMouseLeftId, out leftData, true); leftData.Reset(); leftData.worldSpaceRay = pointer.GetWorldRay(); leftData.button = PointerEventData.InputButton.Left; leftData.scrollDelta = Vector2.zero; leftData.useDragThreshold = false; raycastForAirVRPointer(pointer, leftData, _raycastResultCache); var raycast = FindFirstRaycast(_raycastResultCache); leftData.pointerCurrentRaycast = raycast; _raycastResultCache.Clear(); Vector2 position = Vector2.zero; AirVRGraphicRaycaster airvrRaycaster = raycast.module as AirVRGraphicRaycaster; if (airvrRaycaster) { position = airvrRaycaster.GetScreenPosition(raycast); } AirVRPhysicsRaycaster airvrPhysicsRaycaster = raycast.module as AirVRPhysicsRaycaster; if (airvrPhysicsRaycaster) { position = airvrPhysicsRaycaster.GetScreenPosition(raycast.worldPosition); } if (created) { leftData.position = position; } leftData.delta = position - leftData.position; leftData.position = position; AirVRPointerEventData rightData; getAirVRPointerData(pointer, kMouseRightId, out rightData, true); copyAirVRPointerEventData(leftData, rightData); rightData.button = PointerEventData.InputButton.Right; AirVRPointerEventData middleData; getAirVRPointerData(pointer, kMouseMiddleId, out middleData, true); copyAirVRPointerEventData(leftData, middleData); middleData.button = PointerEventData.InputButton.Middle; _mouseState.SetButtonState(PointerEventData.InputButton.Left, getAirVRPointerButtonState(pointer), leftData); _mouseState.SetButtonState(PointerEventData.InputButton.Right, PointerEventData.FramePressState.NotChanged, rightData); _mouseState.SetButtonState(PointerEventData.InputButton.Middle, PointerEventData.FramePressState.NotChanged, middleData); return(_mouseState); }
private void raycastForAirVRPointer(AirVRPointer pointer, PointerEventData eventData, List <RaycastResult> raycastResults) { raycastResults.Clear(); foreach (var raycaster in AirVRPhysicsRaycaster.GetAllRaycasters()) { if (raycaster.pointer == pointer) { raycaster.Raycast(eventData, raycastResults); } } foreach (var raycaster in AirVRGraphicRaycaster.GetAllRaycasters()) { if (raycaster.pointer == pointer) { raycaster.Raycast(eventData, raycastResults); } } raycastResults.Sort(_raycastComparer); }