249674239
新手
新手
  • UID4312
  • 粉丝0
  • 关注0
  • 发帖数10
阅读:325回复:0

如何异步加载高通的识别文件?

楼主#
更多 发布于:2017-10-16 10:03
VuforiaARController.Instance.RegisterVuforiaStartedCallback(LoadDataSet);




这个是高通封装的用于加载识别数据的文件的方法,没有源码,是封装的Unity事件所以是在主线程里面
运行的,请问有什么好的方式可以做成异步吗?





void LoadDataSet()    {

        ObjectTracker objectTracker = TrackerManager.Instance.GetTracker<ObjectTracker>();

        DataSet dataSet = objectTracker.CreateDataSet();

        if (dataSet.Load(externalPath, VuforiaUnity.StorageType.STORAGE_ABSOLUTE))
        {

            objectTracker.Stop();  // stop tracker so that we can add new dataset

            if (!objectTracker.ActivateDataSet(dataSet))            {
                // Note: ImageTracker cannot have more than 100 total targets activated                Debug.Log("<color=yellow>Failed to Activate DataSet: " + dataSetName + "</color>");
            }

            if (!objectTracker.Start())            {
                Debug.Log("<color=yellow>Tracker Failed to Start.</color>");            }

            int counter = 0;

            IEnumerable<TrackableBehaviour> tbs = TrackerManager.Instance.GetStateManager().GetTrackableBehaviours();
            foreach (TrackableBehaviour tb in tbs)            {
                if (tb.name == "New Game Object")                {

                    // change generic name to include trackable name
                    tb.gameObject.name = ++counter + ":DynamicImageTarget-" + tb.TrackableName;

                    // add additional script components for trackable                    tb.gameObject.AddComponent<DefaultTrackableEventHandler>();
                    tb.gameObject.AddComponent<TurnOffBehaviour>();

                    if (augmentationObject != null)                    {
                        // instantiate augmentation object and parent to trackable                        GameObject augmentation = (GameObject)GameObject.Instantiate(augmentationObject);
                        augmentation.transform.parent = tb.gameObject.transform;                        augmentation.transform.localPosition = new Vector3(0f, 0f, 0f);
                        augmentation.transform.localRotation = Quaternion.identity;                        augmentation.transform.localScale = new Vector3(1f, 1f, 1f);
                        augmentation.gameObject.SetActive(true);                    }
                    else                    {
                        Debug.Log("<color=yellow>Warning: No augmentation object specified for: " + tb.TrackableName + "</color>");                    }
                }            }
        }        else
        {            Debug.LogError("<color=yellow>Failed to load dataset: '" + dataSetName + "'</color>");
        }    }

欢迎分享

游客

返回顶部