Unity VRTK 教學

VRTK - Virtual Reality Toolkit 是一套支援 Unity 的免費 VR 遊戲開發資源,協助您快速製作虛擬實境戲的各種互動功能,包括玩家移動、物件的拾取與使用等,無需撰寫大量程式碼,可以節省遊戲開發時間。

 

VRTK 範例場景

建立一個新的遊戲專案並匯入資源包, VRTK 提供許多範例場景,先透過這些場景瞭解 VRTK 功能。

[001 - Interactions] ControllerEvents

[002 - Pointers] StraightPointer

[003 - Pointers] BezierPointer

[004 - Locomotion] Teleporting

[005 - Interactions] InteractableObjects

[006 - Locomotion] MovementTypes

[007 - Interactions] InteractionHelpers

VIVE 控制器的各部名稱: 選單按鈕、觸控板、系統按鈕、狀態燈號 追蹤感應器、扳機、握柄按鈕

Touch Options 物件的碰觸選項

Highlight On Touch 接觸物件時呈現高光效果 (Touch Highlight Color)

Rumble On Touch (Strength=0 Duration=0)

Allowed Touch Controllers (Both, Left_Only, Right_Only)

Hide Controller On Touch (Default, Override Hide, Override Don’t Hide) 接觸物件時隱藏控制器。

Is Grabbable

 

Grab Options 物件的抓握選項

Is Droppable 設定此物件可否丟棄?

Is Swappable 設定此物件可否換手?

Hold Button To Grab 設定是否持續按著握柄按鈕時才能抓握此物件。

Allowed Grab Controllers (Both, Left_Only, Right_Only) 設定可用那個控制器抓握此物件(左手、右手或皆可)。

Hide Controller On Grab (Default, Override Hide, Override Don’t Hide) 抓握時隱藏控制器。

Stay Grabbed On Teleport 傳送到另一位置時,保持抓握此物件。

Grab Attach Mechanic (Fixed_Joint, Spring_Joint, Track_Object, Rotator_Track…)

Detach Threshold 放開的門檻。

Throw Multiplier 投擲的倍增值。

 

 

VRTK 舊版範例場景

003_Controller_SimplePointer 控制器簡單指向範例,光束呈現紅色代表未觸及物件,呈現綠色代表有指向物件。

004_CameraRig_BasicTeleport 使用觸控板按鈕產生的光束指向目標,放開按鈕即可傳送到指定的位置。

005_Controller_BasicObject... 控制器基本的取物功能。

006_Controller_UsingADoor 門的互動操作。

007_CameraRig_Height... 使用觸控板按鈕產生的光束指向目標,放開按鈕即可移動到指定的位置。

008_Controller_UsingAGrabbedObject 使用控制器的抓握鍵可以拿起、放下或投擲物件。

010_CameraRig_TerrainTeleporting 使用弧線傳送在地形移動。

013_Controller_UsingAndGrabbing... 使用與拿取多個物件,可以在空中玩丟接的互動。

015_Controller_TouchpadAxisControl 使用觸控板模擬軸向控制,玩?控車的遊戲。

034_Controls_InteractingWithUnityUI 與使用者介面的互動,觸控板的光束指向,板機鍵觸發。

 

 

VRTK 基本設定

建立 VRTK 遊戲區域的基本步驟

一、建試一個新場景,並刪除預設的 Main Camera 攝影機。

二、將 [ SteamVR > Prefabs ] 資料夾的預製物件 [CameraRig] 拖曳到場景的原點位置。

三、建立新的空物件,按下 Add Component 按鈕,然後套用 SceneChanger 腳本。(此步驟不一定需要)

 

製作可拾取的物件

參考場景 005_Controller_BasicObjectGrabbing

完成建立遊戲區域的基本步驟

在需要互動的物件上,套用 VRTK_InteractableObject.cs 腳本。

分別為左右手控制器套用 VRTK_InteractGrab.cs 腳本,並且將會自動套用這三個腳本。

VRTK_ControllerEvents.cs

VRTK_ControllerActions.cs

VRTK_InteractTouch.cs

使用控制器碰觸物件時會改變顏色(預設為紅色),此時拿起物件時會感覺位置不對,拿起物件時位置會吸附到控制器前端,勾選 Precision Grap (Snap) 選項可讓物件被拿起時位置準確。

 

製作可拾取並使用的物件

參考場景 008_Controller_UsingAGrabbedObject

新增一個方塊物件,重新命名為「Gun」,然後套用 Gun 腳本。

勾選 Is Grabbbable 選項,設定此物件可被拿起。

勾選 Is Usable 選項,設定此物件可被使用。

預設的情況 Use Only If Grabbled = False (只需碰觸不需要拿著槍也能發射)

Hold Button To Use = True

建立子彈物件,重新命名為「Bullet」,注意物件名稱必須相同,設為 Gun 的子物件。

 

VRTK 範例場景

001_CameraRig_VRPlayArea

002_Controller_Events

003_Controller_SimplePointer

004_CameraRig_BasicTeleport

 

005_Controller_BasicObjectGrabbing1

006_Controller_UsingADoor

007_CameraRig_HeightAdjustTeleport

008_Controller_UsingAGrabbedObject

009_Controller_BezierPointer

 

010_CameraRig_TerrainTeleporting

011_Camera_HeadSetCollisionFading

012_Controller_PointerWithAreaCollision

013_Controller_UsingAndGrabbing...

 

014_Controller_SnappingObjectsOnGrab

015_Controller_TouchpadAxisControl

016_Controller_HapticRumble

017_CameraRig_TouchpadWalking

018_CameraRig_FramesPerSecondCounter

019_Controller_InteractingWithPointer

020_CameraRig_MeshTeleporting

021_Controller_GrabbingObjectsWithJoints

022_Controller_CustomBezierPointer

023_Controller_ChildOfControllerOnGrab

024_CameraRig_ExcludeTeleportLocations

025_Controls_Overview 控制器概觀

026_Controller_ForceHoldObject

027_CameraRig_TeleportByModelVillage

028_CameraRig_RoomExtender

029_Controller_Tooltips 控制器的工具提示

030_Controls_RadialTouchpadMenu

032_Controller_CustomControllerModel

033_CameraRig_TeleportingInNavMesh

034_Controls_InteractingWithUnityUI

035_Controller_OpacityAndHighlighting

036_Controller_CustomCompoundPointer

037_CameraRig_ClimbingFalling

038_CameraRig_DashTeleport

039_CameraRig_AdaptiveQuality

040_Controls_PanelMenu

041_Controller_ObjectSnapping...

042_CameraRig_MoveInPlace