SteamVR2.0(我這裏用v2.5版本)的動作捕捉與MFC中的變量綁定很相像,大致分三步
(1).在SteamVR Input中定義量A
變量類型決定可綁定哪個動作。比如要檢測手柄扣板機動作,可以檢測是否扣了扳機(對應bool變量),也可以檢測扣了多大幅度(對應single或Vector1變量)。
(2).將變量A與某個動作綁定
(3).在代碼中使用變量A
經過上面三步,實現了代碼與硬件的通信,變量A是中間媒介。當變量A綁定了新的按鍵動作時,代碼不用修改就可適配,解耦了硬件與代碼。
下面開始進行實際操作,以HTC VIVE作爲VR設備進行測試。部分細節忽略,只寫主要部分。
1.在SteamVR Input中定義量A
在Unity編輯器中,使用 Window > SteamVR Input 命令,打開SteamVR Input 窗口。
初次導入SteamVR 2.0並運行程序時,會彈出一個對話框,提示沒有actions.json文件,並詢問是否要使用默認值,選擇Yes。
新增變量MyGripSingle,變量類型爲Vector1,完成後點擊【Save and generate】按鈕。
2.將變量A與某個動作綁定
點擊【Open binding UI】,開始將變量與動作綁定。
3.在代碼中使用變量A即可
(1).新建場景,將Assets\SteamVR\Prefabs下的[SteamVR].prefab、[CameraRig].prefab拖入場景,有了這兩個組件,就可以在頭顯中看到VR場景了。
(2).創建空物體MyTest,創建腳本MyTest.cs並掛載到MyTest物體上,在MyTest.cs輸入如下代碼:
using UnityEngine;
using Valve.VR;
public class MyTest : MonoBehaviour {
void Update () {
if (SteamVR_Actions.default_MyGripSingle.changed)
{
Debug.Log("檢測到:"+SteamVR_Actions.default_MyGripSingle.axis);
}
if (SteamVR_Actions.default_MyGripSingle[SteamVR_Input_Sources.LeftHand].changed)
{
Debug.Log("檢測到左手柄:"+SteamVR_Actions.default_MyGripSingle[SteamVR_Input_Sources.LeftHand].axis);
}
if (SteamVR_Actions.default_MyGripSingle[SteamVR_Input_Sources.RightHand].changed)
{
Debug.Log("檢測到右手柄:" + SteamVR_Actions.default_MyGripSingle[SteamVR_Input_Sources.RightHand].axis);
}
}
}
(3).運行程序,扣動扳機,就可以看到輸出結果了。大功告成。