Esempio n. 1
0
    public LayerMask collisionLayer = 1 << 10;  //ARKitPlane layer

    PlaneHitResult HitTestWithResultType(ARPoint point, ARHitTestResultType resultTypes)
    {
        List <ARHitTestResult> hitResults = UnityARSessionNativeInterface.GetARSessionNativeInterface().HitTest(point, resultTypes);

        if (hitResults.Count > 0)
        {
            foreach (var hitResult in hitResults)
            {
                Debug.Log("Got hit!");

                var planeHitResult = new PlaneHitResult();
                planeHitResult.position  = UnityARMatrixOps.GetPosition(hitResult.worldTransform);
                planeHitResult.rotation  = Quaternion.AngleAxis(90, Vector3.right);
                planeHitResult.hitResult = hitResult;

                //Debug.Log(string.Format("x:{0:0.######} y:{1:0.######} z:{2:0.######}", textObject.transform.position.x, textObject.transform.position.y, textObject.transform.position.z));
                //Debug.Log(string.Format("rotation x:{0:0.######} y:{1:0.######} z:{2:0.######}", textObject.transform.rotation.x, textObject.transform.rotation.y, textObject.transform.rotation.z));
                return(planeHitResult);
            }
        }
        return(null);
    }
Esempio n. 2
0
    public PlaneHitResult PlaneHitTest()
    {
        ARHitTestResultType[] resultTypes =
        {
            ARHitTestResultType.ARHitTestResultTypeExistingPlaneUsingGeometry,
            //ARHitTestResultType.ARHitTestResultTypeExistingPlaneUsingExtent,
            // if you want to use infinite planes use this:
            //ARHitTestResultType.ARHitTestResultTypeExistingPlane,
            //ARHitTestResultType.ARHitTestResultTypeEstimatedHorizontalPlane,
            //ARHitTestResultType.ARHitTestResultTypeEstimatedVerticalPlane,
            //ARHitTestResultType.ARHitTestResultTypeFeaturePoint
        };

        Touch touch = new Touch();

        touch.position = new Vector2(Camera.main.pixelWidth / 2f, Camera.main.pixelHeight / 2f);
        var screenPosition = Camera.main.ScreenToViewportPoint(touch.position);

        ARPoint point = new ARPoint
        {
            x = screenPosition.x,
            y = screenPosition.y
        };

        foreach (ARHitTestResultType resultType in resultTypes)
        {
            PlaneHitResult result = HitTestWithResultType(point, resultType);

            if (result != null)
            {
                return(result);
            }
        }

        return(null);
    }