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