HTC vive開發:關於手柄按鍵


一、關於左右手柄的對應關系

  • 兩個手柄和SteamVR_TrackedObject.EIndex是對應的,一個是EIndex.Device2,另一個是EIndex.Device3(有編號的那個)
  • 在場景中手柄先后連入,先后激活的是Controller(right)、Controller(left),並添加SteamVR_TrackedObject組件

二、手柄按鍵

 

1 - 菜單鍵

6 - 系統鍵(按下后手柄斷開連接,再次按下手柄再次連接上)

7 - 扳機鍵

8 - 握持鍵

9 - 觸摸板鍵

 

(1)點按

按鍵監聽方式一:(SteamVR的方式,封裝了OpenVR)

通過Device.GetPressDown / GetPressUp / GetPress獲取按鍵事件

 

 

按鍵監聽方式二:(OpenVR的方式,偏底層)

通過controllerState.ulButtonPressed & (SteamVR_Controller.ButtonMask.Trigger)獲取按鍵的按下、松開兩種狀態

 

或者:

注:m_State、m_PrevState分別表示:當前幀狀態、前一幀狀態

獲取按下時,觸摸板的值

 

獲取松開時,觸摸板的值(這里必須使用前一幀的狀態,因為松開時,當前幀的觸摸的值為0)

問題:按下時,沒有獲取到當前幀觸摸板的值!
猜測原因:獲取值的Update方法在更新狀態Update的方法之前執行了,更新狀態的Update方法執行后,才能獲取觸摸板的值
解決方法:如果不想修改腳本執行順序的話,可以使用LateUpdate

(2)觸摸

  • 適用於觸摸板鍵
  • 適用於扳機鍵(和點按類似,只是鍵程更短)
方式一:

方式二:

問題:觸摸按下時,沒有獲取到當前幀觸摸板的值!
原因:不明,內部機制需要搞清楚
解決辦法:在觸摸按下后的第二幀才獲取到觸摸板的值。
 

(3)觸摸板軸的獲取

通過以上兩種方式獲取的VRControllerState_t,獲取觸摸板的軸

x = state.rAxis0.x

y = state.rAxis0.y

 

 


免責聲明!

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



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