如何调试Azure Spatial Anchors的NotLocatedAnchorDoesNotExist错误
可能的引发原因
- 配置类问题
- 你添加的代码包裹在
#if UNITY_DEBUG条件编译块中,若打包时未在Unity Player Settings中定义UNITY_DEBUG宏,修改的状态跳转、锚点ID赋值代码根本不会被编译执行,会导致查询锚点ID为空或状态未正确跳转 - 当前项目使用的Azure Spatial Anchors账户信息(账户ID、访问密钥、账户域、服务区域)与创建目标锚点时使用的账户不匹配,跨区域、跨账户都无法查询到对应锚点
- 代码中填写的锚点ID与Azure Portal中显示的目标锚点ID不完全一致,存在多余空格、字符遗漏或输入错误
- 你添加的代码包裹在
- 会话初始化问题
你直接将应用状态跳转到查询阶段,跳过了官方示例默认的权限申请(Hololens2空间映射权限、安卓相机权限)、传感器初始化、ASA会话环境特征预扫描的必要步骤,ASA会话未完成初始化就发起查询,要么没有足够的特征数据完成匹配,要么会话本身未启动导致查询一直卡住 - 环境匹配问题
当前查询锚点的物理环境与创建锚点时的环境差异过大,比如原有的特征墙面/物品被遮挡、移动,光线条件差异过大,ASA无法匹配到足够的环境特征,就会返回锚点不存在的错误,并非锚点真的被删除 - SDK版本兼容问题
当前项目使用的ASA SDK版本与创建锚点时使用的SDK版本差异过大,跨大版本的SDK之间存在锚点格式不兼容的情况,也会导致查询不到已存在的锚点
调试方案
- 第一步:核对基础配置
首先确认打包时是否开启了UNITY_DEBUG宏,确保你修改的代码能正常执行;再逐字核对当前项目的ASA账户信息、代码中的锚点ID,和创建锚点时的账户信息、Portal中的锚点ID完全一致 - 第二步:验证基础流程可用性
先注释掉你添加的状态跳转代码,跑通官方示例的完整创建-查询流程,确认当前设备、环境、配置可以正常创建和查询锚点,排除基础环境故障 - 第三步:补全必要初始化步骤
确认需要跳过的步骤时,保留权限申请、传感器初始化、ASA会话启动的逻辑,必须等ASA会话触发就绪回调之后,再发起锚点查询请求,不要直接跳转到查询状态 - 第四步:开启详细日志排查
在项目中开启ASA的详细日志输出,查询时查看日志中的请求参数和返回的详细错误码:如果返回404类错误则优先排查配置、ID问题,如果返回特征匹配度不足的提示,则引导设备在查询前先扫描一遍创建锚点时的周边环境,收集足够特征点后再发起查询
内容的提问来源于stack exchange,提问作者salvolannister
相关产品推荐
相关产品推荐

