码迷,mamicode.com
首页 > 其他好文 > 详细

动态加载Vuforia识别信息

时间:2017-09-17 20:09:25      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:obj   int   ora   数据集   bsp   数据   system   prot   art   

Unity2017 ; vuforia-unity-6-2-10;

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using Vuforia;
/// <summary>
/// 识别图管理器
/// </summary>
public class ImageTargetManager : MonoBehaviour
{
    /// <summary>
    /// 识别图加载完成
    /// </summary>
    public event Action<string[]> ImageTargerLoadedEvent;

    /// <summary>
    /// 本地文件路径
    /// </summary>
    private string m_localFilePath;
    /// <summary>
    /// 是否加载过
    /// </summary>
    private bool m_isLoaded;
    /// <summary>
    /// 数据集
    /// </summary>
    private DataSet m_dataSet;
    /// <summary>
    /// 识别器
    /// </summary>
    private ObjectTracker m_tracker;
    /// <summary>
    /// 识别图集合对象
    /// </summary>
    private ImageTargetBehaviour[] m_imageTargetBehaviours;

    private void Start()
    {
        m_isLoaded = false;
        //TODO  识别图相关信息加载
        //VuforiaBehaviour.Instance.RegisterVuforiaInitializedCallback(VuforiaInitedCallBack);
        VuforiaARController.Instance.RegisterVuforiaInitializedCallback(VuforiaInitedCallBack);
        VuforiaARController.Instance.RegisterVuforiaStartedCallback(VuforiaStaredtCallBack);
    }
    /// <summary>
    /// 高通初始化完毕回调
    /// </summary>
    void VuforiaInitedCallBack()
    {
        m_localFilePath = Application.persistentDataPath + "/StreamingAssets/Vuforia/" + AppConfigConst.IMAGE_TARGET_FILE_NAME + ".xml";

        if (File.Exists(m_localFilePath))
        {
            //Load Local
            StartCoroutine(LoadLocalFile());
        }
        else
        {
            //Load NetWork
            //StartCoroutine(LoadNetworkFile());
        }
    }

    void VuforiaStaredtCallBack()
    {
        CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO);  //auto focus
    }


    /// <summary>
    /// 加载网络配置文件
    /// </summary>
    /// <returns></returns>
    private IEnumerator LoadNetworkFile()
    {
        WWW wwwdat = new WWW(AppConfigConst.IMAGE_TARGET_FILE_PATH + AppConfigConst.IMAGE_TARGET_FILE_NAME + ".dat");
        yield return wwwdat;

        Debug.Log(wwwdat.url);
        WWW wwwxml = new WWW(AppConfigConst.IMAGE_TARGET_FILE_PATH + AppConfigConst.IMAGE_TARGET_FILE_NAME + ".xml");
        yield return wwwxml;

        File.WriteAllBytes(Application.persistentDataPath + "/" + AppConfigConst.IMAGE_TARGET_FILE_NAME + ".dat", wwwdat.bytes);
        File.WriteAllBytes(Application.persistentDataPath + "/" + AppConfigConst.IMAGE_TARGET_FILE_NAME + ".xml", wwwxml.bytes);
        StartCoroutine(LoadLocalFile());
    }


    /// <summary>
    /// 加载本地配置文件
    /// </summary>
    /// <returns></returns>
    IEnumerator LoadLocalFile()
    {
        bool isVuforiaEnabled = VuforiaRuntimeUtilities.IsVuforiaEnabled();
        if (isVuforiaEnabled && m_isLoaded == false)
        {
            if (m_dataSet == null)
            {
                m_tracker = TrackerManager.Instance.GetTracker<ObjectTracker>();
                m_dataSet = m_tracker.CreateDataSet();
            }
            if (m_dataSet.Load(m_localFilePath, VuforiaUnity.StorageType.STORAGE_ABSOLUTE))
            {
                m_isLoaded = true;
                m_tracker.ActivateDataSet(m_dataSet);
                UpdateImageTarget();
            }
            else
            {
                m_isLoaded = false;
            }
        }
        WWW www = new WWW("file:///" + m_localFilePath);
        yield return www;
    }


    /// <summary>
    /// 修改Imagetarget 的名称
    /// </summary>
    void UpdateImageTarget()
    {
        List<string> imagetargetNameList = new List<string>();
        m_imageTargetBehaviours = FindObjectsOfType<ImageTargetBehaviour>();
        for (int i = 0; i < m_imageTargetBehaviours.Length; i++)
        {
            ImageTargetBehaviour imageTargetBehaviour = m_imageTargetBehaviours[i];
            imageTargetBehaviour.name = "ImageTarget_" + imageTargetBehaviour.ImageTarget.Name;

            //imageTargetBehaviour.gameObject.AddComponent<DefaultTrackableEventHandler>();

            //读取 DefaultTrackableEventHandler.lua
            //imageTargetBehaviour.gameObject.AddComponent<DefaultTrackableEventHandler>();
            imageTargetBehaviour.gameObject.AddComponent<LuaTrackableEventHandler>();
            imageTargetBehaviour.gameObject.AddComponent<TurnOffBehaviour>();
            imagetargetNameList.Add(imageTargetBehaviour.name);
        }
        OnImageTargerLoadedEvent(imagetargetNameList.ToArray());
    }

    /// <summary>
    /// 获取所有的识别图对象
    /// </summary>
    /// <returns></returns>
    public ImageTargetBehaviour[] GetImageTargetBehaviours()
    {
        return m_imageTargetBehaviours;
    }

    protected virtual void OnImageTargerLoadedEvent(string[] obj)
    {
        var handler = ImageTargerLoadedEvent;
        if (handler != null)
        {
            handler(obj);
        }
    }
}


class AppConfigConst
{
    public static string IMAGE_TARGET_FILE_PATH = "";   //http url http://54.193.6.32:8080/U3dFileToServer/upLoad/WFJ/AssetBundle/
    public static string IMAGE_TARGET_FILE_NAME = "USTC";
}

 

动态加载Vuforia识别信息

标签:obj   int   ora   数据集   bsp   数据   system   prot   art   

原文地址:http://www.cnblogs.com/JimmyCode/p/7536741.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!