Vuforia的学习(六)DefaultTrackableEventHandler脚本解析

来源:互联网 发布:愚人节整人软件 编辑:程序博客网 时间:2024/06/17 19:33

Vuforia重要脚本的介绍

关键Vuforia SDK脚本的学习,有一个特别重要,也相对简单的脚本,他就是DefaultTrackableEventHandler.cs脚本。该脚本被挂载在ImageTarget的prfab上,在我们学习Vuforia的过程中我们会经常用到它。所以下面我们来对这个脚本进行一些分析。

DefaultTrackableEventHandler 脚本分析

代码如下:

//该类属于 Vuforia的命名空间,所以在引用该类的时候要注意加上Vuforia的命门空间.namespace Vuforia{    /// <summary>    /// A custom handler that implements the ITrackableEventHandler interface.    /// </summary>    public class DefaultTrackableEventHandler : MonoBehaviour,                                                ITrackableEventHandler    {        #region PRIVATE_MEMBER_VARIABLES        //Vuforia sdk提供的类,Vuforia的事件类        private TrackableBehaviour mTrackableBehaviour;        #endregion // PRIVATE_MEMBER_VARIABLES        #region UNTIY_MONOBEHAVIOUR_METHODS        void Start()        {            //获得ImageTarget的TrackableBehaviour类            mTrackableBehaviour = GetComponent<TrackableBehaviour>();            if (mTrackableBehaviour)            {                //注册该ImageTarget,这样该ImageTarget就能收到Vuforia捕捉的到的事件                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)    //通过事件状态的改变来确定是不是IamgeTarget被发现            {                OnTrackingFound();  //处理ImageTarget被发现            }            else            {                OnTrackingLost();   //处理ImageTarget消失            }        }        #endregion // PUBLIC_METHODS        #region PRIVATE_METHODS        private void OnTrackingFound()        {            //获得该ImagetTarget上所有子节点的Renderer和Collder            Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true);            Collider[] colliderComponents = GetComponentsInChildren<Collider>(true);           //显示所有节点            // Enable rendering:            foreach (Renderer component in rendererComponents)            {                component.enabled = true;            }            //激活Collider            // Enable colliders:            foreach (Collider component in colliderComponents)            {                component.enabled = true;            }            Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " found");        }        private void OnTrackingLost()        {            Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true);            Collider[] colliderComponents = GetComponentsInChildren<Collider>(true);           //隐藏子节点            // Disable rendering:            foreach (Renderer component in rendererComponents)            {                component.enabled = false;            }            //取消Collider            // Disable colliders:            foreach (Collider component in colliderComponents)            {                component.enabled = false;            }            Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " lost");        }        #endregion // PRIVATE_METHODS    }}
通过源码的注释,相信大家会对该类的理解有帮助,该类也相对简单,希望大家通过代码注释好好理解一些,因为实际开发项目的过程中,该类会被经常用到,是非常重要的一个类。
原创粉丝点击