コード例 #1
0
            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
            }
コード例 #2
0
            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();
            }