在第2章中我們實作了通過vufoira預設方式識别并顯示三維模型。預設的加載模型是通過将3d物體直接放置在場景中并作為識别目标的子物體來實作的,這種實作方式的問題是,當場景中有很多識别目标後,需要一次性加載的模型内容會占用很大的記憶體。是以,在實際項目案例中需要動态加載識别目标對應的模型,在識别丢失之後删除模型,這樣可以保證同一時刻記憶體的占用是手機可以承受的。
本節将通過預制件執行個體化的方式實作ar模型的動态加載和顯示。
1.建立預制件
将imagetarget下調整好的模型拖到最上層,和imagetarget在層級視圖中保持平級關系。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLwQmZyUTNwYjNxgTY4EDZkFWM1MWO2QjYllzNxUmN5czM0kjZiZmZl9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
在assets目錄中建立resources檔案夾,并将層級視圖hierarchy中的模型sphere拖至resources檔案夾中,然後删除層級視圖hierarchy中的sphere模型。
2.為需要加載的預制件添加腳本
在工程視圖project中建立一個新的c#腳本,命名為trackobject.cs,該腳本是為了更友善地找到識别後顯示的物體,将其拖到需要加載的預制件上。
在工程視圖project中找到defaulttrackableeventhandler.cs這個腳本,按住ctrl+d可以
複制一份相同的腳本,選中新複制出來的腳本并按f2快捷鍵将腳本改名為mytrackable eventhandler.cs。然後輕按兩下打開,将類名修改為mytrackableeventhandler,找到監聽識别成功和識别丢失的兩個方法ontrackingfound和ontrackinglost,預設代碼如下:
//識别成功時調用的方法
}
//識别丢失時調用的方法
private void ontrackinglost(){
在預設的這兩個方法實作中,ontrackingfound函數在識别圖像成功之後被調用,ontrackinglost函數在識别丢失之後被調用。該腳本利用了查找目前識别目标所有子物體的渲染器renderer元件,通過其打開或關閉來實作3d物體的顯示和隐藏。現在我們通過動态加載的方式來顯示3d模型,需要删除ontrackinglost和ontrackingfound兩個函數中的内容,并将代碼修改為動态加載的方式實作:
private void ontrackingfound()
{
private void ontrackinglost()
3.效果實作
選擇imagetarget,在inspector面闆上選擇remove component,并将defaulttrackable eventhandler腳本移除,同時把mytrackableeventhandler腳本添加到imagetarget上。
最後,點選運作以測試最終效果,如下圖所示。
以上為動态加載ar中3d物體的步驟和方法。