1. 程式人生 > >SteamVR—VRTK基本配置及射線的使用

SteamVR—VRTK基本配置及射線的使用

一、VRTK環境搭建

前提:首先需要從商店匯入SteamVR(V1.2.2)以及VRTK(V3.2.1)

新建一個空物體改名為[VRTK_SDKManager],並且新增指令碼VRTK_SDKManager

新建一個空物體改名為[VRTK_SDKSetup],並且新增指令碼VRTK_SDKSetup

SteamVR中的[CameraRig]拖到[VRTK_SDKSetup]下做其子物體

選擇指令碼VRTK_SDKSetupQuickSelectSteamVR,如下所示:

點選指令碼VRTK_SDKManager的“AutoPopulate”,如下所示:

[VRTK_SDKManager]新建三個空物體,並改名為LeftControllerRightControllerPlayerArea,首先給LeftControllerRightController加基礎互動指令碼(如下圖1所示),然後在給PlayerArea新增瞬移指令碼(下圖2所示)

如果需要給左右手柄按鈕新增提示資訊,則將VRTKàPrefabsàControllerTooltips拖入到LeftController

RightController下,如下圖1、圖2所示:

 再LeftControllerRightController

拖入指令碼VRTK_SDKManager

二、手柄發射射線使人物位移

首先要在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直接抓到手柄上,也能實現抓取功能。