zoukankan      html  css  js  c++  java
  • 动态加载Vuforia识别信息

    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://29.193.45.32:8080/U3dFileToServer/upLoad/AssetBundle/ 存放目录
        public static string IMAGE_TARGET_FILE_NAME = "USTC";
    }

     IIS添加对.dat文件支持

    文件扩展名:.dat

    MIME类型:application/octet-stream

  • 相关阅读:
    ORA-00119: invalid specification for system parameter LOCAL_LISTENER
    local_listener参数的作用!
    DDL为什么不能rollback?
    LGWR和DBWn的触发条件
    修改spfile位置
    初识oracle重做日志文件
    ORACLE AUDIT 审计
    Oracle SQL_TRACE使用小结
    Web API(六):使用Autofac实现依赖注入
    JavaScript:属性的操作
  • 原文地址:https://www.cnblogs.com/JimmyCode/p/7536741.html
Copyright © 2011-2022 走看看