1. 程式人生 > >SteamVR Unity工具包(VRTK)之概覽和控制器事件

SteamVR Unity工具包(VRTK)之概覽和控制器事件

快速上手
· 克隆倉庫  git clone https://github.com/thestonefox/SteamVR_Unity_Toolkit.git · 用Unity3d開啟SteamVR_Unity_Toolkit · 從Unity資源商店匯入SteamVR Plugin · 瀏覽Examples場景作為例子來看指令碼的用法     概要
這個工具包提供了很多Unity3d裡的常用VR功能,如下(但並不侷限於此):
  · 帶有通用別名的控制器按鈕事件 · 控制器世界指標(如鐳射指標) · 玩家傳送 · 用控制器抓取物件 · 用控制器和物件互動   這個工具類基本是受到 SteamVR Plugin for Unity3d Github Repo的啟發,並基於此。   這個工具存在的原因是因為SteamVR plugin含有令人困惑或不完善的程式碼,所以我決定建立一個指令碼/資源集合,這在用Unity3d建立VR時是很有用處的。
   

預製


 

可用預製:   [CameraRig]直接從SteamVR Unity plugin例子——SteamVR/Extras/SteamVR_TestThrow場景中拿來,因為它包含了控制器上相關模型的子物體(這在SteamVR plugin預設預製SteamVR/Prefabs/[CameraRig].prefab中似乎是缺失的)。 SteamVR_Unity_Toolkit/Prefabs/[CameraRig]可以被拖到任何場景中,通過VR頭盔和包括模型呈現的VR控制器的追蹤來提供對VR遊戲相機的即時訪問。
 


幀率顯示


 

 

這個畫布新增一個表示幀率的文字元素到頭盔上。使用這個預製必須把它放到場景中,然後頭盔的相機需要被新增到畫布上。

 

· 選擇場景中的FremesPerSecondCanvas物件 · 找到Canvas元件 · 設定Render Camera引數為 [CameraRig]預製裡的Camera(eye)  

預製上有很多可以被設定的引數。展開層級檢視中的FramesPerSecondCanvas物件,顯示子物件FramesPerSecondText並點選顯示額外引數,這些引數可以通過FramesPerSecondViewer指令碼(可以在SteamVR_Unity_Toolkit/Scripts/Helper/FramesPerSecondViewer找到)來設定。

 

可用指令碼引數如下:   · Display FPS:FPS文字可視切換。 · TargetFPS:認為可接受的幀率,被用來作為改變FPS文字顏色的基準。 · Font Size:FPS顯示字型尺寸。 · Position:FPS 文字在頭盔視野的位置。 · Good Color:當處在目標FPS的合理範圍之內的FPS文字顏色。 · WarnColor:當FPS降到低於目標FPS合理範圍的FPS文字顏色。 · Bad Color:當FPS處在相對目標FPS為不合理水平時FPS文字的顏色。   FramesPerSecondCanvas 預製的例子可以在SteamVR_Unity_Toolkit/Examples/018_CameraRig_FramesPerSecondCounter場景中找到,在頭盔視野中間顯示了幀率。按下扳機鍵(trigger)生成一個新的小球,按下觸控版(touchpad)生成10個新的小球。通過最終當很多小球出現的時FPS將下降來演示這個預設。     指令碼
  這個目錄包含了所有新增到Unity的VR功能的工具指令碼。   當前可用指令碼有:
控制器行為指令碼提供了處理常見控制器行為的幫助方法。如下可用公共方法:
· IsControllerVisible(): 如果控制器模型是可見的返回真,否則返回假。 · ToggleControllerModel(bool on):根據所給布林值狀態設定控制器模型的可見性。如果傳入true,控制器模型就被顯示出來,如果傳入false,控制器就被隱藏了。 · TriggerHapticPulse(int duration, ushort strength):啟動控制器開始震動,根據給定的持續計時(第一個引數)和震動強度(第二個strength引數)。最大強度可以是3999,超過就限制為3999。   VRTK_ControllerActions指令碼的例子在SteamVR_Unity_Toolkit/Examples/016_Controller_HapticRumble場景中,展現了隱藏控制器和讓控制器在給定強度下震動給定時長的能力。  
控制器事件(VRTK_ControllerEvents)
  控制器事件指令碼被新增到 [CameraRig]預製裡的控制器物件上,為控制器上的每個按鈕按下提供事件監聽(除了系統選單按鈕,因為這個按鈕不能被過載,只能總是由Steam使用)。   當一個控制器按鈕被按下,指令碼發出一個事件表明按鈕被按下了,這使得其他指令碼去監聽這個事件而不需要實現任何控制器邏輯。   指令碼也有一個公共的布林型別的按下狀態變數,允許被其他指令碼查詢按鈕是否被按下。   當一個控制器按鈕被釋放,指令碼也傳送一個事件表示按鈕被釋放了。   控制器觸控板有兩個狀態,既可以使用者只把手指放到壓力感測板上來觸控,也可以使用者在板上按下去直到發出聲響來點選。   控制器事件指令碼同時分別處理觸控板觸控和點選事件。   控制器上有兩個按鈕軸:   · 觸控板觸控位置,位置的x和y值基於觸控板當前被觸控位置。 · 扳機按鈕,有個基於扳機鍵被按下去程度的x值。   當觸控板的軸或者扳機鍵的軸值改變時,會有兩個額外的事件發出,這可以被用來確定兩個軸的變化來進行精確控制,如用觸控板來移動角色,或者知道扳機鍵被按下程度。   觸控板的軸由變數TouchpadAxis 記錄,在所有控制器事件的指令碼中更新。   扳機鍵的軸由變數buttonPressure 記錄,在所有控制事件指令碼中更新。任何其他按鈕按壓只記錄一個為1或者0按鈕壓力,因為所有其他按鈕都是數字量(要麼就是點選要麼就沒有),但扳機是一個可以記錄不同按鈕壓力的模擬量。
軸值變化的精確度可以由指令碼中的axisFidelity 引數來決定,預設值為1。值只要超過2就可能會產生靈敏過度的結果。   事件發出的有效載體資訊包含:
· controllerIndex:所使用控制器的索引。 · buttonPressure:0到1的浮點數,表示按鈕按下的所施加的壓力值。 · touchpadAxis: 一個表示觸控板觸控位置的Vector2型別變數。 · touchpadAngle:一個表示觸控板觸控位置的轉動位置的浮點數,0是頂部,180是底部,其他角度隨之對應。   當控制器被按下時也會有通用動作的別名事件被髮出。這些動作別名可以被對映到想要的控制器按鈕上。這些別名是:
· Toggle Pointer:開啟關閉鐳射棒 · Toggle Grab:抓取遊戲物件 · Toggle Use:使用物件 · Toggle Menu:開啟一個遊戲內選單   每個上面的別名都可以通過在指令碼引數視窗的下拉欄裡選擇對映其使用到喜好的控制器按鈕上。   當所設定的對映按鈕被按下時將發出一個實際按鈕事件以及一個額外別名開啟的事件。當按鈕釋放的時候就發出一個實際按鈕事件以及一個額外的別名關閉的事件。   監聽這些別名事件而不是實際的按鈕事件意味著可以很輕易的自定義控制器按鈕到它們應該執行的行為上。
VRTK_ControllerEvents指令碼的例子可以在SteamVR_Unity_Toolkit/Examples/002_Controller_Events場景中看到,事件怎樣被使用和監聽的程式碼例子可以參見SteamVR_Unity_Toolkit/Examples/Resources/Scripts/VRTK_ControllerEvents_ListenerExample.cs指令碼。

 原文地址連結:http://www.cnblogs.com/unity3ds/p/5810576.html