SteamVR 工具包VRTK实例解析
Stone 20170327
自帶demo分析:
1.001_CameraRig_VR_PlayArea????2
2.002_Controller_Events????2
3.003_Controller_SimplePointer????4
4.004_CameraRig_BasicTeleport????5
5.005_Controller_BasicObjectGrabbing????6
6.006_Controller_UsingADoor????8
7.007_CameraRig_HeightAdjustTeleport????8
8.008_Controller_UsingAGrabbedObject????9
09.009_Controller_BezierPointer????11
10.010_CameraRig_TerrainTeleporting????11
11.011_Camera_HeadSetCollisionFading????11
12.012_Controller_PointerWithAreaCollision????12
13.013_Controller_UsingAndGrabbingMultipleObjects????12
14.014_Controller_SnappingObjectsOnGrab????13
15.015_Controller_TouchpadAxisControl????14
16.016_Controller_HapticRumble????14
17.017_CameraRig_TouchpadWalking????14
18.018_CameraRig_FramesPerSecondCounter????15
19.019_Controller_InteractingWithPointer????16
20.020_CameraRig_MeshTeleporting????16
21.021_Controller_GrabbingObjectsWithJoints????16
22.022_Controller_CustomBezierPointer????17
23.023_Controller_ChildOfControllerOnGrab????17
24.024_CameraRig_ExcludeTeleportLocations????17
25.025_Controls_Overview????18
26.026_Controller_ForceHoldObject????24
27.027_CameraRig_TeleportByModelVillage????24
28.028_CameraRig_RoomExtender????25
29.029_Controller_Tooltips????26
30.030_Controls_RadialTouchpadMenu????27
31.031_CameraRig_HeadsetGazePointer????29
32.032_Controller_CustomControllerModel????30
33.033_CameraRig_TeleportingInNavMesh????30
34.034_Controls_InteractingWithUnityUI????30
35.035_Controller_OpacityAndHighlighting????32
36.036_Controller_CustomCompoundPointer????32
37.037_CameraRig_ClimbingFalling????33
38.038_CameraRig_DashTeleport????33
39.039_CameraRig_AdaptiveQuality????34
40.040_Controls_Panel_Menu????34
41.041_Controller_ObjectSnappingToDropZones????35
42.042_CameraRig_MoveInPlace????36
43.043_Controller_SecondaryControllerActions????36
44.044_CameraRig_RestrictedTeleportZones????37
?
1.001_CameraRig_VR_PlayArea
主要是玩家游玩區域的設定,使用掛載在[CameraRig]上面的一個腳本來控制
SteamVR_PlayArea屬性:
Border Thickness:游玩區域底部顏色區域的寬度
Wireframe Height:游玩區域高度
Draw Wireframe ...:當被選中時繪制線框圖
Draw In Game:是否在游戲中繪制
Size和Color:調整尺寸和顏色
?
2.002_Controller_Events
手柄事件機制,這邊有幾點需要注意的,可以直接在項目Hierichy中直接添加[VRTK]這個物體,這個東西可以在VRTK任意的example里面找到,這邊需要在上面掛載VRTK_SDKManager腳本,具體的配置如下圖。配置完這些之后,[VRTK]下面的LeftController就對應玩家的左手柄,右手柄同樣
配置完以上的腳本后,我們直接可以對手柄掛載相應的腳本了,以LeftController為例
VRTK_ControllerEvents這個腳本是使用VRTK手柄事件機制必備的腳本,需要在左右手柄控制器都添加上
Action Aias Button: 設定一些事件的觸發按鈕
Axis Refinement:設定按鍵點擊事件的臨界值,以Trigger(扳機鍵為例),當我們輕輕扣動扳機鍵時,會產生一個按鍵值,這邊可以設定當按鍵值達到多少的時候表示扳機輕按事件的觸發(扳機鍵有三種基本事件:輕按,觸底,按下)
添加了這個腳本之后我們就可以在自己的腳本里面使用VRTK的手柄事件了,使用方式可以分為三步:
第一:去獲取左右控制器上面的VRTK_ControllerEvents腳本
varcontrolEvents = GetComponent<VRTK_ControllerEvents>();
這個是以該腳本正好掛載在手柄控制器上為例,可以直接去獲取。
第二:為相應按鈕的相應事件設定觸發時的函數
controlEvents.TriggerClicked += newControllerInteractionEventHandler(DoTriggerClicked);
這邊主要是這個腳本ControllerInteractionEventHandler,參數是我們要設定的監聽函數的函數名
第三:完成監聽函數,參數是固定的寫法
privatevoidDoTriggerClicked(objectsender, ControllerInteractionEventArgse){}
sender:觸發事件的是哪個手柄
e:有四個可以獲得數屬性
buttonPressure:按鈕被按下的力度
controllerIndex:未知,試了幾個都是3
touchpadAxis:touchpad被按下的位置點的坐標
touchpadAngle:touchpad被按下位置點的角度(順時針,其他按鈕被按下都是90)
?
3.003_Controller_SimplePointer
這個場景講的是手柄射線的基本使用,按下按鍵投射出一條直射線
投射射線需要用到兩個腳本,一個是基本的VRTK_Pointer腳本
這個腳本需要掛載在手柄控制器上面,主要屬性說明:
Enable Teleport:是否啟用瞬移
Point Renderer:線渲染器(不能為空),需要指定一個掛載了線渲染器腳本的物體,這邊使用的是射線,我們使用VRTK_StraightPointerRenderer腳本作為線渲染器(插件還提供一種貝塞爾曲線的線渲染器,后面會提到)
Activation Button:發射射線的按鈕
Activation Delay:發射延遲
Selection Button:選中的按鈕
Point Interaction Settings:與物體交互的選項,之后會介紹
射線腳本主要屬性:
Layer To Ignore:被射線忽略的層
Valid Collision Volor:當射線選中有效物體時的顏色
Invalid Collistion Volor:當射線選中無效點時的顏色
Maximum Length:射線的最大長度
腳本為射線事件設定監聽,射線一共有三種事件:射線有效、射線無效、選中(即按鈕松開)
分為三步:
一:獲取相應手柄上VRTK_DestinationMarker腳本,這個腳本是VRTK_Pointer父類
vardestinationMarker = GetComponent<VRTK_DestinationMarker>();
二:設定監聽函數
destinationMarker.DestinationMarkerEnter += newDestinationMarkerEventHandler(DoPointerIn);
DestinationMarkerEnter射線有效,這個事件會在選中點有效的時候一直被觸發
DestinationMarkerExit 射線無效,這個事件會在選中點從有效點到無效點和選中事件觸發后被觸發一次
DestinationMarkerSet 選中,按鈕被松開是執行一次
三:完成監聽函數,同樣是固定寫法
privatevoidDoPointerIn(objectsender, DestinationMarkerEventArgse){}
sender:產生事件的手柄
e:有7中屬性值可以獲取
publicfloatdistance;距離
publicTransformtarget;被選中點的Transform
publicRaycastHitraycastHit;射線
publicVector3destinationPosition;被選中點的坐標
publicboolforceDestinationPosition;被選中點力的坐標
publicboolenableTeleport;是否瞬移
publicuintcontrollerIndex;
?
4.004_CameraRig_BasicTeleport
使用射線實現瞬移
實現簡單的瞬移需要用到一個腳本,VRTK_BasicTeleport,屬性說明
Blink Transition Speed:產生瞬移候的漸變時間
Distance Blink Delay:產生瞬移前的漸變時間,漸變時間與瞬移距離成正比
HeadSet Position Compens:頭部位置,涉及到瞬移的位置
Target List Policy:指定一些目標點
Nav Mesh Limit Distance:導航網格限制,在導航網格上瞬移,如果在navemesh的邊界,則禁止傳送,數值是離邊界的距離范圍
?
Target List Policy的具體使用:
指定掛載了VRTK_PolicyList的物體
Operation:選項Ignore:忽略 Include:包含
Check Types:檢索的類型,以Tag標簽為例
Size:指定忽略或被包含的物體的標簽
以此為例,表示忽略標簽為ExcludeTeleport的物體,這些物體不能被瞬移
?
5.005_Controller_BasicObjectGrabbing
基本的物體抓取交互
在手柄控制器上需要有這三種基本的交互腳本:
controllerAttachPoint:???被抓的物體,被附加在哪個物體上,??默認是手柄的圓環處
Grab Precognition???提前預判抓取物體???對應快速運動的物體,我們可能需要提早按下抓取按鍵才能抓住物體,?數值是提前的時間值,值越大,?可提前的抓取時間越長
Throw Multiplier:?把物體扔出去時,速度的倍增值
Create Rigid Body When Not Touch :??在碰到物體時才創建RigidBody????默認情況下手柄也創建Rigidbody,這就可以和物體在物理上產生碰撞
?
在需要被交互的物體上掛載的腳本,被交互物體需要有剛體和碰撞體組件:
Touch Height Color:觸碰高亮,默認為黑色,觸碰時不高亮
Allowed Touch Controllers:允許觸摸的手柄
Is Grabbable:是否允許抓取,配合物體上的抓取腳本使用,后面會提到
Stay Grabbed On Teleport:當抓取物體時是否可以瞬移
Valid Drop:有效的扔下的位置
Grab Override Button:指定抓取的按鍵事件,默認是側邊鍵
Allowed Grab Controller:允許抓取的手柄
Grab Attach Mechanic Script:指定才用抓取的方式(固定關節、父子關系等等),默認采用固定關節的方式
Use Options:物體使用的一些選項設置
Is Usable:是否可以被使用
Hold Button To Use:需要長按手柄按鍵使用
Use Only if Grabbled:在被抓取時才能使用
Point Activates Use Action:遠程激活選項,如果被勾選,手柄激光選中物體時可以被使用(激活)
Use Override Button:指定使用物體的按鍵
Allowed Use Controllers:允許物體被使用的控制器
掛載這個腳本的物體就可以被控制器手柄抓取
這個腳本可以將物體的被觸碰時的高亮顏色改成外輪廓顏色,而不是整個都變色
這個場景還在物體上用到了這個腳本,應該是以固定關節實現物體抓取的腳本
?
6.006_Controller_UsingADoor
使用物體的簡單例子
在05例子的基礎上為控制器上添加腳本VRTK_InteractUse
場景的例子,手柄控制開門
為門添加自己實現的腳本Openable_Door
腳本解析:
腳本需要繼承自VRTK_InteractableObject,基本的觸碰腳本
Is Usable需要勾上
和物體使用有關的函數有兩個StartUsing和StopUsing
在腳本里面重寫這兩個方法
//開始使用這個物體時被調用
publicoverridevoidStartUsing(GameObjectusingObject){}
//結束使用這個物體時被調用
publicoverridevoidStopUsing(GameObjectpreviousUsingObject){}
?
7.007_CameraRig_HeightAdjustTeleport
存在身體物理屬性和傳送點高度可自動調整傳送方式,使用這種方式,會自動處理角色的掉落
主要涉及到以下兩個腳本
這個主要是用來處理角色掉落的
Enable Body Collisions:啟用身體碰撞器
Ignore Grabbed Collisions:忽略可拿取物體的碰撞體
Fall Restriction:掉落處理模式
No_Restriction 以頭部位置為基準(如果頭部位置超出則掉落到下面的地板)
Left_Controller 以左控制器為基準
Right_Controller 以右控制器為基準
Either_Controller 以任意一個控制器為基準
Both_Controllers 同時以兩個控制器為基準
此腳本繼承自VRTK_BasicTeleport,可以傳送高低不同的地面,而且還可以模擬走上下樓梯的位移感
?
8.008_Controller_UsingAGrabbedObject
這個場景是手柄使用物體的一些擴展
主要涉及到的腳本有
繼承自VRTK_BaseGrabAttach,這個腳本的作用是抓取物體時的一些設置,使用這個腳本,抓取的位置是固定的
Detach Distance:分離再次抓取的距離
Velocity Limit:物體的最大速度
Andular Velocity Limit:旋轉的最大速度
?
可以被指定到VRTK_InteractableObject腳本的Grab Attach Mechanic屬性上,指明抓取采用的方式,這個腳本表示采用父子關系的方式,即將被抓取的物體變成手柄模型的子物體
?
這個腳本用來設定手柄是否隱藏,隱藏的時機等
Touch Visibility:觸碰的時候是否隱藏手柄模型
Grab Visibility:抓取的時候是否隱藏
Use Visibility:使用的時候是否隱藏
?
?
09.009_Controller_BezierPointer
采用貝塞爾曲線的方式實現瞬移
主要涉及以下腳本:
VRTK_BezierPointerRenderer,這個是貝塞爾曲線渲染器,使用方式類似射線渲染器
?
10.010_CameraRig_TerrainTeleporting
使用貝塞爾曲線的方式在地形上瞬移,使用上沒有什么特殊的地方
?
11.011_Camera_HeadSetCollisionFading
設置角色頭部進入到物體內部時顯示黑屏
涉及到的腳本
1.VRTK_HeadsetCollision
頭部碰撞,可以為其設置一個List Policy來控制場景物體的碰撞與否
設置碰撞后黑屏的顏色,和漸變的時間
?
12.012_Controller_PointerWithAreaCollision
開起可玩區域碰撞,在瞬移的時候會在順一點周圍出現可玩區域的線框
涉及到的腳本
VRTK_PlayAreaCursor,這個腳本需要掛載在控制器上
Handle Play Area Cursor Collisions:是否啟用可玩區域碰撞
Headset Out Of Bounds Is Collisions:如果啟用,當玩家的頭部在可玩區域外面是禁止瞬移
Target List Policy:這邊可以設置一些忽略或啟用該屬性的清單
?
13.013_Controller_UsingAndGrabbingMultipleObjects
多個物體的抓取和使用
涉及的腳本:
VRTK_FixedJointGrabAttach
繼承自VRTK_BaseJointGrabAttach
Destory Immediately On Throw:扔下物體時立刻銷毀關節
Break Force:銷毀時的力
可以作為抓取的方式腳本,這個腳本意味著使用的固定關節的方式實現抓取
?
14.014_Controller_SnappingObjectsOnGrab
演示如何設置物體的抓取位置
涉及到的腳本
VRTK_ChildOfControllerGrabAttach
Right Snap Handle:抓取的位置,設置了該屬性后,無論從什么地方進行抓取都是一樣的位置
同上
?
15.015_Controller_TouchpadAxisControl
通過觸摸pad來控制小車的移動
沒有新的腳本,主要是控制器上有關TouchPad的一些事件
TouchpadAxisChange 當pad的觸碰值發生改變
TouchpadTouchEnd 當手離開pad
監聽函數舉例
privatevoidDoTouchpadAxisChanged(objectsender, ControllerInteractionEventArgse){}
固定寫法,通過e可以獲取TouchPad的時機觸摸值
?
16.016_Controller_HapticRumble
手柄震動,手柄碰撞到物體時,獲取手柄的運動速度去設置震動的強度
腳本涉及到的一些信息
VRTK_ControllerActions是被掛載在具體的手柄控制器上的腳本,通過獲取某個手柄上的該腳本,就可以操作相應的腳本
VRTK_ControllerActions.TriggerHapticPulse(floatstrength, floatduration, floatpulseInterval)
使手柄發生震動,參數說明:
Strength:強度;duration:持續時間;pulseInterval:每一次脈沖的時間間隔
VRTK_DeviceFinder:這個腳本提供了一系列的靜態方法用于快速的獲取硬件設備的一些信息
VRTK_DeviceFinder內部的靜態函數有:
1.Vector3GetControllerVelocity(GameObjectgivenController)
用于獲取控制器的速度信息,參數是控制器的名稱
用于獲取控制器的起源位置(可能用于重新定位控制器)
獲取指定設備的Transform,(Headset,Left_Controller,Right_Controller)
獲取控制器的轉動速度
5.Vector3GetHeadsetVelocity()
Vector3GetHeadsetAngularVelocity()
獲取頭盔的速度和轉動速度
6.TransformHeadsetTransform()
獲取頭盔的Transform
獲取游玩區域的Transform
?
17.017_CameraRig_TouchpadWalking
使用TouchPad控制人物的移動
主要涉及的腳本:
VRTK_TouchpadControl,這個腳本需要掛載在控制器上
Device For Direction:選擇哪個設備的方向為準
Disable Other Controllers On Active:如果勾選,將其他監聽TouchPad事件的函數都禁用掉
Affect On Falling:當下落的時候可以繼續控制
Primary Activation Button:哪個按鈕啟動控制
Active Modifier Button:激活控制行為的按鈕
Axis DeadZone:無效的閾值區域
一些具體按鍵值得設定可以使用VRTK_SlideObjectControlAction腳本
?
18.018_CameraRig_FramesPerSecondCounter
顯示每一幀的FPS
涉及的腳本:
VRTK_FramesPerSecondViewer,將其掛載到UGUI的text控件上幾個顯示FPS,具體的代碼可以查看腳本內容
?
19.019_Controller_InteractingWithPointer
通過射線遠程使用游戲物體
VRTK_InteractableObject腳本
Point Activates Use:勾選上,當射線選中物體是,就可以使用該物體
?
20.020_CameraRig_MeshTeleporting
通過射線在導航網格上瞬移,沒有新的內容
?
21.021_Controller_GrabbingObjectsWithJoints
使用關節來抓取物體,演示了多個使用物體的實例,值得研究,沒有涉及VRTK新的內容
主要介紹使用物體的流程
RealGun掛載在被使用的物體上,繼承自VRTK_InteractableObject,重寫了里面的幾個方法用于使用物體
voidGrabbed(GameObjectcurrentGrabbingObject)
重寫該方法,在物體被抓取時調用
voidUngrabbed(GameObjectpreviousGrabbingObject)
在物體被放下時調用
voidStartUsing(GameObjectcurrentUsingObject)
voidStopUsing(GameObjectpreviousUsingObject)
當物體開始被使用和結束使用時調用
voidStartTouching(GameObjectcurrentTouchingObject)
voidStopTouching(GameObjectpreviousTouchingObject)
開始被碰觸和結束觸碰時被調用
?
22.022_Controller_CustomBezierPointer
一個特殊被調整過的貝塞爾曲線的例子,示范了如何去調整貝塞爾傳送曲線
貝塞爾曲線渲染器VRTK_BezierPointerRenderer
Custom Tracer:曲線部分的模型
Custom Cursor:落點部分的模型
Valid Location Object:當落點有效時落點上方的模型
Incalid Location Object:當落點無效的時候落點上方的模型
一般使用前兩個屬性即可
?
23.023_Controller_ChildOfControllerOnGrab
一個使用父子關系抓取的例子,射箭的典型例子
沒有關于VRTK新的內容,想要做射箭游戲的可以參考這個例子的實現
?
24.024_CameraRig_ExcludeTeleportLocations
演示如何將一些地點設置為不可瞬移點
為Target List Policy設置條件屬性
以此為例,Operation為Ignore(忽略),Types為Tag(標簽)和Script(腳本),Element里面設置了ExcludeTeleport,這樣設置,如果游戲物體上掛載有ExcludeTeleport這個名稱的腳本或是游戲物體的標簽為ExcludeTeleport,則不能瞬移到這個游戲物體上
?
25.025_Controls_Overview
一個物體使用例子,涉及到一些VRTK預設好一些腳本,
VRTK_Slider,繼承自VRTK_Control,滑動條相關
Default Events:給滑動事件設置監聽的函數
Interact Without Grab:如果勾選,當被抓取時不能使用滑塊
Connected To:滑動條將會跟著這個物體移動,一般不設置
Direction:設定方向,選Autodetect即可
Minimun Limit:最小數值時滑塊的位置
Maximum Limit:最大數值時滑塊的位置
Minimum Value:滑動條的最小數值
Maximum Valus:滑動條的最大數值
Step Size:滑塊滑動的增量值
Snap To Step:當釋放滑塊時會提前到達附件的一個值(和摩擦力有關)
Released Firction:滑塊釋放后的摩擦力
在代碼里面設置監聽函數:
VRTK_Control_UnityEvents這個腳本用于給控制事件設置監聽,掛載繼承自VRTK_Control的腳本后會在場景允許后自動掛載上這個腳本,也可以自己去手動在場景還沒有開始前添加這個腳本,需要注意的是監聽函數的參數是固定寫法,使用這個腳本去設置監聽函數可以獲取一些詳細的數值
?
VRTK_Knob,徑向旋鈕相關
相關屬性和滑動條腳本相同,在代碼里面設置監聽函數同滑動條
?
VRTK_Chest,帶一個蓋子的柜子,控制蓋子的打開程度
Lid:蓋子部分
Base:柜子的主要部分
Handle:把手部分
Content:柜子內部的物品部分
Hide Content:當柜子蓋上時柜子內的物品不可見
Max Angle:最大的打開角度
在代碼里面設置監聽函數同滑動條
?
VRTK_Drawer,抽屜相關
Min Snap Close:如果拉開的程度小于這個百分比,柜子將會自動合上
Max Extend:最大能拉開的程度
在代碼里面設置監聽函數同滑動條
?
VRTK_Button,按鈕相關
Activation Distance:激活按鈕的距離
Button Strength:按下按鈕的強度
在代碼里面設置監聽函數:
VRTK_Button_UnityEvents,這個腳本是VRTK_Button配套使用的
?
VRTK_Door,門相關
Open Inward:這個門能否向內打開
Open OutWard:能否向外打開
Min Snap Close:如果打開的程度小于這個百分比,門將自動關閉
Released Friction:釋放后的摩擦力
Grabbed Friction:抓取的摩擦力
Handle Interactable Only:如果勾選,只有門把手部分可以打開門
在代碼里面設置監聽同滑動條
?
VRTK_Wheel,方向盤相關
Grab Type:抓取類型,TrackObject:轉盤會根據手柄位置去轉動;RotatorTrack:需要手柄抓住轉盤的把手才能轉動
Locked At Limits:限制轉盤的轉動角度不能超過最大值
在代碼里設置監聽事件同滑動條
?
26.026_Controller_ForceHoldObject
涉及的腳本
VRTK_ObjectAutoGrab,使用這個腳本,手柄控制器會在一開始就自動抓取一個物體
Object To Grab:要被抓取的物體
Object Is Prefab:被抓取的物體是否是預制體或是場景中已經存在的物體
Clone Grabbed Object:復制被抓取的物體
Always Clone On Enable:總是采用復制的方式獲取物體
?
27.027_CameraRig_TeleportByModelVillage
通過使用物體瞬移,一些物體會一直跟隨著瞬移
涉及的腳本
VRTK_TransformFollow,使用這個腳本,可以指定一些物體跟隨瞬移
將要跟隨瞬移的物體放到掛在了這個腳本的物體的下面,或者將這些物體的父物體指定給Game Object To Change這個屬性
Follows Position:啟用位置跟隨
Smooths Position:平滑位置,自動調整
Follows Rotation:瞬移是轉動角度也會跟隨
Follows Scale:縮放大小也會跟隨
Moment:選中時機,之前、同時或之后
?
ModelVillage_TeleportLocation,將這個物體掛載在一個物體上可以實現點擊瞬移
Destination:指定瞬移的位置點
?
28.028_CameraRig_RoomExtender
擴展游玩區域的例子,適用性不高,不建議使用
涉及腳本:
涉及的腳本有三個
?
29.029_Controller_Tooltips
為手柄和物體加上小貼士的例子
涉及到兩個個預制體和一個腳本:
HeadsetControllerAwareEventArgs腳本,使用這個腳本,能夠在頭盔朝向手柄控制器時被手柄控制器獲知,配合上面的預制體使用,即可實現在頭盔朝向哪個手柄控制器時就在哪個控制器上顯示提示
使用方式:
ControllerGlanceEnter事件:當手柄模型有不可見變為可見時被執行
ControllerGlanceExit事件:當手柄模型由可見變為不可見時被執行
?
ControllerTooltips預制體,需要放置在控制器下面,可以為最原始的手柄模型加上提示
ObjectTooltip預制體,放在物體下面,可以為游戲物體加上提示
?
30.030_Controls_RadialTouchpadMenu
手柄TouchPad菜單實例
涉及到一個預制體
RadialMenu預制體,sample中介紹了兩種使用方式
Button:設置按鈕的個數,可以在內部為每個按鈕設置不同的圖片和各種事件的監聽
Button Prefab:按鈕面板的樣式,默認是一個環形
Button Thickness:環的寬度
Offset Distance:偏移的距離
Offset Rotation:偏移的角度
Icon Margin:圖標的邊緣距離
Hide On Release:釋放時隱藏
Execute On Unclick:釋放按鈕是是否執行事件
Base Haptic Strength:選擇不同按鈕時的震動
Menu Buttons:使用真實的button構成環形菜單
這邊需要主要RadialMenuController腳本,是按鈕菜單的控制腳本,手柄上的環形菜單使用的是這個腳本
放置在其他地方的菜單使用的控制腳本是不一樣的,
VRTK_IndependentRadialMenuController,這個腳本繼承自RadialMenuController
Add Menu Collider:為菜單添加collider,這個最好加上,否則菜單無法與手柄碰撞
?
31.031_CameraRig_HeadsetGazePointer
通過視野中心點選擇瞬移點的例子
沒有新的腳本內容,以上各腳本的具體配置詳解example
?
32.032_Controller_CustomControllerModel
實例說明如何替換手柄模型,并使用物品
將各自的模型放置到對應的控制器下面,記住需要在VRTK_SDK Manager這邊的這兩個地方進行配置,手柄模型必須在一開始就在場景里面,位置也要設置好
其他的使用物體上和采用原始的模型沒有什么區別
?
33.033_CameraRig_TeleportingInNavMesh
限制在導航網格上面的瞬移距離
沒什么新的內容
?
34.034_Controls_InteractingWithUnityUI
使用射線與UI進行交互,介紹了三種使用例子
Canvas的渲染方式需要修改成World Space,為Canvas添加VRTK_UICanvas腳本即可
Auto Activate Within Distance:UI自動激活的距離,即使射線沒有出現的時候
添加這兩個腳本即可VRTK_UICanvas和UI_KeyBoard
UI_KeyBoard腳本是sample里面的腳本
設置存放UI的容器
VRTK_UIDropZone,只需這個腳本即可,但是為了可以讓存放在里面的UI可以自動被整理,還需要添加上Grid Layout Group腳本
設置可以被拖拽的UI
VRTK_UIDraggableItem,添加這個腳本后,這個UI控件就可以在這個Canvas里面被拖拽了
Restrict To Drop Zone:在保存空間內排序
Restrict To Original Canvas:在畫布內排序
?
35.035_Controller_OpacityAndHighlighting
手柄模型高亮的實例,各個按鍵都可以被高亮,還有為手柄單個按鍵設置tip
涉及的腳本:
VRTK_OutlineObjectCopyHighlighter
添加了這個腳本后就可以在代碼里面獲取控制高亮了
?
36.036_Controller_CustomCompoundPointer
一個酷炫的貝塞爾傳送曲線的示例
沒有什么新的內容,主要是對貝塞爾曲線渲染器的配置,具體看sample
?
37.037_CameraRig_ClimbingFalling
一個處理各種攀爬和掉落的示例,做攀巖游戲必備
涉及的腳本:
VRTK_PlayerClimb,這個腳本可以處理各種攀爬和自然掉落的情況,需要其他腳本在同一個物體上,具體見sample
VRTK_ClimbableGrabAttach,在可以被攀爬的物體上除了要添加交互抓取必須的腳本外還需要添加這個腳本
?
38.038_CameraRig_DashTeleport
讓瞬移有個過程,像直接沖過去一樣
涉及的腳本:
VRTK_DashTeleport
添加這個腳本就可以實現這個效果
還有一個sample里面提供的腳本RendererOffOnDash,被掛載在游戲物體上,作用應該是在瞬移沖鋒的時候停止渲染該物體,實例里面是在所有的游戲物體上都添加了這個
?
39.039_CameraRig_AdaptiveQuality
一個優化的例子
涉及的腳本:
VRTK_AdaptiveQuality,掛載這個腳本,游戲會根據GPU的負荷去調整渲染的效果,簡單說就是用畫質換性能
?
40.040_Controls_Panel_Menu
一個控制物體上面板菜單的實例
PanelMenu預制體:
將其放入需要產生PanelMenu的游戲物體中
在預制體的最上層有個PanelMenuController腳本,在這里可以為手柄TouchPad的四個方向指定相應出現的Panel,默認的使用方式是拿起物體,按下TouchPad的四個方向的按鍵即可
指定的Panel需要掛載有PanelMenuItemController腳本
在Panel的子物體上的腳本就可以通過代碼去給Panel顯示期間的各個按鈕事件去指定監聽
?
41.041_Controller_ObjectSnappingToDropZones
一個物體放置的示例,可以指定可以放的物體
涉及的內容:
SnapDropZone預制體,這個預制體可以用來制作存放物品的欄位
VRTK_SnapDropZone,主要腳本,用來指定物體是實現效果
Highlight Object Prefab:指定可以存放的物體,直接將物體的預制體拉進去即可
Snap Type:存放采用的方式
Valid Object List Policy:這邊可以進一步過濾是否可以存放的物體
VRTK_HipTracking,可以制作隨人物移動的格子
?
42.042_CameraRig_MoveInPlace
模擬正常移動的一個示例,按下TouchPad,人體在原地踏步即可前進(頭部晃動即可),配合萬向走步機使用更佳
添加這個腳本就可以
?
43.043_Controller_SecondaryControllerActions
雙手同時操作物品的示例
涉及的腳本:
VRTK_AxisScaleGrabAction
使用這個腳本,使用雙手可以將物體放大縮小
VRTK_ControlDirectionGrabAction
使用這個腳本,兩只手可以拿起同一個物體,一般用于長物體
?
44.044_CameraRig_RestrictedTeleportZones
設置一些指定的點才能夠瞬移
先使用VRTK_PolicyList腳本限定傳送點
在使用VRTK_DestinationPoint腳本,設置傳送點的屬性,這個腳本需要被掛載到每一個傳送點上
Enable Teleport:是否可以傳送
Default Cusor Object:傳送點默認的樣式
Hover Cursor Object:傳送點可傳送時的樣式
Locked Cursor Object:不可傳送時的樣式
Snap To Point:快速到達
Hide Point Cursor On:在傳送過去的時候隱藏傳送點
?
?
?
?
總結
以上是生活随笔為你收集整理的SteamVR 工具包VRTK实例解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一篇文章梳理完虚拟现实相关的核心技术 |
- 下一篇: Mysql雨松工具类使用