Exemple #1
0
        internal void ProcessTrackedDevice(ref TrackedDeviceModel deviceState, bool force = false)
        {
            if (!deviceState.changedThisFrame && !force)
            {
                return;
            }

            var eventData = GetOrCreateCachedTrackedDeviceEvent();

            eventData.Reset();
            deviceState.CopyTo(eventData);

            eventData.button = PointerEventData.InputButton.Left;

            eventData.pointerCurrentRaycast = PerformRaycast(eventData);

            // Get associated camera, or main-tagged camera, or camera from raycast, and if *nothing* exists, then abort processing this frame.
            Camera camera = uiCamera ?? Camera.main ?? eventData.pointerCurrentRaycast.module?.eventCamera ?? null;

            if (camera != null)
            {
                var screenPosition = Vector2.zero;
                if (eventData.pointerCurrentRaycast.isValid)
                {
                    screenPosition = camera.WorldToScreenPoint(eventData.pointerCurrentRaycast.worldPosition);
                }
                else
                {
                    Vector3 endPosition = eventData.rayPoints.Count > 0 ? eventData.rayPoints[eventData.rayPoints.Count - 1] : Vector3.zero;
                    screenPosition     = camera.WorldToScreenPoint(endPosition);
                    eventData.position = screenPosition;
                }

                var thisFrameDelta = screenPosition - eventData.position;
                eventData.position = screenPosition;
                eventData.delta    = thisFrameDelta;

                ProcessMouseButton(deviceState.selectDelta, eventData);
                ProcessMouseMovement(eventData);
                ProcessMouseButtonDrag(eventData, trackedDeviceDragThresholdMultiplier);

                deviceState.CopyFrom(eventData);
            }

            deviceState.OnFrameFinished();
        }
        internal void ProcessTrackedDevice(ref TrackedDeviceModel deviceState)
        {
            if (!deviceState.changedThisFrame)
            {
                return;
            }

            var eventData = GetOrCreateCachedTrackedDeviceEvent();

            eventData.Reset();
            deviceState.CopyTo(eventData);

            eventData.button = PointerEventData.InputButton.Left;

            eventData.pointerCurrentRaycast = PerformRaycast(eventData);
            Camera mainCamera     = uiCamera ?? Camera.main;
            var    screenPosition = Vector2.zero;

            if (eventData.pointerCurrentRaycast.isValid)
            {
                screenPosition = mainCamera.WorldToScreenPoint(eventData.pointerCurrentRaycast.worldPosition);
            }
            else
            {
                Ray     ray         = eventData.ray;
                Vector3 endPosition = ray.origin + (ray.direction.normalized * eventData.maxDistance);
                screenPosition     = mainCamera.WorldToScreenPoint(endPosition);
                eventData.position = screenPosition;
            }

            var thisFrameDelta = screenPosition - eventData.position;

            eventData.position = screenPosition;
            eventData.delta    = thisFrameDelta;

            ProcessMouseButton(deviceState.selectDelta, eventData);
            ProcessMouseMovement(eventData);
            ProcessMouseButtonDrag(eventData, trackedDeviceDragThresholdMultiplier);

            deviceState.CopyFrom(eventData);

            deviceState.OnFrameFinished();
        }