Unity切换场景时Vuforia Marker ID动态递增问题求助
解决Vuforia场景切换后Image Target ID递增的问题
方法1:用自定义标识替代动态ID
放弃依赖Vuforia自动分配的动态ID,改用每个Image Target的自定义名称或固定标签:
- 在Unity编辑器里给每个Image Target设置独特的
name(比如Target_Home、Target_Setting) - 在识别回调(如
OnTrackableStateChanged)中,直接通过TrackableBehaviour.TrackableName获取目标名称来判断标记,示例代码:
public void OnTrackableStateChanged( TrackableBehaviour.Status previousStatus, TrackableBehaviour.Status newStatus) { if (newStatus == TrackableBehaviour.Status.DETECTED || newStatus == TrackableBehaviour.Status.TRACKED || newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED) { string targetName = GetComponent<TrackableBehaviour>().TrackableName; switch(targetName) { case "Target_Home": // 对应标记的处理逻辑 break; case "Target_Setting": // 对应标记的处理逻辑 break; } } }
方法2:全局复用Vuforia Tracker实例
Vuforia每次加载场景都会重新初始化Tracker,导致ID递增。可以做一个全局管理单例,保留Tracker实例:
- 在场景1中创建
VuforiaGlobalManager对象,设置DontDestroyOnLoad - 编写单例代码控制Vuforia初始化流程:
public class VuforiaGlobalManager : MonoBehaviour { private static VuforiaGlobalManager _instance; private bool _isVuforiaInited = false; private void Awake() { if (_instance != null && _instance != this) { Destroy(gameObject); return; } _instance = this; DontDestroyOnLoad(gameObject); } private void Start() { // 禁用自动初始化,手动控制 VuforiaARController.Instance.RegisterVuforiaStartedCallback(OnVuforiaStarted); VuforiaARController.Instance.enabled = false; } public void InitVuforia() { if (!_isVuforiaInited) { VuforiaARController.Instance.enabled = true; } } private void OnVuforiaStarted() { _isVuforiaInited = true; ObjectTracker tracker = TrackerManager.Instance.GetTracker<ObjectTracker>(); if (tracker != null && !tracker.IsActive) { tracker.StartTracking(); } } }
- 场景2加载完成后,调用
VuforiaGlobalManager.Instance.InitVuforia()触发初始化,避免Vuforia自动重建Tracker
方法3:用Dataset固定唯一ID
每个Image Target在Dataset里有一个固定的唯一ID,不会随场景切换变化,可通过以下代码获取:
TrackableBehaviour trackable = GetComponent<TrackableBehaviour>(); string fixedId = trackable.Trackable.GetUniqueTargetId();
预先记录每个标记的这个固定ID,识别时直接比对即可
内容的提问来源于stack exchange,提问作者GeorgeLBA
相关产品推荐
相关产品推荐

