當前位置:
首頁 > 科技 > Unity AR/VR研發最佳實踐:如何避免為不同設備構建內容的痛苦

Unity AR/VR研發最佳實踐:如何避免為不同設備構建內容的痛苦

文章相關引用及參考:映維網

本文來自ParkerhillVR的Jonathan Linowes

映維網 2018年08月21日)很高興看到各種全新VR/AR技術,設備,工具包和平台的不斷湧現。但對於開發者來說,這種變化將成為軟體,功能和業務優先順序的噩夢。

Unity開發者是如何處理這樣豐富,多樣化,不斷變化的眾多功能和服務,並與此同時實現「創建一次,構建多個」呢?在Unity選擇目標平台的能力往往不夠精細。Unity正在努力通過對XR播放器設置和API類的新興支持來解決其中一些問題。但不可避免的是,開發者需要使用更高級別的工具包來滿足他們在Unity項目中定位的實際設備。下圖說明了開發者在應對多個SDK和高級工具包時所面臨的挑戰,包括預製件,非常有用的腳本組件,著色器和示例場景等等。

在Parkerhill,我們已經開發了許多VR和AR項目和演示作品,並且經歷過使用不同SDK來為不同設備構建體驗的痛苦。因此,我們提出了一套適合我們的最佳實踐。更好的是,我們已經實施了一系列的Unity編輯器實用程序,並將其作為Parkerhill BridgeXR軟體包在Unity Asset Store中發布。

一. 五個建議

1. 為player rig使用附加場景

Unity項目自然劃分為不同的場景,可實施遊戲的關卡。Unity同時允許你將場景載入到當前主場景。附加場景是將場景模塊化地組織為單獨對象層的絕佳工具。

我們通常使用附加場景來載入包含camera組件,輸入設備和物理事件處理的設備特定player rig。例如,為了保持主場景獨立於設備,我們可能提供一個包含SteamVR player rig的附加場景,另一個包含Daydream player rig的附加場景。然後我們編寫一個場景管理器腳本,並根據實際的目標設備添加相應的player rig場景。

2. 為特定於SDK的預製件使用條件響應對象

設備SDK包括你在場景中使用的預製對象。例子包括傳送艙,視頻播放器,環境繪圖工具,虛擬角色等等。另一個例子是,根據目標設備的不同,你可能需要模型的低多邊形版本與高多邊形版本,因為設備和平台之間的性能和質量要求差別很大。你的項目可以根據目標設備而選擇相應版本的預製件,並在運行時進行實例化。

3. 應用條件組件以實現特定於SDK的行為

設備SDK最顯著的特徵之一是,存在可以添加到遊戲對象中的組件腳本以實現特定的行為。一個常見例子是可交互的,具有抓取和突出顯示的行為。遺憾的是,Unity不存在有條件地向對象添加組件的簡單方法。

一種解決方案是將可交互對象的單獨版本保存為預製件,然後使用上述條件對象技術來將正確的一個添加到場景之中。這樣你將維護同一對象的完全獨立版本(每個設備SDK一個),而如果你希望更改原始對象,維護問題就會出現。

Unity 2018的Variant prefab功能可以提供幫助,支持你定義從其他預製件asset派生的預製件asset。你可以將原始遊戲對象作為基礎預製件,然後使用添加的可交互組件來製作Variant,每個SDK一個Variant預製件。你仍然需要為每個目標設備分別使用不同的Variant預製件,但至少如果基礎對象已被修改,改動將反映在每個Variant中。

在Parkerhill,我們實施了一個更好的解決方案:Refabs。從某種意義上說,Refabs是Variant Prefabs的反面。「refab」是可重複使用的組件集合(保存為預製件),可應用於任何遊戲對象。它們允許你將行為與對象分開,將其作為一個或多個組件的一組,並用作遊戲對象模板的組件。

Refabs的工作方式如下:將組件添加到空白遊戲對象,並將其另存為預製件。可以使用Refab Loader組件將這組組件添加到任何遊戲對象中。然後,場景中的對象將只有一個Refab Loader指向要使用的refab。同樣可復用的組件集同樣可以添加到其他遊戲對象中。

4. 將特定於設備的輸入事件映射到應用程序語義事件

除了player rig,預製件和對象組件之外,你還應該分離應用程序與設備相關的輸入事件。對於基於畫布的UI輸入(如按鈕),請嘗試使用Unity的標準Event System。

對於更一般的對象交互(如抓取,使用和投擲),特定於設備的SDK可以直接管理用戶的雙手或輸入控制器,光線投射和觸覺反饋。

要將應用程序與SDK分離,請不要在應用程序中使用特定於工具包的事件。你應該將特定於工具包的事件映射到應用程序語義事件。語義事件是在應用程序情景中具有意義的事件。例如,你的應用程序可能只需要知道「這個對象已被抓取」,而不是響應「左手扳機鍵按鈕已被按下」。

5. 排除SDK文件夾以避免編譯器和生成衝突

當你為一個特定平台構建導入多個SDK的項目時,由於插件庫之間的衝突,你可能會遇到編輯器或生成錯誤。你需要刪除未使用的違規文件夾。解決方法是重命名帶波形符的文件夾(「FolderName~」),這樣Unity就會忽略它。

二. Parkerhill BridgeXR工具包

通過分離應用程序與任何一個特定SDK,上述五條建議在令應用程序獨立於設備方面可以提供巨大的幫助。這涉及一定的工作,但可以手動完成。幸運的是,Parkerhill提供了一個幫助你管理的工具。

用於Unity的Parkerhill BridgeXR插件包含一組編輯器內實用程序,支持上面列出的五種最佳實踐,如下所示:

Scene Bridg:根據當前活動設備標識符(Bridge ID),有選擇地將附加場景載入到當前場景。適用於要包含在場景中的player rig和其他特定於設備的對象層。

Prefab Bridge:根據當前活動的Bridge ID,有選擇地在場景中的生成點實例化Game Object預製件。當你為不同設備使用相似但不同的預製件時使用它,如傳送點和視頻播放器等等。

Component Bridge?:當你為每個目標設備使用定義複雜行為的不同組件集時,使用Component Bridge。它可以根據當前活動的Bridge ID並有選擇地將一個或多個Unity組件添加到遊戲對象。Component Bridge基於Parkerhill Refab實用程序,是使用特定於SDK的組件來實施常見行為的強大工具。

Input Event Mapping:使用BridgeXR的事件發送器組件和接收方組件來將核心應用程序映射至特定於應用程序的語義事件,從而分離核心應用程序和特定於設備的SDK輸入事件。

Folder Exclusions:編輯器內工具,可支持你在定位一台或另一台設備時排除特定文件夾。

每個實用程序都有自己的優點。當結合起來時,它們提供了一種在Unity項目中構建獨立於設備層的方法。BridgeXR可幫助你在單個項目中管理多個SDK,沒有版本控制或其他不令人滿意的任務。

無論是自行操作,還是藉助Parkerhill BridgeXR這樣的Unity實用程序,上述技巧可以幫助你繼續使用自己熟悉和信任的高級工具包,利用來自優秀VR和AR供應商的軟體,並避免可能影響你開發的大部分VR和AR工具包SDK碎片化情形。

文章《Unity AR/VR研發最佳實踐:如何避免為不同設備構建內容的痛苦》首發於 映維網。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 映維VR 的精彩文章:

前索尼PS VR高級研發工程師加入谷歌ATAP部門
斯坦福大學用深度感知、注視點追蹤為普通眼鏡帶來近距離對象聚焦能力

TAG:映維VR |