vuforia拖卡

论坛 期权论坛 脚本     
已经匿名di用户   2022-7-2 21:49   2207   0

第一种方法:在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
    }
}


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP