private void Start() { #if UNITY_ANDROID && AR_ON // We want to display notifications about tracking only when the camera feed is on screen (only in project or scene edit). GameManager.Instance.OnOpenProjectEditor += StartTrackingNotifications; GameManager.Instance.OnOpenSceneEditor += StartTrackingNotifications; GameManager.Instance.OnRunPackage += StartTrackingNotifications; // We want to stop notifications everywhere else. GameManager.Instance.OnCloseProject += StopTrackingNotifications; GameManager.Instance.OnCloseScene += StopTrackingNotifications; GameManager.Instance.OnStopPackage += StopTrackingNotifications; CalibrationManager.Instance.OnARCalibrated += OnARCalibrated; ARPlaneManager.planesChanged += OnPlanesChanged; ARPointCloudManager.pointCloudsChanged += OnPointCloudChanged; mainCamera = Camera.main.transform; //ARTrackedImageManager.trackedImagesChanged += OnTrackedImagesChanged; deviceTrackingStatus = DeviceTrackingStatus.NotTracking; anchorTrackingStatus = AnchorTrackingStatus.NotCalibrated; #endif }
/// <summary> /// Called when anchors of the ARAnchorManager are changed (not tracking, tracking, added, etc.) /// </summary> /// <param name="obj"></param> private void OnAnchorsChanged(ARAnchorsChangedEventArgs obj) { // TODO: check if it is working for cloud anchors if (CalibrationManager.Instance.Calibrated) { if (!CalibrationManager.Instance.UsingCloudAnchors) { //if (obj.updated[obj.updated.IndexOf(CalibrationManager.Instance.WorldAnchorLocal)].trackingState == TrackingState.Tracking) { switch (CalibrationManager.Instance.WorldAnchorLocal.trackingState) { case TrackingState.Tracking: if (anchorTrackingStatus != AnchorTrackingStatus.Tracking) { // cancel previously invoked tracking failure notification StopTrackingFailureNotifications(); StopTrackingFailureTimeout(); anchorTrackingStatus = AnchorTrackingStatus.Tracking; if (deviceTrackingStatus == DeviceTrackingStatus.WaitingForAnchor) { Notifications.Instance.ShowNotification("Tracking state", "Session Tracking"); GameManager.Instance.SceneSetActive(true); deviceTrackingStatus = DeviceTrackingStatus.Tracking; StopTrackingFailureNotifications(stopVideoOverride: true); } } break; case TrackingState.Limited: case TrackingState.None: // cancel previously invoked tracking failure notification StopTrackingFailureNotifications(); trackingAnchorFailureNotify = StartCoroutine(TrackingFailureNotify("Tracking lost!", "Look around your workspace.", 9f, anchorTrackingFailure: true)); TrackingLostAnimation.PlayVideo(); anchorTrackingStatus = AnchorTrackingStatus.NotTracking; GameManager.Instance.SceneSetActive(false); if (trackingAnchorFailureTimeout == null) { trackingAnchorFailureTimeout = StartCoroutine(TrackingFailureTimeout(AnchorTrackingLostTimeout)); } break; } } } else { anchorTrackingStatus = AnchorTrackingStatus.NotCalibrated; } }
private void OnARCalibrated(object sender, CalibrationEventArgs args) { anchorTrackingStatus = args.Calibrated ? anchorTrackingStatus : AnchorTrackingStatus.NotCalibrated; }