ARFoundation之路-環境配置(Android)
版權宣告:Davidwang原創文章,嚴禁用於任何商業途徑,授權後方可轉載。
ARFoundation支援跨平臺開發,但是開發環境配置與釋出部署卻差異較大,因此,環境配置將分成Android與iOS兩篇來講解。
ARFoundation在Android端使用的是ARCore的底層技術,因此,環境準備與單獨使用ARCore進行開發相似,請參見博文《ARCore之路-環境準備》(不需要安裝ARCore unity SDK ),本文假設讀者已經安裝Unity2019.1最新版。
(一)外掛匯入
現在我們將建立一個新的專案,並匯入ARFoundation和ARCore XR Plugin。在開始選單或者桌面的Unity圖示(或者Unity Hub圖示)啟動Unity,點選New新建一個專案,我們命名為Hellowrold,然後單擊“建立專案”按鈕。
待Unity主統一視窗開啟後,點選Unity 選單欄 window–>Package Manager,將會開啟Package Manager對話方塊。
Package Manager對話方塊預設不顯示ARFoundation和ARCore XR Plugin,因為這幾個外掛目前都處在preview狀態。點選對話方塊中的Advanced下拉選單,選擇Show preview package,這將把所有的preview外掛也都顯示出來。
在左側列表中選擇ARFoundation後右側面板將會顯示該外掛的詳細資訊,點選右下角的“Install”,安裝外掛。如此操作,將ARCore XR Plugin外掛也安裝好。至此,已經將開發Android的AR所需外掛都匯入了。
(二)設定開發環境
在Unity視窗中,按Ctrl+Shift+B快捷鍵,或者在選單欄中選擇File->Build Settings…,開啟設定視窗。選擇“Platform”下的“Android”選項,然後單擊“Switch Platform”按鈕切換到Android平臺。當Unity標誌出現在Android選項旁邊時,釋出平臺就切換成Android了,如下圖所示。
單擊下方的“Player Settings”按鈕繼續後續設定,如下圖所示,按順序依次選擇Player,在Player欄中Company Name與Product Name中填寫公司名與產品名,選擇Android小圖示,在Other Setting選項卡中取消勾選Multithreaded Rendering(多執行緒渲染),最後還要刪除Vulkan,因為Android不支援Vulkan。
繼續往下滾動,在Identification欄中,PackageName填寫應用程式包名,建議與上圖Company Name和Product Name中輸入的公司和程式包名一致,這個值要求唯一,因為如果它與另一個應用程式具有相同的包名,可能會導致問題。另外,我們還需要設定與ARCore相容的Android最低版本,找到“Minimun API level”選項,點選其下拉選單,選擇“Android7.0‘nougat’(API level 24)”或以上,正如這個選項名字一樣,應用程式與ARCore將不會在Nougat版本之前的Android裝置上執行。同時,我們還需要設定一下“Target API Level”,這裡設定的是 “Android 8.0 ‘Oreo’ (API level 26)”,因為筆者的測試手機就是這個版本,讀者可以根據自己的需要設定,但目標版本不得低於Nougat,不然開發的AR應用將無法執行,如下圖所示。
在完成以上設定後,點選“Other Settings”文字以收起Other Settings設定摺疊欄,然後點選“XR Settings”展開之,在使用ARCore原生SDK進行開發時,要求選中“ARCore Supported”複選框以確保應用得到ARCore的支援,但是在使用ARFoundation和ARCore XR Plugin進行Android AR開發時一定不要選擇這個勾,不然編譯將通不過。
完成上述設定操作後,在Unity選單中點選 Edit->Preferences,開啟Unity Preferences對話方塊,如下圖所示,選擇External Tools選項卡。在這裡,我們不僅可以設定使用的程式碼開發IDE、圖片編輯器,最重要的是設定Android SDK和JDK的路徑。在設定時確保路徑正確,否則將無法正確編譯生成Android應用(這個設定只需要操作一次,與應用開發專案無關,即設定完一次後再建立新應用也不必再次設定)。在2019版Unity中,為了簡化使用者的操作,Unity在安裝的時候會進行環境檢測,如果檢測到已安裝JDK和Android SDK後會自動進行設定,如果沒有檢測到Unity也可以進行整合安裝(安裝Unity時會一併安裝JDK和Android SDK),無需要使用者單獨安裝JDK和Android SDK。
在完成以上設定後,下面我們來搭建ARFoundation開發AR應用的基礎框架,這個基礎框架所有AR應用通用。
(三)搭建基礎框架
在Unity開啟的中,我們重新命名場景檔案為“Helloworld”,為後面統一管理檔案,在Projects視窗Assets目錄下新建Prefabs、Scripts兩個資料夾,同時在Hierarchy視窗中刪除Main Camera(因為ARFoundation AR Session Origin只帶有一個AR攝像機,Directional Light可根據需要決定是否刪除),如下圖所示。
在Hierarchy視窗中的空白處點選滑鼠右鍵,在彈出的級聯選單中依次選擇XR–>AR Session和XR–>AR Session Origin,新建這兩個AR基礎元件。
在Hierarchy視窗中的空白處點選滑鼠右鍵,在彈出的級聯選單中依次選擇XR–>AR Default Plane,將Hierarchy視窗中生成的AR Default Plane拖動到Project視窗中的Prefabs資料夾下,製作一個平面prefab,如下圖所示,然後刪除Hierarchy視窗中的AR Default Plane物件。
在Hierarchy視窗選中AR Session Origin物件,然後在Inspector視窗中點選Add Component按鈕,並在彈出的搜尋中搜索“AR Plane Manager”,並新增該元件,如下圖所示。
將Project視窗中Prefabs資料夾下的AR Default Plane拖到AR Plane Manager元件下的Plane Prefab屬性框,如下圖所示。
至此,AR應用的基礎框架我們已經搭建好了,這是一個ARFoundation開發AR應用的基礎框架,流程通用。
(四)AppController
在Project視窗Scripts資料夾下,空白處點選滑鼠右鍵,在彈出的級聯選單中依次選擇Create -->C# Script,新建一個指令碼檔案,並命名為AppController,如下圖所示。
雙擊AppController指令碼,在Visual Studio中編輯該指令碼,新增如下程式碼。
在上段程式碼中,首先我們使用[RequireComponent(typeof(ARRaycastManager))]屬性確保新增該指令碼的物件上必須要有ARRaycastManager元件,因為射線檢測需要用到ARRaycastManager元件。在Update()方法中,我們對手勢進行射線檢測,在檢測到的平面上放置一個虛擬物體,如果該虛擬物體已存在,則將該虛擬物體的移動到射線檢測與平面的碰撞點。
(五)執行Helloworld
經過以上步驟,整體AR應用框架已完全搭建起來了,最後,我們在Hierarchy視窗中製作一個cube,為其賦上紅色材質,將其Scale縮放成(0.1,0.1,0.1),最後將其製作成Prefab並刪除Hierarchy場景中的cube,如下圖所示。
最後一步,在Hierarchy視窗中選中AR Session Origin,為其新增前面編寫的AppController指令碼(可以使用Add Component在搜尋框中搜索AppController新增,也可以直接把AppController指令碼拖到AR Session Origin物件上),並將上一步製作的cube拖到AppController指令碼的Spawn Prefab屬性框中。
AR應用已開發完,將ARCore支援的手機通過USB線或者WiFi連線上電腦,具體連線方法請參考博文《ARCore之路-連線裝置除錯應用》,直接按Ctrl+Shift+B組合鍵(或者選擇File-> Build Settings)開啟Build Settings對話方塊。在開啟的對話方塊中保證選中當前場景,點選Build And Run,設定釋出後的程式名,最後點選“儲存”按鈕開始編譯生成apk,生成的apk應用會自動安裝到連線的手機上並啟動執行,如下圖所示。
如若編譯沒有錯誤,在Helloworld AR應用開啟後,找一個相對平坦且紋理比較豐富的平面左右移動手機進行平面檢測,在檢測到平面後,手指點選手機螢幕上已檢測到的平面,將會在該平面上載入一個小立方體,如下圖所示。至此,我們使用ARFoundation開發的Android Helloworld AR應用已成功。