MixedRealityToolKit【MRTK】 學習
MRTK 是用於 Hololens 等微軟系 XR 設備的開發包。
點此訪問 MRTK 主頁
[推薦一個 Hololens 演示視頻](https://www.bilibili.com/video/av7047843?from=search&seid=14965371010187156405)
起步
新建一個 MR 場景
新建一個空場景,之後使用配置工具,就可以快速配置一個 MR 場景
配置
MRTK 有着許多設置選項。
MRTK 的全局配置表如圖所示
點擊右邊的 </> 可以快速新建自定義配置
這是我自定義的配置,而默認配置是不可更改的。你可有通過 Customize 來參照默認配置制定一份自定義配置。
- Experience 用戶體驗的配置,包含遊戲的對物理空間的需求等。
- Camera 主攝像頭的配置,和 Camera 組件的內容差不多。
- Input System 輸入配置,包括手部動作、語音輸入等。
- Boundary System 遊戲物理空間邊界的顯示
- Teleport System 尚未研究
- Spatial Awareness System 和空間識別有關。默認情況下,在遊戲運行時會顯示現實世界的物體的邊界線,這也是和這套系統有關。停用這套系統後,邊界線也會不再顯示
- Diagnostics System 尚未研究
- Additional Service 閒雜
通識
輸入模塊
各類動作事件及其處理接口
輸入類別 | 名稱 | 處理這個輸入的接口 | 解釋 |
---|---|---|---|
Pointer | PointerClicked | IMixedRealityPointerHandler | 手指點擊 |
Pointer | PointerUp | IMixedRealityPointerHandler | 手指按下 |
Pointer | PointerDown | IMixedRealityPointerHandler | 手指擡起 |
Input | OnInputUp | IMixedRealityInputHandler | 手指/按鍵擡起(測試失敗) |
Input | OnInputDown | IMixedRealityInputHandler | 手指/按鍵按下 |
Input | OnInputChanged | IMixedRealityInputHandler | 手指/按鍵狀態改變 |
Focus | OnFocusEnter | IMixedRealityFocusHandler | 中央白點指向物體 |
Focus | OnFocusExit | IMixedRealityFocusHandler | 中央白點離開物體 |
Focus | OnFocusChanged | IMixedRealityFocusHandler | Enter 與 Exit 切換時 |
如何使用動作事件的處理接口?
class Test:MonoBehaviour,IMixedRealityPointerHandler,IMixedRealityInputHandler<MixedRealityPose>{
//來自IMixedRealityPointerHandler,當手指在點擊時觸發
public void OnPointerClicked(MixedRealityPointerEventData eventData)
{
Vector3 cmPosition;
//獲取當前點擊時,攝像機的世界位置
eventData.Pointer.TryGetPosition(out cmPosition);
}
//來自IMixedRealityInputHandler,當【MixedRealityPose】的輸入內容產生了變化...
public void OnInputChanged(InputEventData<MixedRealityPose> eventData){}
//……
}
使用 UnityEngine.XR 提供的接口來即時獲得位置
class Test:IMixedRealityInputHandler<MixedRealityPose>{
void Update(){
//獲取右手的位置
Vector3 handPosition=UnityEngine.XR.InputTracking.GetLocalPosition(XRNode.RightHand);
}
}
使用 MRTK 的舒適姿勢
MRTK 大綱如圖
- MixedRealityToolkit 定義了一些核心類,可以在中後期仔細研究這些內容
- MixedRealityToolkit.Examples 定義了一些範例,幷包含一個 readme 文件。閱讀這個文件之後再學習範例,效果更佳。
- MixedRealityToolkit.Generated MRTK 自動生成的文件所存放的位置
- MixedRealityToolkit.Providers 定義了一些核心的、與硬件相關的功能的具體實現
- MixedRealityToolkit.SDK 定義了一些次核心的工具類,這些類在前期會叫常用到,可以仔細研究。其中既包括完善遊戲的內容(Features),也包括輔助開發的內容(如 Inspectors,實時顯示數據內容)
- MixedRealityToolkit.Services 對應 MRTK 配置中的各個模塊。
遇到的坑
IO 234
使用某些版本的 Unity 編譯 MRTK 項目時,IO 會報出 234 號錯誤。
解決方法:換一個 Unity 版本吧。這是 Unity 內部的問題,沒有解決的思路,也沒查到解決方法。
Holographic
根據官網教程,需要在 Hololens 裏下載 Holographic 這個應用來開發 Hololens。
在 Unity 上提供一個用來連接到 Hololens 上的編輯窗口。
一般來說,使用這個窗口不會有什麼問題。但是目前根據使用情況,在 Disconnect(斷開與 Hololens 的連接)的時候,需要注意 Holographic 這個應用的狀態。如果在不適合的時候 Disconnect,有機率發生未知的傳輸錯誤,以至於Unity 等待時間過長而崩潰。在退出 Play 狀態時,偶爾也會因爲傳輸數據的問題發生這種崩潰錯誤。
翻了半天,我沒有找到這個編輯窗口相關的代碼,尚無法徹底解決這個問題。
深入
一些關鍵類型
MixedRealityInputSystem
輸入系統核心函數
尚未完全研究透徹,我會不定時的更新這份筆記。歡迎有疑問的同學在樓下提問,讓我們一起冷凝一起飛 :)