/// <summary> /// Request new tracker results when new frame is available. /// </summary> public virtual void OnPostRender() { if (colorTrackerPanel != null && colorTrackerPanel.GetColorTracker() != null) { ColorTracker tracker = colorTrackerPanel.GetColorTracker(); if (tracker == null) { return; } List <TrackerResult> colorTrackerResults = tracker.Compute(); CreateObjectsIfNeeded(colorTrackerResults.Count); for (var t = 0; t < colorTrackerResults.Count; t++) { TrackerResult r = colorTrackerResults[t]; if (r.state == TrackingState.Tracked) { CoordinateMapper.ConvertInputToScreen(tracker.input, r.center, ref _reusablePosition); _reusablePosition.z = perspectiveCamera.nearClipPlane + _scaleRatio - Mathf.Clamp(_reusablePosition.z, 0.0f, 0.8f); _targets[t].transform.position = perspectiveCamera.ScreenToWorldPoint(_reusablePosition); _targets[t].SetActive(true); } else { _targets[t].SetActive(false); } } } }
void OnPostRender() { if (!trackerPanel) { return; } _tracker = trackerPanel.GetColorTracker(); if (_tracker == null || Camera.main == null) { return; } if (!_tracker.isRunning) { DestroyPreviousGraphics(); return; } List <TrackerResult> result = _tracker.Compute(); if (_graphics.Count != result.Count) { DestroyPreviousGraphics(); CreateNewGraphics(result.Count); } for (var i = 0; i < result.Count; i++) { GameObject actual = _graphics[i]; TrackerResult target = result[i]; if (target.state == TrackingState.Tracked) { CoordinateMapper.ConvertInputToScreen(_tracker.input, target.center, ref _reusableScreenPosition); CoordinateMapper.ConvertScreenToUI(_reusableScreenPosition, actual.GetComponent <RectTransform>()); actual.SetActive(true); } else { actual.SetActive(false); } } }
private void UpdateEventsAndRaycast() { if (colorTrackerPanel == null) { return; } ColorTracker tracker = colorTrackerPanel.GetColorTracker(); if (tracker == null) { return; } List <TrackerResult> colorTrackerResults = tracker.GetLatestResult(); AllocatePointerDataIfNeeded(colorTrackerResults); for (var t = 0; t < colorTrackerResults.Count; t++) { PointerEventData current = _pointerData[t]; current.Reset(); TrackerResult r = colorTrackerResults[t]; if (r.state == TrackingState.Tracked) { CoordinateMapper.ConvertInputToScreen(tracker.input, r.center, ref _reusablePosition); } else { _reusablePosition.Set(-150, -150, 0); } current.position = _reusablePosition; current.delta = r.linearVelocity; eventSystem.RaycastAll(current, m_RaycastResultCache); current.pointerCurrentRaycast = FindFirstRaycast(m_RaycastResultCache); UpdateHoverAndExit(current); HandleTrigger(current); m_RaycastResultCache.Clear(); } }