public virtual void ProcessAdded(object sender, PointerEventArgs pointerEventArgs) { #if UNITY_5_6_OR_NEWER uiSampler.Begin(); #endif var pointers = pointerEventArgs.Pointers; var raycast = new RaycastResult(); var count = pointers.Count; for (var i = 0; i < count; i++) { var pointer = pointers[i]; var over = pointer.GetOverData(); // Don't update the pointer if it is not over an UI element if (over.Type != HitData.HitType.UI) { continue; } PointerEventData data; GetPointerData(pointer.Id, out data, true); data.Reset(); var target = over.Target; var currentOverGo = target == null ? null : target.gameObject; data.position = pointer.Position; data.delta = Vector2.zero; convertRaycast(over.RaycastHitUI, ref raycast); raycast.screenPosition = data.position; data.pointerCurrentRaycast = raycast; input.HandlePointerExitAndEnter(data, currentOverGo); } #if UNITY_5_6_OR_NEWER uiSampler.End(); #endif }
public virtual void ProcessUpdated(object sender, PointerEventArgs pointerEventArgs) { uiSampler.Begin(); var pointers = pointerEventArgs.Pointers; var raycast = new RaycastResult(); var count = pointers.Count; for (var i = 0; i < count; i++) { var pointer = pointers[i]; // Don't update the pointer if it is pressed not over an UI element if ((pointer.Buttons & Pointer.PointerButtonState.AnyButtonPressed) > 0) { var press = pointer.GetPressData(); if (press.Type != HitData.HitType.UI) { continue; } } var over = pointer.GetOverData(); // Don't update the pointer if it is not over an UI element if (over.Type != HitData.HitType.UI) { continue; } PointerEventData data; GetPointerData(pointer.Id, out data, true); data.Reset(); var target = over.Target; var currentOverGo = target == null ? null : target.gameObject; data.position = pointer.Position; data.delta = pointer.Position - pointer.PreviousPosition; convertRaycast(over.RaycastHitUI, ref raycast); raycast.screenPosition = data.position; data.pointerCurrentRaycast = raycast; input.HandlePointerExitAndEnter(data, currentOverGo); bool moving = data.IsPointerMoving(); if (moving && data.pointerDrag != null && !data.dragging && ShouldStartDrag(data.pressPosition, data.position, input.eventSystem.pixelDragThreshold, data.useDragThreshold)) { ExecuteEvents.Execute(data.pointerDrag, data, ExecuteEvents.beginDragHandler); data.dragging = true; } // Drag notification if (data.dragging && moving && data.pointerDrag != null) { // Before doing drag we should cancel any pointer down state // And clear selection! if (data.pointerPress != data.pointerDrag) { ExecuteEvents.Execute(data.pointerPress, data, ExecuteEvents.pointerUpHandler); data.eligibleForClick = false; data.pointerPress = null; data.rawPointerPress = null; } ExecuteEvents.Execute(data.pointerDrag, data, ExecuteEvents.dragHandler); } var mousePointer = pointer as MousePointer; if (mousePointer != null && !Mathf.Approximately(mousePointer.ScrollDelta.sqrMagnitude, 0.0f)) { data.scrollDelta = mousePointer.ScrollDelta; var scrollHandler = ExecuteEvents.GetEventHandler <IScrollHandler>(currentOverGo); ExecuteEvents.ExecuteHierarchy(scrollHandler, data, ExecuteEvents.scrollHandler); } } uiSampler.End(); }