Hololens-Unity空間映射(轉(zhuǎn))

轉(zhuǎn)自:http://dev.arinchina.com/177wz/ar9625/9625/1

命名空間:UnityEngine.VR.WSA.SurfaceObserver

本文主要介紹如何在Unity項目中使用空間映射功能。Unity中提供了對空間映射功能的支持,可通過以下方式提供給開發(fā)者:

1. 可以在HoloToolkit項目中找到空間映射組件,會提供便捷快速地路徑開始使用空間映射特性。

2. 底層空間映射API,以便開發(fā)者能夠完全控制空間映射特性,滿足定制復(fù)雜應(yīng)用的需求

為了在應(yīng)用中使用空間映射功能,需要在AppxManifest(應(yīng)用權(quán)限清單)中設(shè)置啟用SpatialPerception性能。

設(shè)置SpatialPerception性能

為了使應(yīng)用能夠使用空間映射數(shù)據(jù),SpatialPerception性能必須被啟用。

可以通過使用以下步驟開啟該功能:

1. 在Unity編輯器中,進入Player Settings選項(Edit > Project Settings > Player)

2. 點擊Window Store選項卡

3. 展開Publish Settings選項,并在Capabilities列表勾選SpatialPerception選項

注意:如果你已經(jīng)把Unity項目導(dǎo)出為Visual Studio項目,你需要重新導(dǎo)出修改后的項目到新文件夾或者手動在Visual Studio中修改AppxManifest應(yīng)用清單。

空間映射特性也要求MaxVersionTested版本最低為10.0.10586.0

1. Visual Studio項目解決方案,雙擊Package.appxmanifest文件,并右鍵選中查看源碼方式打開

2. 找到TargetDeviceFamily這一行,并將MaxVersionTested="10.0.10240.0"修改為MaxVersionTested="10.0.10586.0"

3. 保存Package.appmanifest文件

空間映射組件

HoloToolkit為簡單快速集成空間映射特性至應(yīng)用提供了幾個方案。

對于默認的空間映射需求,推薦使用SpatialMappingComponent目錄下的SpatialMappingCollider.csSpatialMapppingRenderer.cs腳本。如果你需要從網(wǎng)絡(luò)或者文件載入空間網(wǎng)格,可以使用更為合適的SpatialMapping目錄下的腳本。

更多的細節(jié)可以在HoloToolkit Github主頁上找到。

如何使用API

命名空間:UnityEngine.VR.WSA

類型SurfaceObserver,SurfaceChange,SurfaceData,SurfaceId

以下是應(yīng)用推薦的使用空間映射API性能的大致流程。

設(shè)定SurfaceObserver對象

需要為每一個需要空間映射數(shù)據(jù)的空間區(qū)域在應(yīng)用中初始化一個SurfaceObserver對象。

通過調(diào)用SetVolumeAsSphere、SetVolumeAsAxisAlignedBox、 SetVolumeAsOrientedBox、 或 SetVolumeAsFrustum方法,為每個SurfaceObserver對象指定它們需要獲取數(shù)據(jù)的空間區(qū)域。你還可以通過再次調(diào)用它們,重新定義檢測空間區(qū)域范圍。

當(dāng)你調(diào)用SurfaceObserver.Update()時,需要提供每一個SurfaceObserver對象檢測區(qū)域中的空間表面(spatial surface)指定事件處理方法。

處理空間表面變化

在此有幾個需要處理的典型情形。Added和Updated狀態(tài)可使用相同代碼處理,Removed狀態(tài)需要使用另一種代碼處理。

· 在Added和Updated情形下,我們從字典中添加或獲取代表當(dāng)前網(wǎng)格的對象,使用必要的組件來創(chuàng)建一個SurfaceData結(jié)構(gòu)體,然后調(diào)用RequestMeshDataAsync通過在場景中使用網(wǎng)格數(shù)據(jù)和位置來填充對象。

· Removed情況下,我們從字典中移除網(wǎng)格代表的對象并將它銷毀。

處理DataReady事件

OnDataReady事件會接收到一個SurfaceData對象,它包含了WorldAnchor、MeshFilter和MeshCollider對象數(shù)據(jù),表示了當(dāng)前關(guān)聯(lián)的空間表面最新狀態(tài)。通過訪問Mesh Filter對象的Mesh數(shù)據(jù)可以進行性能分析或者網(wǎng)格處理。使用最新的Mesh數(shù)據(jù)來渲染空間表面并將它用于物理碰撞或者射線擊中對象。必須確認SurfaceData內(nèi)容不是空的。

處理更新操作

SurfaceObserver.Update()只能延遲調(diào)用,不是每幀都可更新都調(diào)用。

HoloToolkit

HoloToolkit項目是基于Unity API封裝的一系列很有用的全息開發(fā)代碼工具集合,能幫助開發(fā)者快速集成HoloLens特性。

故障問題解決

· 確保你設(shè)置了 SpatialPreception性能

· 當(dāng)追蹤焦點丟失時,在接下來的OnSurfaceChanged事件處理中將會移除所有網(wǎng)格。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容