using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; using Vuforia; public class DataSetHandle : MonoBehaviour { public static void LoadDataSet(string dataSetName) { ObjectTracker objectTracker = TrackerManager.Instance.GetTracker(); objectTracker.Stop(); DataSet dataSet = objectTracker.CreateDataSet(); if (dataSet.Load(dataSetName)) { //这里必须要停止跟踪才能激活DataSet objectTracker.ActivateDataSet(dataSet); } objectTracker.Start(); } public static Transform ConfigTrackable(string trackedName, string trackComName, GameObject modelPre, Transform recogParent) { IEnumerable tbs = TrackerManager.Instance.GetStateManager().GetTrackableBehaviours(); foreach (TrackableBehaviour tb in tbs) { if (tb.TrackableName == trackedName) { tb.transform.parent = recogParent; tb.gameObject.name = trackedName; //动态添加识别组件 tb.gameObject.AddComponent(Type.GetType(trackComName)); tb.gameObject.AddComponent(); GameObject augmentation = Instantiate(modelPre, tb.transform); if (tb.CurrentStatus == TrackableBehaviour.Status.TRACKED) augmentation.gameObject.SetActive(true); else augmentation.gameObject.SetActive(false); return augmentation.transform; } } return null; } /// /// 关闭指定识别数据集 /// /// 数据集名称或绝对路径 public static void DeactivateDateset(string datasetName) { ObjectTracker objectTracker = TrackerManager.Instance.GetTracker(); IEnumerable activeDataSets = objectTracker.GetActiveDataSets(); List activeDataSetsToBeRemoved = activeDataSets.ToList(); List dataSetsToBeActive = new List(); foreach (DataSet ads in activeDataSetsToBeRemoved) { objectTracker.DeactivateDataSet(ads); if (!ads.Path.Contains(datasetName)) { dataSetsToBeActive.Add(ads); } else { objectTracker.DestroyDataSet(ads, false); var trackables = ads.GetTrackables(); foreach (var item in trackables) { TrackerManager.Instance.GetStateManager().DestroyTrackableBehavioursForTrackable(item, true); } } } objectTracker.Stop(); foreach (DataSet ds in dataSetsToBeActive) { objectTracker.ActivateDataSet(ds); } objectTracker.Start(); } }