当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