using System.Collections; using System.Collections.Generic; using UnityEngine; using Vuforia; using System.Linq; public class LoadDataset : MonoBehaviour { public string datasetToLoad; // Use this for initialization void Start () { VuforiaARController.Instance.RegisterVuforiaStartedCallback( OnVuforiaStarted ); } private void OnVuforiaStarted() { // SwitchTargetByName( datasetToLoad ); ActivateTarget( datasetToLoad ); return; } //This function will de-activate all current datasets and activate the designated dataset. //It is assumed the dataset being activated has already been loaded (either through code //elsewhere or via the Vuforia Configuration). public void SwitchTargetByName(string activateThisDataset) { TrackerManager trackerManager = (TrackerManager)TrackerManager.Instance; ObjectTracker objectTracker = TrackerManager.Instance.GetTracker(); IEnumerable datasets = objectTracker.GetDataSets(); IEnumerable activeDataSets = objectTracker.GetActiveDataSets(); List activeDataSetsToBeRemoved = activeDataSets.ToList(); //Loop through all the active datasets and deactivate them. foreach (DataSet ads in activeDataSetsToBeRemoved) { objectTracker.DeactivateDataSet(ads); } //Swapping of the datasets should not be done while the ObjectTracker is working at the same time. //So, Stop the tracker first. objectTracker.Stop(); //Then, look up the new dataset and if one exists, activate it. foreach (DataSet ds in datasets) { if (ds.Path.Contains(activateThisDataset)) { objectTracker.ActivateDataSet(ds); } } //Finally, start the object tracker. objectTracker.Start(); } //This function will load and activate the designated dataset. It will not de-activate //anything, so be sure no other Model Target datasets are active to avoid issues. public void ActivateTarget(string loadThisDataset) { TrackerManager trackerManager = (TrackerManager)TrackerManager.Instance; ObjectTracker objectTracker = TrackerManager.Instance.GetTracker(); //Stop the tracker. objectTracker.Stop(); //Create a new dataset object. DataSet dataset = objectTracker.CreateDataSet(); //Load and activate the dataset if it exists. if( DataSet.Exists( loadThisDataset ) ) { dataset.Load( loadThisDataset ); objectTracker.ActivateDataSet( dataset ); } //Start the object tracker. objectTracker.Start(); } }