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

Unity中如何实现AR相机扫描图像目标后直接切换场景?

Unity实现AR图像识别后切换场景(无动画)

一、AR Foundation 实现流程

1. 配置AR环境

  • 导入AR Foundation及对应平台的AR Package(如ARCore/ARKit)
  • 在场景中添加AR Session和AR Session Origin组件
  • 给AR Session Origin添加AR Tracked Image Manager组件,将Reference Library设置为你创建的图像识别库(需提前添加目标扫描图像)

2. 编写场景切换脚本

创建名为ImageTrackerSceneSwitcher的C#脚本,挂载到AR Session Origin上:

using UnityEngine;
using UnityEngine.XR.ARFoundation;
using UnityEngine.SceneManagement;

public class ImageTrackerSceneSwitcher : MonoBehaviour
{
    [SerializeField] private ARTrackedImageManager _trackedImageManager;
    [SerializeField] private string _targetSceneName;
    private bool _hasSwitched = false; // 避免重复触发场景切换

    void Awake()
    {
        _trackedImageManager ??= GetComponent<ARTrackedImageManager>();
    }

    void OnEnable()
    {
        _trackedImageManager.trackedImagesChanged += OnTrackedImagesChanged;
    }

    void OnDisable()
    {
        _trackedImageManager.trackedImagesChanged -= OnTrackedImagesChanged;
    }

    private void OnTrackedImagesChanged(ARTrackedImagesChangedEventArgs eventArgs)
    {
        if (_hasSwitched) return;

        foreach (var image in eventArgs.added) CheckAndSwitch(image);
        foreach (var image in eventArgs.updated) CheckAndSwitch(image);
    }

    private void CheckAndSwitch(ARTrackedImage trackedImage)
    {
        if (trackedImage.trackingState == UnityEngine.XR.ARSubsystems.TrackingState.Tracking && !_hasSwitched)
        {
            // 可根据图像名称指定特定目标
            if (trackedImage.referenceImage.name == "你的目标图像名称")
            {
                SceneManager.LoadScene(_targetSceneName);
                _hasSwitched = true;
            }
        }
    }
}

3. 修复EventHandler失效问题

  • 确认AR Tracked Image Manager的Reference Library已正确赋值,目标图像已添加到库中
  • 检查脚本挂载对象及_trackedImageManager引用是否为空
  • 确保事件在OnEnable注册、OnDisable注销,避免注册时机错误
  • 排查_hasSwitched变量是否被误设为true

二、Vuforia 实现流程

1. 配置Vuforia环境

  • 导入Vuforia Package到Unity
  • 场景中添加AR Camera(自带Vuforia核心组件)
  • 在Vuforia Portal创建图像目标数据库,下载后导入Unity,添加到AR Camera的Vuforia Behaviour组件的Database Load Behaviour中
  • 添加Image Target到场景,选择对应数据库中的目标图像

2. 编写场景切换脚本

创建名为VuforiaImageSwitcher的C#脚本,挂载到Image Target上:

using UnityEngine;
using Vuforia;
using UnityEngine.SceneManagement;

public class VuforiaImageSwitcher : MonoBehaviour, ITrackableEventHandler
{
    [SerializeField] private string _targetSceneName;
    private TrackableBehaviour _trackableBehaviour;
    private bool _hasSwitched = false;

    void Start()
    {
        _trackableBehaviour = GetComponent<TrackableBehaviour>();
        _trackableBehaviour?.RegisterTrackableEventHandler(this);
    }

    public void OnTrackableStateChanged(
        TrackableBehaviour.Status previousStatus,
        TrackableBehaviour.Status newStatus)
    {
        if (_hasSwitched) return;

        if (newStatus is TrackableBehaviour.Status.TRACKED or TrackableBehaviour.Status.EXTENDED_TRACKED)
        {
            SceneManager.LoadScene(_targetSceneName);
            _hasSwitched = true;
        }
    }
}

3. 修复EventHandler失效问题

  • 确认Image Target的Trackable已正确选择目标数据库中的图像
  • 检查脚本是否挂载到Image Target上,_trackableBehaviour是否成功获取
  • 确保RegisterTrackableEventHandler在Start中执行,未被跳过
  • 验证Vuforia License Key是否正确配置,否则AR功能无法正常运行

通用注意事项

  • 目标场景必须添加到File > Build Settings的Scenes In Build列表中
  • AR功能需在实际设备上测试,编辑器无法完全模拟识别效果
  • 可添加Debug.Log打印,确认目标识别状态及场景切换代码是否执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 04:55:13