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
}
}
通過源碼的註釋,相信大家會對該類的理解有幫助,該類也相對簡單,希望大家通過代碼註釋好好理解一些,因爲實際開發項目的過程中,該類會被經常用到,是非常重要的一個類。