一、關於左右手柄的對應關系
- 兩個手柄和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
