Exemple #1
0
        private bool HitTestWithResultType(ARPoint point, ARHitTestResultType resultTypes)
        {
            List <ARHitTestResult> list = UnityARSessionNativeInterface.GetARSessionNativeInterface().HitTest(point, resultTypes);

            if (list.Count > 0)
            {
                using (List <ARHitTestResult> .Enumerator enumerator = list.GetEnumerator())
                {
                    if (enumerator.MoveNext())
                    {
                        ARHitTestResult current = enumerator.Current;
                        UnityEngine.Debug.Log("Got hit!");
                        m_HitTransform.position = UnityARMatrixOps.GetPosition(current.worldTransform);
                        m_HitTransform.rotation = UnityARMatrixOps.GetRotation(current.worldTransform);
                        Vector3 position  = m_HitTransform.position;
                        object  arg       = position.x;
                        Vector3 position2 = m_HitTransform.position;
                        object  arg2      = position2.y;
                        Vector3 position3 = m_HitTransform.position;
                        UnityEngine.Debug.Log($"x:{arg:0.######} y:{arg2:0.######} z:{position3.z:0.######}");
                        return(true);
                    }
                }
            }
            return(false);
        }
Exemple #2
0
        void DoBegan(Touch touch)
        {
            if (Input.touchCount > 1)
            {
                return;
            }

            m_LastHitType = HitType.None;

            // First, see if we hit any face
            if (DoPhysicsRaycast(touch, ref m_PhysicsHit))
            {
                m_LastHitType       = HitType.BoxFace;
                m_BeganFacePosition = GetFaceFromCollider(m_PhysicsHit.collider).position;
                SetFaceMaterial(m_PhysicsHit.collider, m_SelectedMaterial);
                return;
            }

            // Check AR plane
            ARHitTestResult arHit = new ARHitTestResult();

            if (DoARRaycast(touch, ref arHit))
            {
                if (m_ARHit.anchorIdentifier != arHit.anchorIdentifier)
                {
                    // This means we've hit a different plane, so move immediately
                    transform.position = UnityARMatrixOps.GetPosition(arHit.worldTransform);
                }

                m_LastHitType = HitType.ARPlane;
                m_ARHit       = arHit;
            }
        }
        void ShowWorldUIAtRaycastHitPoint()
        {
            if (m_holdActivatedUI == null)
            {
                return;
            }

                        #if UNITY_EDITOR
            Plane p   = new Plane(new Vector3(0, 0, 1.0f), new Vector3(0, 0, -3.21f));
            var   ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            float enter;
            if (p.Raycast(ray, out enter))
            {
                m_holdActivatedUI.ShowRequest(ray.GetPoint(enter), Quaternion.identity);
            }
                        #else
            var             viewportPoint = Camera.main.ScreenToViewportPoint(Input.mousePosition);
            ARHitTestResult hitResult     = default(ARHitTestResult);
            if (ARHitTestUtils.GetBestARHitResult(viewportPoint, ref hitResult))
            {
                m_holdActivatedUI.ShowRequest(UnityARMatrixOps.GetPosition(hitResult.worldTransform),
                                              UnityARMatrixOps.GetRotation(hitResult.worldTransform));
            }
                        #endif
        }
        public static bool GetBestARHitResult(Vector2 viewportPoint, ref ARHitTestResult res)
        {
            ARPoint point = new ARPoint {
                x = viewportPoint.x,
                y = viewportPoint.y
            };

            // prioritize reults types
            ARHitTestResultType[] resultTypes =
            {
                ARHitTestResultType.ARHitTestResultTypeExistingPlaneUsingExtent,
                // if you want to use infinite planes use this:
                //ARHitTestResultType.ARHitTestResultTypeExistingPlane,
                ARHitTestResultType.ARHitTestResultTypeHorizontalPlane,
                ARHitTestResultType.ARHitTestResultTypeFeaturePoint
            };

            foreach (ARHitTestResultType resultType in resultTypes)
            {
                if (GetARHitResult(point, resultType, out res))
                {
                    return(true);
                }
            }
            return(false);
        }
        static ARHitTestResult GetHitTestResultFromResultData(UnityARHitTestResult resultData)
        {
            ARHitTestResult arHitTestResult = new ARHitTestResult();

            arHitTestResult.type           = resultData.type;
            arHitTestResult.distance       = resultData.distance;
            arHitTestResult.localTransform = resultData.localTransform;
            arHitTestResult.worldTransform = resultData.worldTransform;
            arHitTestResult.isValid        = resultData.isValid;
            if (resultData.anchor != IntPtr.Zero)
            {
                arHitTestResult.anchorIdentifier = Marshal.PtrToStringAuto(resultData.anchor);
            }
            return(arHitTestResult);
        }
Exemple #6
0
        bool DoARRaycast(Touch touch, ref ARHitTestResult hitOut)
        {
            var     screenPosition = Camera.main.ScreenToViewportPoint(touch.position);
            ARPoint point          = new ARPoint()
            {
                x = screenPosition.x,
                y = screenPosition.y
            };

            var hitResults = UnityARSessionNativeInterface.GetARSessionNativeInterface().HitTest(point, ARHitTestResultType.ARHitTestResultTypeExistingPlaneUsingExtent);

            if (hitResults.Count < 1)
            {
                return(false);
            }

            hitOut = hitResults[0];
            return(true);
        }
 static ARHitTestResult GetHitTestResultFromResultData(UnityARHitTestResult resultData)
 {
     #if PLATOFORM_IOS
     ARHitTestResult arHitTestResult = new ARHitTestResult();
     arHitTestResult.type           = resultData.type;
     arHitTestResult.distance       = resultData.distance;
     arHitTestResult.localTransform = resultData.localTransform;
     arHitTestResult.worldTransform = resultData.worldTransform;
     arHitTestResult.isValid        = resultData.isValid;
     if (resultData.anchor != IntPtr.Zero)
     {
         arHitTestResult.anchorIdentifier = Marshal.PtrToStringAuto(resultData.anchor);
     }
     return(arHitTestResult);
     #else
     Debug.LogError("Not available on non iOS platform");
     return(new ARHitTestResult());
     #endif
 }
Exemple #8
0
        void MovePlane(Touch touch)
        {
            ARHitTestResult arHit = new ARHitTestResult();

            if (DoARRaycast(touch, ref arHit))
            {
                var hitPosition = UnityARMatrixOps.GetPosition(arHit.worldTransform);

                if (m_ARHit.anchorIdentifier != arHit.anchorIdentifier)
                {
                    // This means we've hit a different plane, so move to it immediately
                    transform.position = hitPosition;
                }
                else
                {
                    // Calculate the difference
                    var lastPosition = UnityARMatrixOps.GetPosition(m_ARHit.worldTransform);
                    var delta        = hitPosition - lastPosition;
                    transform.position += delta;
                }

                m_ARHit = arHit;
            }
        }
        public static bool GetARHitResult(ARPoint point, ARHitTestResultType resultTypes, out ARHitTestResult res)
        {
            List <ARHitTestResult> hitResults = UnityARSessionNativeInterface.GetARSessionNativeInterface().HitTest(point, resultTypes);

            if (hitResults.Count > 0)
            {
                res = hitResults[0];
                return(true);
            }
            return(false);
        }