public void SwapActiveDatasets(string datasetToActivate)
{
// 得到目标追踪器
ObjectTracker objectTracker = TrackerManager.Instance.GetTracker<ObjectTracker>();
//得到所有的DataSet
IEnumerable<DataSet> datasets = objectTracker.GetDataSets();
//得到所有已经激活的Dataset
IEnumerable<DataSet> activeDataSets = objectTracker.GetActiveDataSets();
//激活Dataset的List
List<DataSet> activeDataSetsToBeRemoved = activeDataSets.ToList();
//关闭追踪器
objectTracker.Stop();
// 循环遍历激活数据集并关闭
foreach (DataSet ads in activeDataSetsToBeRemoved)
{
objectTracker.DeactivateDataSet(ads);
}
//判断是否存在需要激活的数据集并激活
foreach (DataSet ds in datasets)
{
if (ds.Path.Contains(datasetToActivate))
{
objectTracker.ActivateDataSet(ds);
}
}
// 将GuideView设置为2D
IEnumerable<TrackableBehaviour> tbs = TrackerManager.Instance.GetStateManager().GetTrackableBehaviours();
foreach (TrackableBehaviour tb in tbs)
{
if (tb is ModelTargetBehaviour && tb.isActiveAndEnabled)
{
Debug.Log("TrackableName: " + tb.TrackableName);
(tb as ModelTargetBehaviour).GuideViewMode = ModelTargetBehaviour.GuideViewDisplayMode.GuideView2D;
}
}
// 5. 开启追踪
objectTracker.Start();
}
public void ActivateTarget(string loadThisDataset)
{
//TrackerManager trackerManager = (TrackerManager)TrackerManager.Instance;
ObjectTracker objectTracker = TrackerManager.Instance.GetTracker<ObjectTracker>();
objectTracker.Stop();
//创建一个Dataset
DataSet dataset = objectTracker.CreateDataSet();
//如果存在加载并激活.
if (DataSet.Exists(loadThisDataset))
{
dataset.Load(loadThisDataset);
objectTracker.ActivateDataSet(dataset);
}
IEnumerable<TrackableBehaviour> tbs = TrackerManager.Instance.GetStateManager().GetTrackableBehaviours();
foreach (TrackableBehaviour tb in tbs)
{
if (tb is ModelTargetBehaviour && tb.isActiveAndEnabled)
{
Debug.Log("TrackableName: " + tb.TrackableName);
(tb as ModelTargetBehaviour).GuideViewMode = ModelTargetBehaviour.GuideViewDisplayMode.GuideView2D;
}
}
objectTracker.Start();
print("激活了");
}
通过手动切换数据集来实现一个场景可以激活多个目标模型
SwapActiveDataset方法为切换数据集并关闭之前激活的数据集(*数据集要求已经加载*)。ActivateTarget方法为加载数据集并激活