本文共 5595 字,大约阅读时间需要 18 分钟。
我目前用的是高通6117版本的SDK,最新版函数改动不多,大体上一致,话不多说上代码
using UnityEngine;using System.Collections;using Vuforia;using System.Collections.Generic;using System.IO;using UnityEngine.UI;public class Vuforia_Template : MonoBehaviour{ private string sz_DataPath = null; private bool b_LoadDataSet = false; private ObjectTracker m_ObjectTracker = null; private DataSet m_DataSet = null; private ImageTargetBehaviour[] m_ImageTargetBehaviours = null; private static Vuforia_Template _insttance = null; ////// 是否为使用本地识别库数据 /// [Header("是否为使用本地识别库数据")] public bool b_Location = false; public static Vuforia_Template Instance { get { return _insttance; } } public string GetDataPath { get { return sz_DataPath; } set { sz_DataPath = value; } } private void Awake() { _insttance = this; } void Start() { //string path = Application.isEditor ? Application.persistentDataPath.Replace("/" + Application.productName, "") : Application.persistentDataPath; //GetDataPath = path + "/" + "Capable" + ".xml"; VuforiaBehaviour.Instance.RegisterVuforiaStartedCallback(RegisterVuforiaStartedCallback); } void RegisterVuforiaStartedCallback() { StartCoroutine(LoadDataSet()); } public void StartLoadDataSet(string data_name) { sz_DataPath = data_name; StartCoroutine(LoadDataSet()); } #region Public_Method IEnumerator LoadDataSet() { Debug.Log(sz_DataPath); yield return new WaitUntil(delegate { return !string.IsNullOrEmpty(sz_DataPath); }); yield return new WaitForSecondsRealtime(0.5f); if (VuforiaRuntimeUtilities.IsVuforiaEnabled()) { m_ObjectTracker = TrackerManager.Instance.GetTracker(); m_DataSet = m_ObjectTracker.CreateDataSet(); if (m_DataSet == null && !b_Location) { b_LoadDataSet = m_DataSet.Load(sz_DataPath, VuforiaUnity.StorageType.STORAGE_ABSOLUTE);//绝对路径 一般用来网络下载的识别库 } else { b_LoadDataSet = m_DataSet.Load(sz_DataPath);//本地预制的识别库 } } yield return null; if (b_LoadDataSet) { m_ObjectTracker.ActivateDataSet(m_DataSet); } yield return new WaitUntil(() => FindObjectsOfType ().Length>0); UpdateImageTarget(); CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_TRIGGERAUTO); yield return new WaitForSeconds(.5f); CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO); m_ObjectTracker.Start();//开启识别器 (可以理解为摄像头) } void UpdateImageTarget() { m_ImageTargetBehaviours = FindObjectsOfType (); for (int i = 0; i < m_ImageTargetBehaviours.Length; i++) { ImageTargetBehaviour imageTargetBehaviour = m_ImageTargetBehaviours[i]; GameObject temp_cube = GameObject.CreatePrimitive(PrimitiveType.Cube); temp_cube.transform.localPosition = new Vector3(0, 0.4f, 0); temp_cube.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f); temp_cube.transform.SetParent(imageTargetBehaviour.transform,false); imageTargetBehaviour.name = m_ImageTargetBehaviours[i].ImageTarget.Name + "Target"; imageTargetBehaviour.gameObject.AddComponent (); imageTargetBehaviour.gameObject.AddComponent (); } } public void UnLoadDataSet(ImageTargetBehaviour[] imageTargetBehaviours = null) { if (m_ImageTargetBehaviours != null && m_ImageTargetBehaviours.Length>0&& imageTargetBehaviours ==null) { imageTargetBehaviours = m_ImageTargetBehaviours; } bool isVuforiaEnabled = VuforiaRuntimeUtilities.IsVuforiaEnabled(); if (isVuforiaEnabled) { ObjectTracker tracker = TrackerManager.Instance.GetTracker (); tracker.Stop(); tracker.DeactivateDataSet(m_DataSet); IEnumerable dataSets = tracker.GetActiveDataSets(); IEnumerator dEnumerator = dataSets.GetEnumerator(); List list = new List (); while (dEnumerator.MoveNext()) { list.Add(dEnumerator.Current); } for (int i = 0; i < list.Count; i++) { tracker.DeactivateDataSet(list[i]); tracker.DestroyDataSet(list[i], true); } for (int i = 0; i < imageTargetBehaviours.Length; i++) { TrackerManager.Instance.GetStateManager().DestroyTrackableBehavioursForTrackable(imageTargetBehaviours[i].Trackable); } } } public IEnumerator SetFocusMode() { CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_TRIGGERAUTO); yield return new WaitForSeconds(.5f); CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO); } public void SetCameraDirection(CameraDevice.CameraDirection CameraDirection) { CameraDevice.Instance.Stop(); CameraDevice.Instance.Deinit(); CameraDevice.Instance.Init(CameraDirection); CameraDevice.Instance.Start();#if UNITY_IPHONE if (CameraDirection == CameraDevice.CameraDirection.CAMERA_FRONT) StartCoroutine(shuaxin());#elif UNITY_ANDROID#endif } IEnumerator shuaxin() { yield return new WaitForEndOfFrame(); Camera.main.transform.localEulerAngles = new Vector3(0, 0, 180.0f); } public void SetTrackedImageCount(int TrackedCount) { VuforiaUnity.SetHint(VuforiaUnity.VuforiaHint.HINT_MAX_SIMULTANEOUS_IMAGE_TARGETS, TrackedCount); } public void SetTrackedObjectCount(int TrackedCount) { VuforiaUnity.SetHint(VuforiaUnity.VuforiaHint.HINT_MAX_SIMULTANEOUS_OBJECT_TARGETS, TrackedCount); } #endregion}
转载地址:http://pljti.baihongyu.com/