HoloToolkit5.5.0 API詳解

Chapter 1 - Gaze(凝視)

目標


創建一個隨“視線”移動的光標


實踐


在Project面板中,找到”Assets/HoloToolkit/Input/Prefabs/InputManager.prefab”,拖動到Hierarchy根目錄 
同樣,將”Assets/HoloToolkit/Input/Prefabs/Cursor/Cursor.prefab”,拖動到Hierarchy根目錄

視線凝視

說明


InputManager.prefab 

輸入管理器,用來管理視線、手勢等輸入源。 
這個管理器還提供了在編輯器中模擬輸入的功能:
Shift:左手
Space:右手
鼠標移動:模擬手移動
鼠標左鍵:模擬手點擊
鼠標右鍵:模擬視線移動
WSAD/QE:攝像機移動


Cursor.prefab 
工具包自帶光標之一,主要實現凝視物體時,出現附着圓環,否則光標發亮。 

凝視物體和不凝視物體


其他幾個自帶光標如下:


BasicCursor.prefab:基礎光標,凝視物體出現附着圓環,否則不顯示。

凝視物體和不凝視物體


CursorWithFeedback.prefab:手勢檢測光標,當檢測到手時,會變成一個手勢圖標。


DefaultCursor.prefab:默認光標,模擬Hololens系統內置光標。


Chapter 2 - Gestures(手勢識別)

目標

點擊Cube,Cube墜落

實踐

新建文件夾:”Assets/_Scenes/Holograms 101/Scripts/” 
新建C#腳本:”Assets/_Scenes/Holograms 101/Scripts/Cube.cs”,內容如下:

using HoloToolkit.Unity.InputModule;
using UnityEngine;

public class Cube : MonoBehaviour, IInputClickHandler
{
    /// <summary>
    /// 點擊事件(包含手勢點擊和Clicker設備的點擊)
    /// </summary>
    public void OnInputClicked(InputEventData eventData)
    {
        // 爲Cube增加剛體,產生掉落效果
        if (!this.GetComponent<Rigidbody>())
        {
            var rigidbody = this.gameObject.AddComponent<Rigidbody>();
            rigidbody.collisionDetectionMode = CollisionDetectionMode.Continuous;
        }
    }
}
將腳本拖拽至Cube


說明


IInputClickHandler 
點擊事件處理接口,需要實現OnInputClicked(InputEventData eventData) 方法 
在該方法中實現具體的邏輯。
HoloToolkit中還提供了更多的事件處理接口,如下:


IFocusable 凝視聚焦事件,當視線進入或離開物體的觸發
IHoldHandle 處理Hold手勢事件
IInputHandler 處理點擊過程中的按下和鬆開事件
IInputClickHandler 處理點擊事件
IManipulationHandler 處理手勢操縱事件,事件返回手勢偏移量
INavigationnHandler 處理手勢導航事件,事件返回手勢偏移量,值域[-1, 1]
ISourceStateHandler 處理事件源的狀態監測,比如:手勢離開檢測區域
ISpeechHandler 處理語音命令(5.5.1f1新增)

Chapter 3 - Voice(聲音)

目標

語音命令控制Cube墜落

實踐

打開Player Settings…面板,在Publishing Settings>Capabilities中,勾選Microphone
修改文件:”Assets/_Scenes/Holograms 101/Scripts/Cube.cs”,如下:

using HoloToolkit.Unity.InputModule;
using UnityEngine;

public class Cube : MonoBehaviour, IInputClickHandler
{
    // Cube原始位置
    Vector3 originalPosition;

    void Start()
    {
        // 保存Cube原始位置
        originalPosition = this.transform.localPosition;
    }

    /// <summary>
    /// 點擊事件(包含手勢點擊和Clicker設備的點擊)
    /// </summary>
    public void OnInputClicked(InputEventData eventData)
    {
        OnDrop();
    }

    // 重置Cube位置
    public void OnReset()
    {
        // 刪除Cube的剛體,取消掉落效果
        var rigidbody = this.GetComponent<Rigidbody>();
        if (rigidbody != null)
        {
            DestroyImmediate(rigidbody);
        }
        // 重置Cube位置
        this.transform.localPosition = originalPosition;
    }

    // 讓Cube掉落
    public void OnDrop()
    {
        // 爲Cube增加剛體,產生掉落效果
        if (!this.GetComponent<Rigidbody>())
        {
            var rigidbody = this.gameObject.AddComponent<Rigidbody>();
            rigidbody.collisionDetectionMode = CollisionDetectionMode.Continuous;
        }
    }
}
在Hierarchy中添加一個空的GameObject,命名爲:”Controller” 
將”Assets/HoloToolkit/Input/Scripts/Voice/KeywordManager.cs”拖拽至”Controller” 
點擊”Controller”,在Inspector面板中,按圖進行設置:

設置語音命令
其中:Keyword對應的語音命令,Response()面板中設置響應的對象及方法

說明


爲什麼我發出語音命令,但是沒有反應? 
檢查一下上面的步驟可有遺漏?
使用Holographics Remoting Player進行調試時,如果有外置麥克風,請試着對外置麥克風說話
請注意勾選Microphone功能
爲什麼要創建一個單獨的”Controller”對象來放置語音命令腳本? 
個人喜好,方便管理。將”KeywordManager.cs”放置在其他對象上也是可以的。 
但需要提醒的是,儘可能不要放置到HoloToolkit內置的Prefab上。 
由於目前HoloToolkit-Unity在Github上更新頻率相當快!在項目中儘量保持組件的獨立性,便於以後升級版本。


Chapter 4 - Spatial sound(空間聲音)

目標

把Cube變成“音樂盒”,隨着Cube的墜落,聲音消失

實踐

打開菜單:”Edit > Project Settings > Audio”,將Spatializer Plugin修改爲:MS HRTF Spatializer,如圖所示:

設置MS HRTF Spatializer

找到聲音文件:”Assets/HoloToolkit/SpatialSound/Tests/Support/Audio/Vocals.wav” 
將其拖拽到Cube上,點擊Cube,按下圖調整Audio Source:

添加3D音效

說明

Spatial Blend   調整聲音的3D效果

Doppler Level   多普勒級別越大,移動速度對聲音波長的影響越大,移動中會導致“變聲”

Volume Rolloff   音量衰減模式


Chapter 5 - Spatial mapping(空間映射)


目標

掃描房間,將Cube放置在房間地面、牆體等地方

實踐

找到文件:”Assets/HoloToolkit/SpatialMapping/Prefabs/SpatialMapping.prefab” 
拖拽到Hierarchy 根級

空間映射完成,測試運行!

注意:第一次運行時,需要耐心等待一段時間

找到文件:”Assets/HoloToolkit/Utilities/Scripts/WorldAnchorManager.cs” 
拖拽到Controller上 
找到文件:”Assets/HoloToolkit/SpatialMapping/Scripts/TapToPlace.cs” 
拖拽到Cube 上 
單擊Cube,在Inspector面板上,去掉Cube (Script)的勾選(否則在點擊Cube時會出現異常)

放置物體完成,測試運行!

注意:需要等待空間映射效果出現後,才能放置Cube

說明:

SpatialMapping.prefab 內置空間映射組件

WorldAnchorManager.cs 內置空間座標管理器

TapToPlace.cs 單擊並放置物體到空間的腳本,內置的


發佈了39 篇原創文章 · 獲贊 85 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章