SteamVR—VRTK基本配置及射線的使用
一、VRTK環境搭建
前提:首先需要從商店匯入SteamVR(V1.2.2版)以及VRTK(V3.2.1版)
①新建一個空物體改名為[VRTK_SDKManager],並且新增指令碼VRTK_SDKManager
②新建一個空物體改名為[VRTK_SDKSetup],並且新增指令碼VRTK_SDKSetup
③將SteamVR中的[CameraRig]拖到[VRTK_SDKSetup]下做其子物體
④選擇指令碼VRTK_SDKSetup的QuickSelect為SteamVR,如下所示:
⑤點選指令碼VRTK_SDKManager的“AutoPopulate”,如下所示:
⑥
⑦如果需要給左右手柄按鈕新增提示資訊,則將VRTKàPrefabsàControllerTooltips拖入到LeftController、
RightController下,如下圖1、圖2所示:
⑧ 再將LeftController、RightController
二、手柄發射射線使人物位移
首先要在PlayerArea上新增指令碼VRTK_Basic Teleport,這個指令碼是控制人物位移的基礎指令碼。
然後我們需要在左手柄控制器上畫射線,VR中由於沒有直接控制人物移動的方法,一般情況下都是通過射線指向地面的不同地方,使人物通過瞬移到射線射到地面的點來進行移動。
對物體新增VRTK_ControllerEvents指令碼,這個指令碼是監聽手柄的按鍵。
新增VRTK_Bezier Pointer Renderer指令碼,這是畫曲線射線的指令碼,一般通過曲線射線在地上的接觸點來確定人物移動的位置,而VRTK_Straight Pointer Renderer指令碼是畫直線射線的指令碼,也可以用來確定人物位移的位置,不過通常把直線射線用來進行互動事件,而用曲線來進行位移。
新增VRTK_Pointer指令碼,這個指令碼可以讓手柄發射射線,通過與前一個畫射線的指令碼進行結合來實現手柄發射射線功能。
需要注意的是Enable Teleport這個屬性一定要勾選上,否則無法進行射線瞬移功能。Pointer Randerer要選擇一種射線,否則就無法看到手柄發射的射線,而Pointer Interaction Settings的兩項屬性是控制抓取功能的,尤其是Grab To Pointer Tip這屬性可以精確到點的抓取。
通過以上的指令碼就能確定人物的瞬移功能。按著手柄Touchpad鍵,手柄會發射一條拋物曲線到地面上,鬆開按鍵,人物就能瞬移到目標點。
三、手柄對物體的抓取
通過前邊對手柄實現瞬移功能的理解,我們知道了使用手柄的基本操作,就是通過VRTK__ControllerEvents指令碼監聽按鍵事件,通過VRTK_Straight Pointer Renderer和VRTK_Pointer兩個指令碼畫出直線射線進行相關的互動功能。
新增VRTK_Interact Grab,VRTK_Interact Touch,VRTK_Interact Use,VRTK_Interact Use_Unity Events等指令碼使手柄有抓取功能 。其中的Touch指令碼是當手柄接觸物體是才能觸發。
需要注意的是指令碼中的Controller Events屬性要新增需要監聽的手柄,在Use的Events中新增手柄,選擇VRTK_InteractGrab.AttemptGrab方法,這樣手柄的抓取功能基本就設定好了,然後在對需要抓取的物品進行設定就能實現手柄抓取物品的功能。
被抓取的物體Cube方塊需要新增VRTK_Interactable Object指令碼,從而確定手柄的事件能夠監聽到Cube上。
其中指令碼中的Is Grabbable是確定物體能否被抓取,Stay Grabbed On Tele是確定瞬移的時候還能保持抓取物體的狀態。而Grab Attach Mechanic和Secondary Grab Action兩個屬性是通過新增VRTK_Child Of Controller Grab Attach和VRTK_Swap Controller Grab Action兩個指令碼進行新增的。指令碼新增完以後,要想讓物體被抓取還有一個重要的地方,就是讓物體有碰撞和剛體,否則還是無法進行物體的抓取。
通過按著手柄的Touchpad鍵,手柄發射一條直射線,當射線射到Cube上,按著Trigger鍵就能通過射線把Cube抓起來,當手柄接觸Cube時,按著Grip可以把Cube直接抓到手柄上,也能實現抓取功能。