public override List <HitTestResult> HitTest(Vector2 point, HitTestResultType type)
        {
            Ray ray  = m_CachedCamera.ScreenPointToRay(point);
            int mask = 1 << LayerMask.NameToLayer("ARGameObject");
            List <HitTestResult> results = new List <HitTestResult>();
            RaycastHit           hit;

            if (Physics.Raycast(ray, out hit, float.MaxValue, mask))
            {
                HitTestResult result = new HitTestResult();
                result.position = hit.point;
                result.distance = Vector3.Distance(result.position, m_CachedCamera.transform.position);
                result.type     = HitTestResultType.ExistingPlaneUsingExtent;
            }
            return(results);
        }
        public override List <HitTestResult> HitTest(Vector2 point, HitTestResultType type)
        {
            ARHitTestResultType rt = ARHitTestResultType.ARHitTestResultTypeFeaturePoint;

            // translate HitTestResultType to ARHitTestResultType
            switch (type)
            {
            case HitTestResultType.FeaturePoint:
                rt = ARHitTestResultType.ARHitTestResultTypeFeaturePoint;
                break;

            case HitTestResultType.EstimatedHorizontalPlane:
                rt = ARHitTestResultType.ARHitTestResultTypeHorizontalPlane;
                break;

            case HitTestResultType.ExistingPlane:
                rt = ARHitTestResultType.ARHitTestResultTypeExistingPlane;
                break;

            case HitTestResultType.ExistingPlaneUsingExtent:
                rt = ARHitTestResultType.ARHitTestResultTypeExistingPlaneUsingExtent;
                break;
            }
            // call native HitTest
            ARPoint ap = new ARPoint {
                x = point.x, y = point.y
            };
            List <ARHitTestResult> hitTestResults = nativeInterface.HitTest(ap, rt);
            List <HitTestResult>   results        = new List <HitTestResult>();

            foreach (ARHitTestResult hitTestResult in hitTestResults)
            {
                HitTestResult result = new HitTestResult();
                result.distance = hitTestResult.distance;
                result.position = UnityARMatrixOps.GetPosition(hitTestResult.worldTransform);
                result.type     = type;
                results.Add(result);
            }
            return(results);
        }
        public override List <HitTestResult> HitTest(Vector2 point, HitTestResultType type)
        {
            TrackableHitFlags hf = TrackableHitFlags.None;

            // translate HitTestResultType to TrackableHitFlags
            switch (type)
            {
            case HitTestResultType.FeaturePoint:
                hf = TrackableHitFlags.FeaturePoint | TrackableHitFlags.FeaturePointWithSurfaceNormal;
                break;

            case HitTestResultType.EstimatedHorizontalPlane:
                hf = TrackableHitFlags.PlaneWithinPolygon;
                break;

            case HitTestResultType.ExistingPlane:
                hf = TrackableHitFlags.PlaneWithinInfinity;
                break;

            case HitTestResultType.ExistingPlaneUsingExtent:
                hf = TrackableHitFlags.PlaneWithinBounds;
                break;
            }
            // call native HitTest
            List <HitTestResult> results = new List <HitTestResult>();
            TrackableHit         hit;

            if (Frame.Raycast(point.x, point.y, hf, out hit))
            {
                HitTestResult result = new HitTestResult();
                result.distance = hit.Distance;
                result.position = hit.Pose.position;
                result.type     = type;
                results.Add(result);
            }
            return(results);
        }
Esempio n. 4
0
 public override List <HitTestResult> HitTest(Vector2 point, HitTestResultType type)
 {
     return(new List <HitTestResult>());
 }
 public abstract List <HitTestResult> HitTest(Vector2 point, HitTestResultType type);