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(); }