コード例 #1
0
    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
    }
コード例 #2
0
    /// <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;
        }
    }
コード例 #3
0
 private void OnARCalibrated(object sender, CalibrationEventArgs args)
 {
     anchorTrackingStatus = args.Calibrated ? anchorTrackingStatus : AnchorTrackingStatus.NotCalibrated;
 }