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
相关产品推荐
相关产品推荐

