Vuforia 动态加载DataSet和ImageTarget

来源:互联网 发布:网络环境被劫持 编辑:程序博客网 时间:2024/06/05 08:08

  • Vuforia 动态加载DataSet和ImageTarget
    • DataSet简析
    • 动态加载DataSet

Vuforia 动态加载DataSet和ImageTarget

DataSet简析

  • vuforia在运行时会给每一个DataSet下面的每一个ImageTarget生成一个TrackableBehaviour(如果你已经再Unity Editor中添加了对应的ImageTarget则不会重复创建)

    这是我的DataSet:
    dataset

    有7个ImageTarget:
    target

  • 我们到程序中使用TrackerManager.Instance.GetStateManager().GetTrackableBehaviours()方法把TrackableBehaviour全部打印出来

    如下图所示:
    这里写图片描述
    我已经创建了一个ImageTarget并且设置了它的ImageTarget为lang,程序再运行的时候会吧没有创建的自动生成各自的对象,就是上图中的New Game Object

动态加载DataSet

  1. 首先你需要把DataSet的文件放到对应平台的StreamingAssets\QCAR\路径中
    这里我放入一个[Test]:
    这里写图片描述

  2. 然后使用以下代码加载[Test]这个DataSet

    public void LoadDataSet(string dataSetName){        ObjectTracker objectTracker = TrackerManager.Instance.GetTracker<ObjectTracker>();        DataSet dataSet = objectTracker.CreateDataSet();        if (dataSet.Load(dataSetName))        {            objectTracker.Stop();//这里必须要停止跟踪才能激活DataSet            objectTracker.ActivateDataSet(dataSet);            objectTracker.Start();        }    }}
  3. 然后使用以下代码配置刚刚程序动态生成的ImageTarget给它加个立方体模型

    public void ConfigTrackable(){        IEnumerable<TrackableBehaviour> tbs = TrackerManager.Instance.GetStateManager().GetTrackableBehaviours();        foreach (TrackableBehaviour tb in tbs)        {            if (tb.TrackableName == "Select")//我的Test里只有Select这一个识别图            {                tb.gameObject.name = "Picture";                //下面这两句不能少,需要给它加上这两个组件                tb.gameObject.AddComponent<DefaultTrackableEventHandler>();                tb.gameObject.AddComponent<TurnOffBehaviour>();                GameObject augmentation = GameObject.CreatePrimitive(PrimitiveType.Cube);                augmentation.transform.parent = tb.gameObject.transform;                augmentation.transform.localPosition = Vector3.zero;                augmentation.transform.localRotation = Quaternion.identity;                augmentation.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f);                augmentation.gameObject.SetActive(true);            }        }}

然后就可以扫描新的识别图了,程序全程不需要重启,可以借此来做热更新识别图

原帖地址:http://blog.csdn.net/Pineapplle/article/details/49449343#

参考资料:https://developer.vuforia.com/forum/faq/unity-load-dataset-setup-trackables-runtime

1 1
原创粉丝点击