vuforia拖卡

来源:互联网 发布:好听的淘宝童装店名 编辑:程序博客网 时间:2024/06/05 15:11

第一种方法:在ARCamera下创建空物体,作为拖卡之后模型的目标位置,然后在脱离识别图后模型移动到空物体下。


/*==============================================================================Copyright (c) 2010-2014 Qualcomm Connected Experiences, Inc.All Rights Reserved.Confidential and Proprietary - Protected under copyright and other laws.==============================================================================*/using UnityEngine;namespace Vuforia{    /// <summary>    /// A custom handler that implements the ITrackableEventHandler interface.    /// </summary>        public class MyDefaultTrackableEventHandler : MonoBehaviour,                                                ITrackableEventHandler    {        #region PRIVATE_MEMBER_VARIABLES         private TrackableBehaviour mTrackableBehaviour;        #endregion // PRIVATE_MEMBER_VARIABLES        //存储模型预制件名字,用于动态加载        public string[] prefabName;        //动态加载后的模型对象        private GameObject[] prefabObj;        //拖卡后的目标位置对象        public GameObject[] targetPosition;        #region UNTIY_MONOBEHAVIOUR_METHODS            void Start()        {            //初始化数组            prefabObj = new GameObject[prefabName.Length];            mTrackableBehaviour = GetComponent<TrackableBehaviour>();            if (mTrackableBehaviour)            {                mTrackableBehaviour.RegisterTrackableEventHandler(this);            }        }        #endregion // UNTIY_MONOBEHAVIOUR_METHODS        #region PUBLIC_METHODS        /// <summary>        /// Implementation of the ITrackableEventHandler function called when the        /// tracking state changes.        /// </summary>        public void OnTrackableStateChanged(                                        TrackableBehaviour.Status previousStatus,                                        TrackableBehaviour.Status newStatus)        {            if (newStatus == TrackableBehaviour.Status.DETECTED ||                newStatus == TrackableBehaviour.Status.TRACKED ||                newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)            {                OnTrackingFound();            }            else            {                OnTrackingLost();            }        }        #endregion // PUBLIC_METHODS        #region PRIVATE_METHODS        private void OnTrackingFound()        {            //如果识别到目标,并且目标不为空,要销毁对象,卸载资源            if (prefabObj[0] != null)            {                for (int i = 0; i < prefabObj.Length; i++)                {                    GameObject.Destroy(prefabObj[i]);                }                Resources.UnloadUnusedAssets();            }            //动态加载预制件对象,并设置预制件父对象为imageTarget            for (int i=0;i<prefabObj.Length;i++)            {                prefabObj[i] = Instantiate(Resources.Load(prefabName[i])) as GameObject;                prefabObj[i].transform.parent = this.transform;            }        }        private void OnTrackingLost()        {            //当目标丢失后,把模型父对象设置后目标对象,            if (prefabObj[0] != null)            {                for (int i = 0; i < prefabObj.Length; i++)                {                    prefabObj[i].transform.parent = targetPosition[i].transform;                    //设置坐标,两种方法都可以                    //prefabObj[i].transform.localPosition = Vector3.zero;                    prefabObj[i].transform.position = targetPosition[i].transform.position;                }                //Resources.UnloadUnusedAssets();            }                    }        #endregion // PRIVATE_METHODS    }}


原创粉丝点击