You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调整Anchor的Y轴坐标以使其稳定贴合地面

带Mesh的AR锚点无绑定贴地面解决方案

核心逻辑

仅借用平面检测的地面高度值做一次性坐标换算,不对锚点和检测平面做任何父子绑定、位置约束,避免平面更新带动锚点位移。

具体操作步骤

  • 第一步:预计算Mesh底部相对于自身锚点原点的偏移值
    首先获取你要放置的Mesh的包围盒参数,计算出Mesh最低点相对于锚点自身原点的偏移值,记为meshBottomOffset,该值一般为负数(锚点原点默认在Mesh中心的场景下)。
  • 第二步:一次性获取放置位置的地面高度
    在你要放置锚点的X、Z坐标位置,调用平面检测接口向下检测水平面,仅读取该位置对应的地面世界Y坐标,记为detectedGroundY,拿到该值后即可终止对该平面的后续跟踪,无需保留平面实例。
  • 第三步:换算锚点最终坐标并放置
    仅修改锚点的Y轴坐标,X、Z坐标保持你预设的放置位置不变,换算公式如下:
    锚点最终Y坐标 = detectedGroundY - meshBottomOffset
    
    换算完成后直接调用普通锚点添加接口放入场景即可,不要使用平台提供的「锚点关联平面」类接口,避免产生绑定关系。

伪代码参考

// 预计算Mesh底部偏移
Mesh targetMesh = anchorObject.GetComponent<MeshFilter>().sharedMesh;
float meshBottomOffset = targetMesh.bounds.min.y - targetMesh.bounds.center.y;

// 获取目标放置点的地面高度
float placePosX = 0.5f;
float placePosZ = 0.5f;
float groundY = ARPlaneManager.GetGroundYAtPosition(placePosX, placePosZ);

// 设置最终锚点位置
Vector3 finalAnchorPos = new Vector3(placePosX, groundY - meshBottomOffset, placePosZ);
ARSession.AddAnchor(finalAnchorPos, anchorObject);

效果示意图

效果示意图

优化建议

  • 放置前可对同一点做3-5次平面检测,取Y坐标平均值作为detectedGroundY,降低单次检测误差。
  • 放置完成后即可关闭对应区域的平面检测功能,避免不必要的性能消耗。

内容的提问来源于stack exchange,提问作者indrajit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 21:54:05