天天看點

《AR與VR開發實戰》——3.2 模型脫卡功能的實作

在常見的ar項目中,識别到圖像後會将3d物體疊加到識别目标之上并具有追蹤效果,但是當識别目标丢失後,我們希望能夠将3d模型停留在螢幕中心,并能夠和使用者進行互動,比如點選模型伴随動畫切換、播放語音講解等一系列功能。這個功能就是我們本節将要為大家介紹的脫卡功能。

脫卡實作的原理是,将3d物體從識别目标下移出,不再将識别圖作為3d物體的父對象,這樣就能夠實作模型不跟随識别物體的效果。接下來我們将模型用一個建立的camera來渲染,也就是脫離識别圖之後的物體是完全在另外一個camera坐标系下的。

其實,脫卡功能還有更簡單的實作方式,比如在arcamera下建立空物體作為脫離之後模型的目标位置,然後在脫離識别圖後将模型移動到空物體下。

在本節中,我們使用另外一種思路來實作脫卡功能。

1.建立工程并設定參數

建立unity工程,分别導入vuforia sdk插件包和識别圖資料包,然後根據第1章中的設定方法,将需要添加的物體添加到場景,并調整參數以正常識别并顯示3d物體。

《AR與VR開發實戰》——3.2 模型脫卡功能的實作

選擇imagetarget,将其自身的defaulttrackableeventhandler移除,并将該腳本複制一份命名為mytrackableeventhandler,然後附加到imagetarget上。然後建立trackobject.cs和rotate.cs兩個檔案。

輕按兩下打開rotate.cs檔案,并在該腳本update()方法中添加一行代碼以使物體旋轉,代碼如下:

//rotate.cs

//重新整理函數,每一幀被調用一次

void update ()

{

}

//trackobject.cs

//trackobject類用來查找和确定識别後顯示的物體

public class trackobject : monobehaviour

2.腳本修改

修改mytrackableeventhandler.cs中的ontrackingfound和ontrackinglost兩個方法。

//識别成功時調用的方法

private void ontrackingfound()

//識别目标丢失時調用

private void ontrackinglost()

3.場景搭建

選擇imagetarget,在inspector面闆中找到mytrackableeventhandler腳本,設定以下參數。

然後将cube拖到與imagetarget平級的層級,如下圖所示。

《AR與VR開發實戰》——3.2 模型脫卡功能的實作

接下來在hierarchy面闆中右擊建立一個新的camera,選擇其inspector面闆layer标簽中的add layer指令建立一個新的層。

《AR與VR開發實戰》——3.2 模型脫卡功能的實作

在layer 10的位置建立一個新的圖層onshow。再調整剛才建立的camera的clear flags屬性如下。

選擇depth only,然後在culling mask下選擇onshow層,如下圖所示。

 

《AR與VR開發實戰》——3.2 模型脫卡功能的實作

4.效果實作

在assets檔案夾中建立一個名為resources的檔案夾,将cube拖到該檔案夾中生成prefab預制件,并删除在層級視圖hierarchy中的cube物體。

選中arcamera子物體下的camera對象,在其inspector面闆中找到culling mask屬性并取消勾選onshow。

《AR與VR開發實戰》——3.2 模型脫卡功能的實作

接下來,點選運作便可測試脫卡效果的實作。

繼續閱讀