【Oculus Interaction SDK】(十)在 VR 中使用手勢識別

2023-02-20 18:00:59

前言

前段時間 Oculus 的 SDK 頻繁更新,很多已有的教學都不再適用於現在的版本了。本系列文章的主要目的是記錄現版本常見功能的實現方法,便於自己後續開發。當然,不排除我文章剛寫完 SDK 又變了的可能性,所以如果有人發現文章的內容已經不適用於新版本了,也可以留評論或者私信我,我會持續更新文章內容。

當前適用版本:

  • Unity 版本:2021.3.7f1c1
  • Oculus Interaction SDK 版本:47.0

文章最近更新日期:2023.02.20

 


環境準備

專案建立與新增 SDK 的具體方式不再描述,之前的文章中有提到過

【Oculus Interaction SDK】(一)設定 VR 相機與控制器 & 實現簡單的抓取功能 - 千葉Christa - 部落格園 (cnblogs.com)

 

建立一個新場景,刪除原相機,在 Project 視窗搜尋 OculusInteractionSampleRig,並將其新增到場景中

 

製作所需的手勢

建立一個空物體 Poses 作為要製作的所有手勢的父級,在它之下再建立一個空物體 Bunny Right(右手的兔子手勢),用來記錄我們需要測試的手勢

 

為 Bunny Right 新增 Shape Recognizer Active StateHand Ref 元件,並完成元件之間的參照

注:文章中用到的手是右手,如需使用左手,請參照 LeftHand

 

接下來,我們需要為手勢記錄器(Shape Recognizer Active State)新增手勢

 

在 Assets 資料夾下新建一個 Hand Pose 資料夾,用於存放手勢相關的資料檔案

右鍵 > Create > Oculus > Interaction > SDK > Pose Detection > Shape,建立一個手勢檔案 Bunny

 

我們可以通過這個檔案來建立想要的手勢(圖中設定為兔子手勢)

 

關於手勢設定的詳細資訊,可以參照這篇文章

【Oculus Interaction SDK】(十一)關於手勢識別中手勢設定的詳細資訊 - 千葉Christa - 部落格園 (cnblogs.com)

 

實現手勢識別功能

把設定好的手勢 Bunny 新增到 Shape Recognizer Active State 的手勢列表中

 

接著新增一個 Active State Selecter 元件,並參照 Shape Recognizer Active State 元件,這樣我們就可以檢測手的姿態了

 

現在,我們需要檢測手勢識別的效果

 

在場景中新建一個 Cube,設定好大小和位置,並新增 Selector Debug Visual 來視覺化手勢的檢測結果

 

測試下效果

 

從上面的測試結果來看,我們的手勢姿態已經可以被檢測到了。但是當我壓下手腕做出「剪刀」手勢的時候,檢測器依舊會把手勢識別為「兔子」。

「剪刀」與「兔子」手勢在手指設定上是相同的,但是對應的手掌與手腕的方向並不相同,能不能對這一點進行進一步的區分呢?

我們下一步就來解決這個問題!

 

設定手腕與手掌的方向限制

回到 Bunny Right,新增 Transform Recognizer Active State 元件

  • 在 Hand 處參照 Hand Ref 獲取手的姿態
  • 在 Transform Feature Configs 處選擇 Palm Away From Face(手掌遠離面部),並標記為 True
  • 在 Up Vector Type 處選擇 World,使手勢的向上的方向與世界保持一致
  • 在 Feature Thresholds 處開啟選擇器,選擇預設的特徵閾值檔案

 

 

Feature Threshold 檔案儲存了每個手指的閾值設定,你也可以建立一個新的閾值檔案要儲存自定義的設定(在這裡我直接使用了預設檔案)

 

回到 Punny Right,現在我們有兩個手勢識別器:Shape Recognizer Active State 和 Transform Recognizer Active State

但是在 Cube 的 Selector Debug Visual 元件上只能參照一個識別器

這個問題該如何解決呢?

 

為 Punny Right 新增 Active State Group 元件,將兩個識別器都新增到 Active States 列表中,並將 Logic Operator 改為 AND(同時滿足兩個條件)

 

在 Active State Selector 處參照 Active State Group,這樣就完成了!

 

大功告成!

 


參考資料

Hand Pose Detection with Oculus Interaction SDK - YouTube