Unity Vuforia AR:交互后3D物体位置意外偏移问题求助
Unity+Vuforia地面平面点击物体偏移问题解决方案
检查Plane Finder的事件绑定逻辑:别让物体的点击事件触发放置逻辑。如果你的3D物体上挂了
EventTrigger这类点击检测组件,会和Plane Finder的屏幕点击逻辑冲突——再次点击物体时,Vuforia会误判为点击地面,重新计算平面位置导致偏移。只给屏幕点击(比如OnScreenClicked)绑定放置逻辑,物体的交互逻辑单独处理。放置完成后锁定地面跟踪:物体生成后,直接禁用
PlaneFinderBehaviour,避免后续点击触发重新放置:var planeFinder = FindObjectOfType<PlaneFinderBehaviour>(); if (planeFinder != null) planeFinder.enabled = false;也可以锁定锚点的跟踪状态,防止锚点漂移:
var anchor = FindObjectOfType<AnchorBehaviour>(); if (anchor != null) anchor.enabled = false;调整物体碰撞体:如果物体的碰撞体范围过大或和地面平面碰撞体重叠,点击物体时会被Vuforia识别为点击地面。缩小碰撞体到物体实际范围,或者给地面和物体分别设置不同的标签,用射线检测区分点击目标。
分离点击逻辑:用射线检测明确区分点击的是地面还是已放置的物体,避免逻辑混淆:
void Update() { if (Input.GetMouseButtonDown(0)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out RaycastHit hit)) { if (hit.collider.CompareTag("GroundPlane")) { // 执行物体放置逻辑 } else if (hit.collider.CompareTag("PlacedObject")) { // 执行物体的交互逻辑,不触发放置 } } } }重置跟踪状态(可选):如果是跟踪漂移导致的偏移,可在物体放置后重置目标跟踪器,但注意不要频繁调用,避免影响正常AR体验:
var objectTracker = TrackerManager.Instance.GetTracker<ObjectTracker>(); if (objectTracker != null) objectTracker.Reset();
内容的提问来源于stack exchange,提问作者byun Amina
相关产品推荐
相关产品推荐

