Ejemplo n.º 1
0
        public static bool TryGetTrackingQuality(out int quality)
        {
            quality = default;

            if (!ARFrame.TextureIsAvailable())
            {
                return(false);
            }

            ARTrackable.TrackingState trackingState = ARFrame.GetTrackingState();

            switch (trackingState)
            {
            case ARTrackable.TrackingState.TRACKING:
                quality = 4;
                break;

            case ARTrackable.TrackingState.PAUSED:
                quality = 1;
                break;

            default:
                quality = 0;
                break;
            }

            return(true);
        }
Ejemplo n.º 2
0
        public void Update()
        {
            // Do not update if huaweiAR is not tracking.
            if (ARFrame.GetTrackingState() != ARTrackable.TrackingState.TRACKING)
            {
                m_mesh.Clear();
                return;
            }

            // Fill in the data to draw the point cloud.
            ARPointCloud pointCloud = ARFrame.AcquirePointCloud();

            pointCloud.GetPoints(ref m_points);
            pointCloud.Release();
            if (m_points.Count > 0)
            {
                // Update the mesh indicies array.
                m_pointIndex.Clear();
                for (int i = 0; i < Mathf.Min(m_points.Count, k_maxPointCount); i++)
                {
                    m_pointIndex.Add(i);
                }

                m_mesh.Clear();
                m_mesh.vertices = m_points.ToArray();
                m_mesh.SetIndices(m_pointIndex.ToArray(), MeshTopology.Points, 0);
            }
        }
Ejemplo n.º 3
0
        public void Update()
        {
            if (!world)
            {
                _DrawPlane();
            }

            Touch touch;

            if (ARFrame.GetTrackingState() == ARTrackable.TrackingState.TRACKING) // Only check for touch if we are tracking our environment.
            {
                touch = Input.GetTouch(0);
                switch (Input.touchCount)
                {
                case 1:
                    switch (touch.phase)
                    {
                    case TouchPhase.Began:
                        if (slingshot)         // Cleanup in case we missed the touch phase end or release
                        {
                            slingshot.Release();
                        }

                        slingshot = world.AddComponent <Slingshot>();
                        slingshot.Create(slingshotPrefab, projectilePrefab, projectileSource, indicator);

                        if (Camera.main != null)
                        {
                            slingshot.ProjectileToScreenDirection = Camera.main.ScreenPointToRay(touch.position).direction * 0.5f;
                        }
                        break;

                    case TouchPhase.Ended:
                    case TouchPhase.Canceled:
                        slingshot.Release();
                        slingshot = null;
                        break;

                    default:
                        if (Camera.main != null)
                        {
                            slingshot.ProjectileToScreenDirection = Camera.main.ScreenPointToRay(touch.position).direction * 0.5f;
                        }
                        break;
                    }
                    break;

                default:
                    if (touch.phase == TouchPhase.Began)
                    {
                        _CreateWorld(touch);
                    }
                    break;
                }
            }
        }
Ejemplo n.º 4
0
        public void Update()
        {
            _DrawPlane();
            Touch touch;

            if (
                ARFrame.GetTrackingState() == ARTrackable.TrackingState.TRACKING && // Only check for touch if we are tracking our environment.
                Input.touchCount >= 1 &&  // Check if we touched.
                (touch = Input.GetTouch(0)).phase == TouchPhase.Began)    // Check if this is the start of the touch action
            {
                _DrawARLogo(touch);
            }
        }
Ejemplo n.º 5
0
        public void Update()
        {
            Touch touch;

            if (ARFrame.GetTrackingState() != ARTrackable.TrackingState.TRACKING ||
                Input.touchCount < 1 || (touch = Input.GetTouch(0)).phase != TouchPhase.Began)
            {
            }
            else
            {
                trackTest(touch);
            }
        }
Ejemplo n.º 6
0
        public void Update()
        {
            _DrawPlane();
            Touch touch;

            if (ARFrame.GetTrackingState() != ARTrackable.TrackingState.TRACKING ||
                Input.touchCount < 1 || (touch = Input.GetTouch(0)).phase != TouchPhase.Began)
            {
            }
            else
            {
                _DrawARLogo(touch);
            }
        }
Ejemplo n.º 7
0
        private void SetSessionState()
        {
            bool isTracking = ARFrame.GetTrackingState() == ARTrackable.TrackingState.TRACKING;

            if (isTracking != m_IsTracking)
            {
                ImageRunUpdate();
            }

            var captureButton  = workspaceManager.captureButton.GetComponent <Button>();
            var localizeButton = visualizeManager.localizeButton.GetComponent <Button>();

            captureButton.interactable  = isTracking;
            localizeButton.interactable = isTracking;
            m_IsTracking = isTracking;
        }
Ejemplo n.º 8
0
        public ARState GetState()
        {
            ARState state = new ARState
            {
                frameHandle   = 0,
                sessionHandle = 0,
                tracked       = false
            };

 #if HAS_GOOGLE_ARCORE
            if (GetSelectedAR() == ARSDK.ARCORE)
            {
                NativeSession native = LifecycleManager.Instance.NativeSession;
                if (native != null)
                {
                    state = new ARState
                    {
                        frameHandle   = native.FrameHandle.ToInt32(),
                        sessionHandle = native.SessionHandle.ToInt32(),
                        tracked       = LifecycleManager.Instance.SessionStatus == SessionStatus.Tracking
                    };
                }
            }
#endif

#if HAS_HUAWEI_ARENGINE
            if (GetSelectedAR() == ARSDK.ARENGINE)
            {
                NDKSession native = ARSessionManager.Instance.m_ndkSession;
                if (native != null)
                {
                    state = new ARState
                    {
                        frameHandle   = native.FrameHandle.ToInt32(),
                        sessionHandle = native.SessionHandle.ToInt32(),
                        tracked       = ARFrame.GetTrackingState() == ARTrackable.TrackingState.TRACKING
                    };
                }
            }
#endif

            return(state);
        }
Ejemplo n.º 9
0
    // Update is called once per frame
    void Update()
    {
        if (m_SDKStarted)
        {
            return;
        }

        bool isHWARTracking   = false;
        bool isARCoreTracking = false;

        #if HWAR
        isHWARTracking = ARFrame.GetTrackingState() == ARTrackable.TrackingState.TRACKING;
        #endif
        isARCoreTracking = UnityEngine.XR.ARFoundation.ARSession.state == UnityEngine.XR.ARFoundation.ARSessionState.SessionTracking;

        if (isHWARTracking || isARCoreTracking)
        {
            OnStartImmersal();
        }
    }
Ejemplo n.º 10
0
        public override void Update()
        {
            isTracking = ARFrame.GetTrackingState() == ARTrackable.TrackingState.TRACKING;

            base.Update();
        }
Ejemplo n.º 11
0
        public void Update()
        {
            // Exit the app when the 'back' button is pressed.
            if (Input.GetKey(KeyCode.Escape))
            {
                Application.Quit();
            }

            // Check that motion tracking is tracking.
            if (ARFrame.GetTrackingState() != ARTrackable.TrackingState.TRACKING)
            {
                ARDebug.LogInfo("GetTrackingState no tracing return <<");
                return;
            }

            // Get updated augmented images for this frame.
            ARFrame.GetTrackables <ARAugmentedImage>(m_TempAugmentedImages, ARTrackableQueryFilter.UPDATED);
            ARDebug.LogInfo("m_TempAugmentedImages size {0}", m_TempAugmentedImages.Count);

            // Create visualizers and anchors for updated augmented images that are tracking and do not previously
            // have a visualizer. Remove visualizers for stopped images.
            foreach (var image in m_TempAugmentedImages)
            {
                AugmentedImageVisualizer visualizer = null;
                m_Visualizers.TryGetValue(image.GetDataBaseIndex(), out visualizer);

                ARDebug.LogInfo("GetTrackingState {0}", image.GetTrackingState());
                if (image.GetTrackingState() == ARTrackable.TrackingState.TRACKING && visualizer != null)
                {
                    visualizer.Image = image;
                    ARDebug.LogInfo("update position {0} rotation {1}", image.GetCenterPose().position, image.GetCenterPose().rotation);
                }

                if (image.GetTrackingState() == ARTrackable.TrackingState.TRACKING && visualizer == null)
                {
                    // Create an anchor to ensure that ARCore keeps tracking this augmented image.
                    //ARAnchor anchor = image.CreateAnchor(image.GetCenterPose());
                    //visualizer = (AugmentedImageVisualizer)Instantiate(AugmentedImageVisualizerPrefab, anchor.GetPose().position, anchor.GetPose().rotation);
                    visualizer = (AugmentedImageVisualizer)Instantiate(AugmentedImageVisualizerPrefab, image.GetCenterPose().position, image.GetCenterPose().rotation);
                    ARDebug.LogInfo("create position {0} rotation {1}", image.GetCenterPose().position, image.GetCenterPose().rotation);
                    visualizer.Image = image;
                    m_Visualizers.Add(image.GetDataBaseIndex(), visualizer);
                }
                else if (image.GetTrackingState() == ARTrackable.TrackingState.STOPPED && visualizer != null)
                {
                    m_Visualizers.Remove(image.GetDataBaseIndex());
                    GameObject.Destroy(visualizer.gameObject);
                }
            }

            // Show the fit-to-scan overlay if there are no images that are Tracking.
            foreach (var visualizer in m_Visualizers.Values)
            {
                if (visualizer.Image.GetTrackingState() == ARTrackable.TrackingState.TRACKING)
                {
                    FitToScanOverlay.SetActive(false);
                    return;
                }
            }

            //FitToScanOverlay.SetActive(true);
        }