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

Unity+Azure空间锚点问题:SpatialAnchorManager为何突然消失?

Azure空间锚点场景切换异常问题排查

问题描述

我正在Unity中基于微软Azure空间锚点教程开发Hololens 2应用,技术栈包含Unity、Mixed Reality Toolkit和OpenXR。设置了两个功能场景:

  • 「编辑模式」场景:用于放置空间锚点
  • 「预览模式」场景:用于查看已放置的锚点

每个场景都有脚本支持按钮点击切换场景,且两个场景中SpatialAnchorManager组件都与切换脚本挂载在同一个游戏对象上,通过以下代码获取组件:

private SpatialAnchorManager anchorManager;

void Start()
{
   anchorManager = GetComponent<SpatialAnchorManager>();
}

从编辑模式切换到预览模式时一切正常,切换代码如下:

public void moveToPreview()
{
  if(anchorManager.IsSessionStarted)
  { 
    anchorManager.DestroySession();
  }
  SceneManager.LoadScene("PreviewScene");
}

但从预览模式切回编辑模式时,会抛出异常提示找不到SpatialAnchorManager,切换代码如下:

public void moveToEdit()
{
  if(anchorManager == null)
  {
    throw new Exception("Somehow the manager is not here.");
  }

  if(anchorManager.IsSessionStarted)
  { 
    anchorManager.DestroySession();
  }
  SceneManager.LoadScene("EditScene");
}

使用版本:Unity 2021.3.4f1,Azure Spatial Anchors SDK v2.13.0。

问题原因分析

  • Start方法执行时机滞后:预览场景内的切换脚本依赖Start方法初始化anchorManager,但如果触发moveToEdit的按钮点击事件发生在Start执行之前(比如场景加载后快速点击按钮,或者脚本执行顺序设置不合理),此时anchorManager还未完成赋值,就会触发null异常。而编辑模式切换正常,是因为编辑场景加载后Start已执行完成,anchorManager已正确初始化。
  • 场景切换的对象生命周期逻辑:从预览场景切回编辑场景时,预览场景的所有游戏对象会被销毁,编辑场景的对象是重新实例化的。如果预览场景的切换脚本没有在合适的时机完成组件获取,就会导致anchorManager为null。
  • 脚本执行顺序配置错误:如果切换脚本的Start方法执行顺序晚于按钮事件的触发逻辑,也会出现anchorManager未初始化就被调用的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:40:25