DEMO 1 查詢硬件手柄頭顯
在VRTK插件 的第一個demo
這個demo 顯示的功能:
找到demo場景中##Scene Changer## 遊戲物體,打開附加的scene changer腳本
裏面有兩個核心的類,以及幾個重要的API
VRTK_DeviceFinder類 : 用於在場景中尋找左右手柄,頭顯,返回硬件編號
或手柄,頭顯的gameobject
重要的API
獲得左右手柄的遊戲物體
VRTK_DeviceFinder.GetControllerRightHand();
VRTK_DeviceFinder.GetControllerLiftHand();
獲得左右手柄對應的硬件編號
VRTK_DeviceFinder.GetControllerIndex(rightHand)
按下手柄任一按鍵或鍵盤上的空格鍵,加載下一個場景
ForwardPressed 用於偵測手柄的按鍵是否按下
上圖中引入第二個重要的類: VRTK_SDK_Bridge
這是插件封裝了steam VR 的比較底層的API:
VRTK_SDK_Bridge.IsTriggerPressedOnIndex(controllerIndex)
輸入硬件的編號,返回是否按下的布爾值.
DEMO 2手柄的輸入事件
封裝成VRTK_ControllerEvent腳本
針對VR中常見的交互動作:
pointerToggleButton :激光的顯示開關, 激光在VR裏相當於鼠標箭頭的指向功能.
pointerSetButton: 激光停留的指向目標,觸發目標的功能.
grabToggleButton:
useToggleButton:
這個和pointerSetButton區別在於後者需要激光落在目標上,才能觸發目標上的功能
uiClickButton :觸發UI Canvas 目標的事件
menuToggleButton: 遊戲目錄顯示開關
axisFidelity:
triggerClickThreShold:
以上是設置各個按鍵在插件中交互的功能
如果要獲得每個按鍵具體的使用情況,如按下,鬆開按鍵,手觸摸板的按鍵位置,扳機的按下強度,則需要在VRTK_ControllerEvent註冊對應按鍵的事件
在VRTK_ControllerEvents_ListenerExample腳本中,監聽了VRTK_ControllerEvent所有按鍵的事件,和按鍵的參數信息
如 下圖見圖的扳機鍵的按鍵事件
事件的參數是
手柄的硬件編號, 按鈕的按下程度值(扳機鍵專有的屬性), 觸摸板的觸摸位置和角度(觸摸板專有的屬性)
DEMO 003_Controller_SimplePointer
傳送位置
VRTK_Simple Pointer類
該腳本繼承自VRTK_WorldPointer
功能的核心是將玩家的位置傳送到激光所指落在的地方,
該腳本應默認放在手柄的prefab上
其他的參數設置激活顏色,傳送時是否顯示玩家活動區域, 激光有效觸碰的層,激光的粗細等
DEMO 004_CameraRig_BasicTeleport
VRTK_BasicTeleport
該腳本配合繼承自VRTK_WorldPointer的子類 如VRTK_Simple
Pointer,
參數
1: 傳送時黑屏
2: 黑屏時間
3: 頭部位置
4:禁止傳送物體的標籤
5:作爲第四個功能的補充
6
DEMO 005_Controller_BasicObjectGrabbing
抓取物體
手柄上添加的組件
VRTK_InteractGrab
這個腳本用來抓取物體, 抓的按鍵在VRTK_ControllerEvent 腳本中設置
controllerAttachPoint:
HideController On Grab
Hide Controller Delay
Grab Precognition
Throw Multiplier: 把物體扔出去時,速度的倍增值
Create Rigid Body When Not Touch :
碰撞.
VRTK_InteractTouch
和物體接觸
Hide Controller On Touch
Hide Controller Delay :
Global Touch HighLight Color 如果被接觸的物體上未設置接觸高亮顏色,則用此顏色來對改變目標的顏色
Custom RigidBody Object 自定義用於判定接觸的剛體物體, 如果沒有的話,會自動在子層級創建一個剛體物體
交互物體上應該添加的腳本
VRTK_InteractableObject
1 Touch options
HighLight OnTouch 接觸時高亮顯示物體顏色
Touch HightLight Color 高亮的顏色
Rumble On Touch 接觸時的反饋震動
Allow Touch Controller
Hide Controller On Touch
2 Grab Options
IsGrabbable
Is droppable 鬆開時是否掉落
Is swappable 是否可替換
Hold Button To Grab 按住才能保證物體不掉落
Grab Override Button 覆蓋手柄的抓取按鍵設置
Rumble On Touch 接觸時震動 同上
Allowed Grab Controllers規定哪個手柄可以接觸這個物體
Precision Grab 精準抓取
Right Left Snap Handle 被抓物體的抓取點, 該遊戲物體應該放在被抓物的子層級下
StayGrabbed On Teleport 傳送後仍然抓住物體 否則物體丟掉
Spring_joint 和Fixed Joint類似 但是有點手臂關節,可以拉伸彎曲伸直,
,
3 Use options
Use only if Grabbed
Hold Button to Use 長按手柄按鍵纔可以使用
Use Override Button 自定義操作按鍵
Pointer activates Use Action
該腳本可以 爲交互物體增加一個外輪廓顏色
VRTK_InteractableObject擴展
DEMO 006_Controller_UsingADoor
該例子用了一個開門的交互來擴展VRTK_InteractableObject 腳本
接觸VRTK_InteractableObject類
覆蓋開始使用物品的方法
在此方法中寫入交互動作的邏輯方法
此外還有
物體被接觸時,抓取時,接觸接觸,結束抓取動作發生時調用的函數,
可以覆蓋此方法,自定義擴展你的交互動作.
注意
手柄上應該添加下圖腳本,否則無法使用物體
DEMO 007_CameraRig_HeightAdjustTeleport
高度升降傳送
此腳本繼承VRTK_BasicTeleport,
上圖中紅框中是擴展的功能參數
Play space falling 是否能下落
Play space fall restriction 下落條件, 規定哪個手柄位於當前平面內,就不會下落
Use gravity 是否自由落體加速度
Gravity Fall Height 超過多少高度差,纔開始自由落體
Blink Y threshold
Floor Height Tolerance
DEMO 008_Controller_UsingAGrabbedObject
和第6個場景原理類似,都是繼承VRTK_InteractableObject 腳本,物品的使用功能拓展
DEMO 009_Controller_BezierPointer
拋物線傳送偵測
和VRTK_Simple Pointer功能類似
紅框內是額外的參數,
DEMO 010_CameraRig_TerrainTeleporting
地形傳送
此例子沒有演示新的功能,只是展示了可以在地形上傳送
DEMO 011_Camera_HeadSetCollisionFading
頭部碰撞到物品後黑屏眨眼效果, 提示玩家已經和遊戲中物體相接觸,讓其返回到正常的區域
附加在Camera(eye) 上
DEMO 012_Controller_PointerWithAreaCollision
傳送的位置附近的物品如果和玩家可活動範圍碰撞器的相接觸,將影響傳送位置的最終位置,使其在合理的範圍內
開啓可玩區域碰撞體
DEMO 013 演示了多個物體抓取和使用的功能
DEMO 014 演示了抓取物品握住的位置
主要是這裏的參數設置,這些參數的意義之前已經有說明
DEMO 015_Controller_TouchpadAxisControl
演示手指在手柄觸摸板的觸摸位置 vector2 (x,y),來控制小車的移動方向, 手柄的扳機,控制小車跳起的動作
基本思路是 一個腳本監聽手柄的輸入事件, 將事件的相關值傳入到小車的控制器
監聽手柄按鍵
傳入到小車的控制運動的腳本
小車的運動部分函數
DEMO 016_Controller_HapticRumble
手柄震動
當藍色盒子上的劍和紅色盒子撞擊時,觸發手柄震動
基本思路是劍的物體碰撞器偵測到碰撞時,獲取手柄的運動速度,來決定震動的強度
如下圖,
關鍵的震動方法是
DEMO
使用觸摸板來控制人物行走,以及在低矮的洞穴中蹲走時碰到頭頂的碰撞體,返回到能正常直立站立的位置
附加在此物體上
VRTK_PlayerPresence 讓人物有碰撞體, 且頭部上方有碰撞體時,如果不蹲着走,就會強制返回可以正常站立的位置
HeadSet Y position 頭部碰撞體離頭頂向下的偏移值, 這樣可以通過更矮的擋板
Ignore Grabbed Collisions
Reset Position On Collision 在低矮的洞穴中蹲走時碰到頭頂的碰撞體,返回到能正常直立站立的位置
Falling physics only 如果打鉤,則可以自由落體下降
VRTK_TouchpadWalking
通過觸摸板的觸摸位置來定位移動方向
參數:
Max Walk Speed 最大行走速度,
Deceleration
MoveOnButtonPress
Device For Direction
DEMO
把這個prefab 拖到場景中就可以顯示當前幀數
DEMO 019_Controller_InteractingWithPointer
用手柄激光和物體交互
VRTK_interactionObject的 pointer activates use 打鉤後,就可以用激光和物體交互,如果HolonToUse 沒有勾選
,那麼激光落在物體上,就直接使用該物體,
如果
DEMO 020_CameraRig_MeshTeleporting
在各種形狀的網格上傳送
激活指針傳送和拋物線在複雜網格模型上的傳送效果,沒有新的功能演示
DEMO 021_Controller_GrabbingObjectsWithJoint
物體不同的交互方式
打開寶箱
盒子的上半部分添加轉軸組件
設置轉軸的轉動軸向,位置,就可以像真實打開箱子一樣.
箱子的把手需要添加以下腳本
VRTK_Interactable
Object 是必須要添加的腳本,它保證可以被手柄抓取
有一定活動區間關節物體
使用character joint 來確定上下關節的連接關係(每個關節也要添加rigidbody 組件)
其關節上的VRTK_InteractableObject 的Grab
Attach Mechanic 要設置成spring_joint