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); }
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); }