0.steamvr2.0將動作抽象為6種型別:boolean、single、vector2、vector3、pose、skeleton等型別;
1.[boolean]型別的動作代表只有兩種狀態的動作:true或false,比如抓取(grab)動作,只有抓取或未抓取兩種狀態,不存在中間狀態;(在unity中對應類為:steamvr_action_boolean);
2.[single]型別的動作能夠返回0~1之間的數值,比如trigger鍵按下到鬆開的過程;(在unity中對應類為:steamvr_action_single);
3.[vector2]型別動作能夠返回二維數,比如touchpad上的觸控或手柄搖桿;使用這樣的數值能夠控制物體在四個方向的運動,典型的應用是使用touchpad控制無人機或小車的運動;(在unity中對應類為:steamvr_action_vector2);
4.[vector3]型別的動作能夠返回三維數值;(在unity中對應類為steamvr_action_vector3);
5.[pose]型別的動作表示三維空間中的位置和旋轉,一般用於跟蹤vr控制器;(在unity中對應類為steamvr_action_pose);
6.[skeleton]型別的動作能夠獲取使用者在持握手柄控制器時的手指關節資料,通過返回資料,結合手部渲染模型,能夠更加真實的呈現手部在虛擬世界的姿態,雖然不及像leap motion等裝置獲取手指輸入那樣精確,但是足以獲得良好的沉浸感;(在unity中對應類為:steamvr_action_skeleton);
這裡用grabgrip這個動作舉例(其他的都一樣)
void start()簡單解釋一下(後面就不再解釋了),actions是動作集的意思。steamvr給了四個動作集。default是其中乙個動作集的名稱。default_grabgrip是指default這個動作集下面叫grabgrip的動作,onstatedown表示按鍵按下。private void default_grabgrip_onstatedown
(steamvr_action_boolean fromaction, steamvr_input_sources fromsource)
當按下手柄上對應grabgrip鍵時就會執行default_grabgrip_onstatedown這個方法。
或者可以這麼寫
if(steamvr_actions.default_grabgrip.getstatedown(steamvr_input_sources.lefthand))當按下左手柄的對應按鍵時就會在控制台輸出「left grabgrip「(右手柄同理)
也可以這麼寫
if(steamvr_actions.default_grabgrip.statedown)用第一或第三種方法的時候,如果想要區分左右手柄的輸入還得再加乙個判斷
//左手vector1是single型別的變數(能夠返回0~1之間的數值)if(steamvr_actions.default_grabgrip.activedevice == steamvr_input_sources.lefthand)
//右手
if(steamvr_actions.default_grabgrip.activedevice == steamvr_input_sources.righthand)
這裡用squeeze這個動作舉例
void start()newaxis表示當前的值,newdelta是乙個當前值與上乙個值之間的差值private void default_squeeze_onaxis
(steamvr_action_single fromaction, steamvr_input_sources fromsource, float newaxis, float newdelta)
可以把onaxis換成onchange.區別是,如果使用onchange的話當扳機鍵停留在某一位置不動時就不會觸發.如果使用onaxis的話只要扳機鍵在扳動的狀態就會觸發.
另一種方法:
steamvr_actions.default_squeeze.getaxis(steamvr_input_sources.lefthand)這樣可以直接獲取對應手柄的值
if(steamvr_actions.default_pose.activedevice == steamvr_input_sources.lefthand)這樣可以直接在控制台輸出左手柄的位置和旋轉的角度debug.log
(steamvr_actions.default_pose.localposition+ " " + steamvr_actions.default_pose.localrotation);
或者可以用這種方式在控制台輸出左手柄的位置和旋轉角度
debug.log(steamvr_actions.default_pose.getlocalposition(steamvr_input_sources.lefthand));debug.log(steamvr_actions.default_pose.getlocalrotation(steamvr_input_sources.lefthand));
//振動輸出第乙個引數表示震動條件被觸發時隔多久開始震動(設定為0就是立即震動)steamvr_actions.default_haptic.execute
(float secondsfromnow, float durationseconds, float frequency, float amplitude, steamvr_input_sources inputsource);
第二個引數表示震動的時間
第三個引數表示震動頻率(0-320hz)
第四個引數表示震動強度(0-1之間)
第五個引數表示哪個手柄震動
VRTK基於SteamVR學習筆記
vrtk可以支援多種vr裝置,daydream oculusvr steamvr,如果沒有vr裝置,它還提供了模擬器simulator。想要使用vrtk需要建乙個空物體用來管理,新增vrtk sdk manager指令碼,這個指令碼需要設定左右手控制器和支援裝置 控制器 建乙個空物體新增vrtk c...
HTC Vive開發筆記之SteamVR外掛程式整合
重要元件 steamvr camera vr攝像機,主要功能是將unity攝像機的畫面進行變化,形成vive中的成像畫面 使用方法 l 在任乙個攝像機上增加指令碼 l 點選expand按鈕 完成以上操作後,原本的攝像機會變成如下結構 l origin 位置 l head 頭部 l eye 眼睛 l ...
關於SteamVR 308錯誤
週末在幫朋友部署vr應用時遇到了蛋疼的308錯誤,就如steamvr所說 這不應該發生的 在耗費了接近一天的時間嘗試了各種方法無果後只能採用重灌系統大發法來解決此問題 安裝環境 cpu intel core i7 7700 記憶體 ddr3 16gb 顯示卡 gtx 1070 系統 win7 sp1...