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