Hololens開發筆記之使用Unity開發一個簡單的應用


一、Hololens概述


 

Hololens有以下特性

1、空間映射
借助微軟特殊定制的全息處理單元(HPU),HoloLens 實現了對周邊環境的快速掃描和空間匹配。這保證了 HoloLens能夠准確地在真實世界表面放置或展現全息圖形內容,確保了核心的AR體驗。

2、場景匹配
HoloLens 設備能存儲並識別環境信息,恢復和保持不同場景中的全息圖像對象。當你離開當前房間再回來時,會發現原有放置的全息圖像均會在正確的位置出現。

3、自然交互
HoloLens 主要交互方式為凝視(Gaze)、語音(Voice Command)和手勢(Gesture),這構成了 HoloLens的基本輸入要素。同時傳統的鍵盤鼠標等設備也被支持,自然的交互方式更貼近人類習慣,提高了交互效率。

4、 通用應用
HoloLens 平台的操作系統為 Windows Holograpic,同樣基於 Windows 10 定制。所以Windows 10 UWP 通用應用程序可以順利地在 HoloLens 上運行。這不僅降低了研發和遷移成本,也讓開發效率能夠大幅提升。當然,說了很多 HoloLens 獨特的特性和優點后,HoloLens 開發者版本也存在一些亟待解決的問題,包括視野較窄、凝視體驗不佳、抗光線干擾弱和重量續航等問題。 但瑕不掩瑜,HoloLens 帶來了真正的混合現實體驗,擁有着強烈的沖擊感,未來將大有作為。

 

二、開發環境搭建


 

開發Hololens之前需要准備以下環境(以下為我准備的環境)

1、Visual Studio 2015 Update 3

2、HoloLens Emulator (build 10.0.14393.0)(有真機可以不用模擬器)

3、Unity HoloLens Technical Preview

4、Windows 10 SDK (10.0.14393.33) VS中進行安裝

更加詳細的環境配置可參考

https://developer.microsoft.com/en-us/windows/holographic/install_the_tools

 

三、集成HoloToolkit-Unity項目


 

在創建了標准 Unity 項目之后,我們需要集成微軟官方提供的 HoloToolkit-Unity 項目。HoloToolkit-Unity 項目是微軟官方的開源項目,用於幫助開發者快速開發 HoloLens 應用,能夠快速為項目集成基本輸入、空間映射和場景匹配等特性。

關於該項目的詳細介紹,可以參考微軟的開源項目https://github.com/Microsoft/HoloToolkit-Unity

集成步驟

1、下載HoloToolkit-Unity代碼 https://github.com/Microsoft/HoloToolkit-Unity.git

2、使用unity打開HoloToolkit工程,右擊Assets,導出Package

3、在自己的工程中使用HoloToolkit-Unity package

新建自己的Unity工程,Assets -> Import Package -> Custom Package 選擇剛才導出的HoloToolket-Unity package, 導入成功后,可以看到HoloToolkit菜單

 

以下是此項目的結構和內容
 Input 目錄 
     GazeManager.cs 用於快速集成凝視射線特性; 
     GestureManager.cs 用於快速集成手勢識別特性; 
     KeywordManager.cs 用於快速集成語音命令特性; 
     CursorManager.cs 用於快速集成可視化凝視組件。 
 Sharing 目錄 
     Sharing Prefab 組件用於快速集成場景共享特性。 
     SpatialMapping 目錄 
     SurfacePlane Prefab 組件用於描述和渲染真實世界表面; 
     SpatialMapping Prefab 組件用於快速集成空間映射特性; 
     RemoteMapping Prefab 組件用於快速集成遠程空間映射信息導入特性; 
 SpatialSound 目錄 
     UAudioManager.cs 用於快速集成空間聲音特性。 
 Utilities 目錄 
     Billboard.cs 用於實現跟隨用戶視線特性; 
     Tagalong.cs 用於實現跟隨用戶移動特性; 
     Main Camera Prefab組件用於快速集成 HoloLens 標准主攝像機。

 

四、構建場景


 

1、新建空白場景后,我們需要刪除原有的 Main Camera 對象,同時從 HoloToolkit/Utilities/Prefabs 目錄中拖拽一個 Main Camera Prefab 組件到場景中,這樣就集成了滿足 HoloLens 需求的基本。主攝像機。對於 HoloLens,將主攝像機渲染背景設為純色,顏色設為 RGBA(0,0,0,0)。因為任何純黑的顏色將會被 HoloLens 渲染為透明,以達到不遮擋現實世界的目的。此外,HoloLens 建議攝像機視角近距離為 0.85,這個距離最符合真實人眼的體驗。同時主攝像機位置必須重置為世界零點,即 xyz(0,0,0),任何全息圖像將會以此為原點在周邊世界中繪制出來。

2、點擊“ Create Empty” 創建一個空游戲對象,並將其命名為 Input,為 Input 對象添加核心腳本組件,分別為 GazeManager.cs、 GestureManager.cs、 HandsManager.cs 和KeywordManager.cs。這樣就集成了凝視、手勢和語音命令三大核心特性。對於凝視射線、手勢識別和語音命令功能,均建議使用單例來進行管理,這樣可以避免功能混亂,方便管理。同時為凝視設置可視化的指針,可以提高用戶的交互體驗和效率。

 

3、從 HoloToolkit/Input/Prefabs/ 目錄下拖拽 CursorWithFeedback Prefab 組件到場景中。這樣當凝視在全息對象時,其表面會出現可視化凝視組件。 當用戶手勢被識別到時,會出現一個藍色的手掌圖像,能夠貼心的告訴用戶可以操作了。

4、創建一個Cube對象並創建一個新的C#腳本,命名為 HoloTest.cs。

using UnityEngine;  
using System.Collections;  
  
public class HoloTest : MonoBehaviour {  
  
    // Use this for initialization  
    void Start () {  
      
    }  
      
    // Update is called once per frame  
    void Update () {  
      
    }  
  
    public void OnSelect()  
    {  //隨機變換物體顏色 
        gameObject.GetComponent<MeshRenderer>().material.color = new  
            Color(Random.Range(0, 255) / 255f, Random.Range(0, 255) / 255f,  
            Random.Range(0, 255) / 255f);  
    }  
}  

5、HoloTest.cs 腳本的功能為隨機更換對象的材質顏色,遵循 GestureManager.cs 中預設的OnSelect消息名稱
進入 Input 組件檢視選項卡,為 KeywordManager.cs 組件配置語音命令。語音命令觸發時將會執行相應的組件行為。 本例中,當我說出“ test”時,觸發Cube的 OnSelect 方法,來隨機改變 Cube 顏色。

 

五、編譯項目


 

1、為了滿足HoloLens的需求,我們需要在 Player Settings 里面開啟Virtual Reality Support,並在下拉列表中選中Windows Holographic,只有這樣 HoloLens 才會將此應用渲染為3D應用,這一點十分關鍵。

2、同時從工具欄 Edit->Project Settings->Quality 選項卡中,將 UWP 平台默認畫質設為Fastest。這是為了降低性能開銷,官方推薦幀率為 60fps。 

3、Build Settings 視圖中選擇目標平台為 Windows Store,SDK 為 Universal 10,其他設置為如圖所示,把Unity C# Projects勾上方便調試,點擊 Build 按鈕開始編譯 UWP 項目。 

 

六、部署調試應用


 

使用 Visual Studio 打開編譯后的 UWP 項目,在 Debug (方便調試)選項上設置為x86(Hololens的系統類型,非計算機的)。 

連接 HoloLens 到 PC,完成 Build 和 Deploy 后,我們在 HoloLens 中打開此應用。實際效果如圖 所示。當我使用手勢點擊 Cube 時,它會隨機變化顏色;而當我說出語音命令"test"時,Cube 仍會正常的變換顏色。


 

七、開發總結


 

使用 Unity 引擎開發 HoloLens 應用是非常容易的事情,大部分流程與開發 UWP 項目並無不同。但仍有不少需要注意的雷區和特殊要求,以下就是部分要注意的部分: 
1. Main Camera 一定要按照官方要求配置,背景純色且 RGBA 值為(0,0,0,0),這樣才能避免遮擋現實內容; 
2. Gaze 凝視特性需要我們使用 Raycast 來實現,注意處理射線未命中目標情形,默認凝視最遠距離為 15 米,若是未擊中物體,使用時可能會出現空引用異常; 
3. 手勢識別、拍照和語音命令等均需使用 Windows 特有 API,空間映射和場景匹配需要使用 HoloLens 特有 API; 
4. 其他很多細節上的體驗,例如可視化凝視組件、目標區域可視化指引組件,使用他們來給用戶提示,可以幫助用戶理解應用操作方法,提高使用體驗。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM