当iOS设备检测到可追踪平面时,该平面将变为无限大。因此,将始终检测到相机镜头下方的最上面的平面。除了将摄像机从顶部平面放下外,无法返回到底部平面。如何在视图中重置飞机?

将Unity 2018.3与AR Foundation 1.5.0-preview一起使用6

 private void UpdatePlacementPose()
    {
        var screenCenter = Camera.current.ViewportToScreenPoint(new Vector3(0.5f, 0.5f));
        var hits = new List<ARRaycastHit>();
        arRaycast.Raycast(screenCenter, hits, UnityEngine.XR.ARSubsystems.TrackableType.Planes);

        placementPoseIsValid = hits.Count > 0;
        if (placementPoseIsValid)
        {
            placementPose = hits[0].pose;

            var cameraForward = Camera.current.transform.forward;
            var cameraBearing = new Vector3(cameraForward.x, 0, cameraForward.z).normalized;
            placementPose.rotation = Quaternion.LookRotation(cameraBearing);
        }
    }
}

检测到地板并创建了无限平面,但是随后检测到了桌面,并在此更大的高度上检测到了无限平面。这意味着地板将不再被注册,因为上平面始终将相机的视线阻挡在下平面上。返回到下平面的唯一方法是将摄像机物理移动到上平面以下,以使摄像机视图中没有平面。

最佳答案

更改

UnityEngine.XR.ARSubsystems.TrackableType.Planes


UnityEngine.XR.ARSubsystems.TrackableType.PlaneWithinPolygon

令人困惑的是,“平面”枚举值包括4种不同类型的平面,其中包括PlaneWithinInfinity,这会导致您不希望的效果。

相反,PlaneWithinPolygon将导致AR Raycast仅检测检测到的平面范围内的命中。

资料来源:https://docs.unity3d.com/Packages/[email protected]/api/UnityEngine.XR.ARSubsystems.TrackableType.html

09-07 16:44