上學期擔任了導師一門選修課的TA,課程是關于VR和AR的,所以就設計了一個簡單的AR小Demo實驗,其實都是網絡上用Unity+Vuforia做的AR效果,這里只是整理歸納一下步驟而已,分為兩部分,第一部分是顯示模型,第二部分是對模型進行簡單操作。由于這個實驗操作說明是面向沒有接觸過Unity和Vuforia的同學,所以會特別詳細(啰嗦)。第一部分的內容請看Unity5+Vuforia實現一個AR小Demo(1)。下面開始第二部分的講述。
能夠對顯示的模型進行交互。
17.在Hierarchy視圖中選中ImageTarget,在Inspector視圖中找到Default Trackable Event Handler腳本,在名字上右鍵,選擇Edit Script打開了編輯界面。
首先解釋一下這個腳本,這個腳本是程序用來檢測攝像頭視野范圍內是否追蹤到識別圖。
Start函數是Unity的固定函數,只在程序開始時執行一次,所以在這里進行的一般是變量的初始化。 另外還有一個Update函數,也是固定函數,會在每一幀被調用,我們對模型的操作會在Update這個函數里進行。
OnTrackableStateChanged函數是在追蹤狀態發生改變時執行相應的操作,在追蹤到識別圖,就會進入if語句,調用OnTrackingFound函數把模型繪制出來。在追蹤不到識別圖時就會進入else語句,調用OnTrackingLost函數取消模型的顯示。
18.開始我們的編程,放心,代碼量不大,而且邏輯很容易。首先設置幾個變量:
chopper是一個GameObject類型變量,用來表示程序中的一個對象 originScale和newScale都是Vector3類型,有三個分量x,y,z,用來表示三個方向的縮放因子 isTracked是一個bool變量,用來表示識別圖是否被追蹤到。
19.在Start函數中初始化變量:
GameObject.Find是用來找到我們的目標對象,參數是對象的名字,我們的目標對象就是模型,所以是模型的名字,這個名字可以在Hierarchy中看到
獲取模型后,把模型的原始縮放因子存儲起來,其中chopper.transform就是指下圖這個組件
它包含著position(位置信息),rotation(旋轉信息),scale(縮放信息),所以我們通過chopper.transform.localScale得到表示模型縮放因子的3維向量,值是[0.04,0.04, 0.04]。 最后初始追蹤狀態isTracked設為false表示沒有追蹤到。
20.更新追蹤的狀態,直接利用現有的OnTrackableStateChanged函數,在對應情況下設置isTracked的值。 
21.最后編寫Update函數,根據追蹤的狀態和鼠標事件更新模型。
在Start函數下面添加一個Update函數。 當追蹤到了識別圖,利用Input.GetMouseButtonDown函數監聽鼠標的點擊事件,參數0表示鼠標左鍵,如果點擊了鼠標左鍵,那么Input.GetMouseButtonDown(0)就會返回true,這時如果新的縮放因子newScale不小于0.01(避免過度縮小),我們減小newScale,然后讓模型的縮放因子等于newScale,這就實現了縮小模型。 當追蹤不到識別圖,要把模型的縮放因子重置為原始的縮放因子,不然下次顯示時仍是縮小后的模型。 最終的效果如下:

得到上面的結果就完成了第二部分對模型進行簡單操作。以上演示的是PC端的,因為Vuforia是移動端的一個SDK,所以發布成PC端的程序會無法運行。如果是做APP的話,那就得配置好JDK跟Android SDK,交互方式也會不一樣,因為移動端沒有鍵盤和鼠標,所以需要其他的交互方式,比如監聽觸摸事件或是額外添加按鈕等UI元素,這些內容可以在網上搜到很多資料,就不詳細描述。
新聞熱點
疑難解答