Hi, I am following the instruction https://developer.vuforia.com/resources/dev-guide/swappable-databases-unity to dynamically load and destroy datasets. The load and activate is ok. Even deactivate is ok. However, when I try to destroy the dataset, it generates errors as
Could not destroy trackable with id 1
Could not destroy trackable with id 2
...
This is the testing code I am using
using UnityEngine; using System.Collections; using System.Collections.Generic; public class qcartest : MonoBehaviour, ITrackerEventHandler { private QCARBehaviour qcarbhv; private DataSet dataSet = null; // Use this for initialization void Start () { qcarbhv = FindObjectOfType(typeof(QCARBehaviour)) as QCARBehaviour; qcarbhv.RegisterTrackerEventHandler(this); } // Update is called once per frame void Update () { if (Input.GetKeyDown("l")) { ImageTracker imageTracker = TrackerManager.Instance.GetTracker(Tracker.Type.IMAGE_TRACKER) as ImageTracker; var datasetPath = Application.persistentDataPath + "/SoundItOut2.xml"; dataSet = imageTracker.CreateDataSet(); if (!dataSet.Load(datasetPath, DataSet.StorageType.STORAGE_ABSOLUTE)) { Debug.Log("Failed loading Dataset @ " + datasetPath); return; } Debug.Log("Dataset @ " + datasetPath + " loaded!"); imageTracker.ActivateDataSet(dataSet); } if (Input.GetKeyDown("u")) { StartCoroutine("Co_Unload"); } } public void OnInitialized() { } public void OnTrackablesUpdated() { } IEnumerator Co_Unload() { ImageTracker imageTracker = TrackerManager.Instance.GetTracker(Tracker.Type.IMAGE_TRACKER) as ImageTracker; imageTracker.Stop(); yield return new WaitForSeconds(0.5f); IEnumerable<DataSet> activeDataSets = imageTracker.GetActiveDataSets(); List<DataSet> activeDataSetsList = new List<DataSet>(); foreach (var item in activeDataSets) { activeDataSetsList.Add(item); } foreach (var item in activeDataSetsList) { imageTracker.DeactivateDataSet(item); Debug.Log("deactivated " + item.Path); } yield return new WaitForSeconds(0.5f); foreach (var item in activeDataSetsList) { imageTracker.DestroyDataSet(item, true); Debug.Log("destroyed " + item.Path); } yield return new WaitForSeconds(0.5f); imageTracker.Start(); } }
Please help what I am doing wrong. Thanks.
This is a known behaviour of Vuforia; you cannot destroy Datasets that have been loaded from file; you can only destroy Dataset that contains User Defined Targets.
However, you can simply deactivate them, without problems.