UNITY AR應用設計(四){物件辨識行為與控制}

前面幾篇介紹了各種物件的辨識方法後,接下來就是應用部分。光是掃描秀出物件顯得單調,浪費了AR的才能,但要做更多的控制或變化必須知道一些相關的程式語法,例如:判斷攝影機何時抓取到目標,在抓取後才做出特定表現之類的寫法,下面就來看看吧。
ar

ITrackableEventHandler

首先,我們必須了解當攝影機拍到目標務時,狀態的辨識是由誰負責,因此我們必須撰寫一隻自己的程式TargetTrigger.cs來繼承ITrackableEventHandler這個介面。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Vuforia;//使用Vuforia程式庫
//且繼承偵測追蹤的介面
public class TargetTrigger : MonoBehaviour , ITrackableEventHandler {
//強制實作介面的功能
    public void OnTrackableStateChanged(TrackableBehaviour.Status previousStatus, TrackableBehaviour.Status newStatus)
    {
//判斷掃描狀態改變為 TRACKED 以追蹤的時候執行一些事情
        if (newStatus == TrackableBehaviour.Status.TRACKED)
        {
            //要控制的事項 true
        }
        else
        {
            //要控制的事項 false
        }
    }
}

接下來,將TargetTrigger.cs加到我們的ImageTarget或其他種類的Target物件上,方便取得TrackableBehaviour的元件和監控。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Vuforia;
public class TargetTrigger : MonoBehaviour , ITrackableEventHandler {
//取得TrackableBehaviour
    TrackableBehaviour TB
    {
        get
        {
            return GetComponent<TrackableBehaviour>();
        }
    }
//開始時確認TrackableBehaviour 是否存在,並且註冊它的事件狀態控制
    void Start () {
        if (TB)
        {
            TB.RegisterTrackableEventHandler(this);
        }
	}
    public void OnTrackableStateChanged(TrackableBehaviour.Status previousStatus, TrackableBehaviour.Status newStatus)
    {
        if (newStatus == TrackableBehaviour.Status.TRACKED)
        {
            //要控制的事項 true
        }
        else
        {
            //要控制的事項 false
        }
    }
}

 
再去添加一些控制對象功能,例如動畫系統或物件的開關。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Vuforia;
public class TargetTrigger : MonoBehaviour , ITrackableEventHandler {
//宣告要控制的對象物件或組件
    public Animator ani;
    TrackableBehaviour TB
    {
        get
        {
            return GetComponent<TrackableBehaviour>();
        }
    }
    // Use this for initialization
    void Start () {
        if (TB)
        {
            TB.RegisterTrackableEventHandler(this);
        }
	}
    public void OnTrackableStateChanged(TrackableBehaviour.Status previousStatus, TrackableBehaviour.Status newStatus)
    {
        if (newStatus == TrackableBehaviour.Status.TRACKED)
        {
            //要控制的事項 true開啟動畫
            ani.enabled = true;
        }
        else
        {
            //要控制的事項 false關閉動畫
            ani.enabled = false;
        }
    }
}

照到物件對象時就會撥放動畫,得到以下效果:
pagani

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *