SteamVR 工具包VRTK实例解析

SteamVR 工具包VRTK实例解析_第1张图片

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

SteamVR 工具包VRTK实例解析_第2张图片SteamVR 工具包VRTK实例解析_第3张图片

主要是玩家游玩区域的设定,使用挂载在[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就对应玩家的左手柄,右手柄同样

SteamVR 工具包VRTK实例解析_第4张图片SteamVR 工具包VRTK实例解析_第5张图片

配置完以上的脚本后,我们直接可以对手柄挂载相应的脚本了,以LeftController为例

SteamVR 工具包VRTK实例解析_第6张图片

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脚本

SteamVR 工具包VRTK实例解析_第7张图片

这个脚本需要挂载在手柄控制器上面,主要属性说明:

Enable Teleport:是否启用瞬移

Point Renderer:线渲染器(不能为空),需要指定一个挂载了线渲染器脚本的物体,这边使用的是射线,我们使用VRTK_StraightPointerRenderer脚本作为线渲染器(插件还提供一种贝塞尔曲线的线渲染器,后面会提到)

Activation Button发射射线的按钮

Activation Delay:发射延迟

Selection Button:选中的按钮

Point Interaction Settings:与物体交互的选项,之后会介绍

SteamVR 工具包VRTK实例解析_第8张图片

射线脚本主要属性:

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

使用射线实现瞬移

SteamVR 工具包VRTK实例解析_第9张图片SteamVR 工具包VRTK实例解析_第10张图片

实现简单的瞬移需要用到一个脚本,VRTK_BasicTeleport,属性说明

Blink Transition Speed:产生瞬移候的渐变时间

Distance Blink Delay:产生瞬移前的渐变时间,渐变时间与瞬移距离成正比

HeadSet Position Compens:头部位置,涉及到瞬移的位置

Target List Policy:指定一些目标点

Nav Mesh Limit Distance:导航网格限制,在导航网格上瞬移,如果在navemesh的边界,则禁止传送,数值是离边界的距离范围

 

Target List Policy的具体使用:

指定挂载了VRTK_PolicyList的物体

SteamVR 工具包VRTK实例解析_第11张图片

Operation:选项Ignore:忽略 Include:包含

Check Types:检索的类型,以Tag标签为例

Size:指定忽略或被包含的物体的标签

以此为例,表示忽略标签为ExcludeTeleport的物体,这些物体不能被瞬移

 

5.005_Controller_BasicObjectGrabbing

基本的物体抓取交互

SteamVR 工具包VRTK实例解析_第12张图片

在手柄控制器上需要有这三种基本的交互脚本:

  1. VRTK_ControllerActions 基本
  2. VRTK_InteractTouch 触碰
  3. VRTK_InteractGrab 抓取

    SteamVR 工具包VRTK实例解析_第13张图片

    controllerAttachPoint:   被抓的物体,被附加在哪个物体上,  默认是手柄的圆环处

    Grab Precognition   提前预判抓取物体   对应快速运动的物体,我们可能需要提早按下抓取按键才能抓住物体, 数值是提前的时间值,值越大, 可提前的抓取时间越长

    Throw Multiplier: 把物体扔出去时,速度的倍增值

    Create Rigid Body When Not Touch :  在碰到物体时才创建RigidBody    默认情况下手柄也创建Rigidbody,这就可以和物体在物理上产生碰撞

     

    在需要被交互的物体上挂载的脚本,被交互物体需要有刚体和碰撞体组件:

  4. VRTK_InteractableObject 基本的脚本,一个物体只要挂载上这个脚本,就可以与手柄控制器交互

    SteamVR 工具包VRTK实例解析_第14张图片

    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:允许物体被使用的控制器

  5. VRTK_SwapControllerGrabAction

    挂载这个脚本的物体就可以被控制器手柄抓取

  6. VRTK_OutlineObjectCopyHighlighter

    SteamVR 工具包VRTK实例解析_第15张图片

    这个脚本可以将物体的被触碰时的高亮颜色改成外轮廓颜色,而不是整个都变色

  7. VRTK_FixedJointGrabAttach

    这个场景还在物体上用到了这个脚本,应该是以固定关节实现物体抓取的脚本

     

    6.006_Controller_UsingADoor

    使用物体的简单例子

    在05例子的基础上为控制器上添加脚本VRTK_InteractUse

    场景的例子,手柄控制开门

    SteamVR 工具包VRTK实例解析_第16张图片

    为门添加自己实现的脚本Openable_Door

    脚本解析:

    脚本需要继承自VRTK_InteractableObject,基本的触碰脚本

    Is Usable需要勾上

    和物体使用有关的函数有两个StartUsing和StopUsing

    在脚本里面重写这两个方法

    //开始使用这个物体时被调用

    publicoverridevoidStartUsing(GameObjectusingObject){}

    //结束使用这个物体时被调用

    publicoverridevoidStopUsing(GameObjectpreviousUsingObject){}

     

    7.007_CameraRig_HeightAdjustTeleport

    存在身体物理属性和传送点高度可自动调整传送方式,使用这种方式,会自动处理角色的掉落

    主要涉及到以下两个脚本

  8. VRTK_BodyPhysics

    SteamVR 工具包VRTK实例解析_第17张图片

    这个主要是用来处理角色掉落的

    Enable Body Collisions:启用身体碰撞器

    Ignore Grabbed Collisions:忽略可拿取物体的碰撞体

    Fall Restriction:掉落处理模式

    No_Restriction 以头部位置为基准(如果头部位置超出则掉落到下面的地板)

    Left_Controller 以左控制器为基准

    Right_Controller 以右控制器为基准

    Either_Controller 以任意一个控制器为基准

    Both_Controllers 同时以两个控制器为基准

  9. VRTK_HeightAdjustTeleport

    SteamVR 工具包VRTK实例解析_第18张图片

    此脚本继承自VRTK_BasicTeleport,可以传送高低不同的地面,而且还可以模拟走上下楼梯的位移感

     

    8.008_Controller_UsingAGrabbedObject

    这个场景是手柄使用物体的一些扩展

    主要涉及到的脚本有

  10. VRTK_TrackObjectGrabAttach

    SteamVR 工具包VRTK实例解析_第19张图片

    继承自VRTK_BaseGrabAttach,这个脚本的作用是抓取物体时的一些设置,使用这个脚本,抓取的位置是固定的

    Detach Distance:分离再次抓取的距离

    Velocity Limit:物体的最大速度

    Andular Velocity Limit:旋转的最大速度

     

  11. VRTK_ChildOfControllerGrabAttach

    SteamVR 工具包VRTK实例解析_第20张图片

    可以被指定到VRTK_InteractableObject脚本的Grab Attach Mechanic属性上,指明抓取采用的方式,这个脚本表示采用父子关系的方式,即将被抓取的物体变成手柄模型的子物体

     

  12. VRTK_InteractControllerAppearance

    SteamVR 工具包VRTK实例解析_第21张图片

    这个脚本用来设定手柄是否隐藏,隐藏的时机等

    Touch Visibility:触碰的时候是否隐藏手柄模型

    Grab Visibility:抓取的时候是否隐藏

    Use Visibility:使用的时候是否隐藏

     

  13. VRTK_ControlDirectionGrabAction,指定抓取的方向

    SteamVR 工具包VRTK实例解析_第22张图片

     

    09.009_Controller_BezierPointer

    采用贝塞尔曲线的方式实现瞬移

    主要涉及以下脚本:

    SteamVR 工具包VRTK实例解析_第23张图片

    VRTK_BezierPointerRenderer,这个是贝塞尔曲线渲染器,使用方式类似射线渲染器

     

    10.010_CameraRig_TerrainTeleporting

    使用贝塞尔曲线的方式在地形上瞬移,使用上没有什么特殊的地方

     

    11.011_Camera_HeadSetCollisionFading

    设置角色头部进入到物体内部时显示黑屏

    SteamVR 工具包VRTK实例解析_第24张图片

    涉及到的脚本

    1.VRTK_HeadsetCollision

    头部碰撞,可以为其设置一个List Policy来控制场景物体的碰撞与否

  14. VRTK_HeadsetCollisionFade

    设置碰撞后黑屏的颜色,和渐变的时间

     

    12.012_Controller_PointerWithAreaCollision

    开起可玩区域碰撞,在瞬移的时候会在顺一点周围出现可玩区域的线框

    涉及到的脚本

    VRTK_PlayAreaCursor,这个脚本需要挂载在控制器上

    SteamVR 工具包VRTK实例解析_第25张图片

    Handle Play Area Cursor Collisions:是否启用可玩区域碰撞

    Headset Out Of Bounds Is Collisions:如果启用,当玩家的头部在可玩区域外面是禁止瞬移

    Target List Policy:这边可以设置一些忽略或启用该属性的清单

     

    13.013_Controller_UsingAndGrabbingMultipleObjects

    多个物体的抓取和使用

    涉及的脚本:

    VRTK_FixedJointGrabAttach

    SteamVR 工具包VRTK实例解析_第26张图片

    继承自VRTK_BaseJointGrabAttach

    Destory Immediately On Throw:扔下物体时立刻销毁关节

    Break Force:销毁时的力

    可以作为抓取的方式脚本,这个脚本意味着使用的固定关节的方式实现抓取

     

    14.014_Controller_SnappingObjectsOnGrab

    演示如何设置物体的抓取位置

    涉及到的脚本

    VRTK_ChildOfControllerGrabAttach

    SteamVR 工具包VRTK实例解析_第27张图片

    Right Snap Handle:抓取的位置,设置了该属性后,无论从什么地方进行抓取都是一样的位置

    SteamVR 工具包VRTK实例解析_第28张图片

    同上

     

    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)

    用于获取控制器的速度信息,参数是控制器的名称

  15. TransformGetControllerOrigin(GameObjectcontroller)

    用于获取控制器的起源位置(可能用于重新定位控制器)

  16. TransformDeviceTransform(Devicesdevice)

    获取指定设备的Transform,(Headset,Left_Controller,Right_Controller

  17. Vector3GetControllerAngularVelocity(GameObjectgivenController)

    获取控制器的转动速度

    5.Vector3GetHeadsetVelocity()

    Vector3GetHeadsetAngularVelocity()

    获取头盔的速度和转动速度

    6.TransformHeadsetTransform()

    获取头盔的Transform

  18. TransformPlayAreaTransform()

    获取游玩区域的Transform

     

    17.017_CameraRig_TouchpadWalking

    使用TouchPad控制人物的移动

    主要涉及的脚本:

    VRTK_TouchpadControl,这个脚本需要挂载在控制器上

    SteamVR 工具包VRTK实例解析_第29张图片

    Device For Direction:选择哪个设备的方向为准

    Disable Other Controllers On Active:如果勾选,将其他监听TouchPad事件的函数都禁用掉

    Affect On Falling:当下落的时候可以继续控制

    Primary Activation Button:哪个按钮启动控制

    Active Modifier Button:激活控制行为的按钮

    Axis DeadZone:无效的阈值区域

    SteamVR 工具包VRTK实例解析_第30张图片

    一些具体按键值得设定可以使用VRTK_SlideObjectControlAction脚本

     

    18.018_CameraRig_FramesPerSecondCounter

    显示每一帧的FPS

    涉及的脚本:

    VRTK_FramesPerSecondViewer,将其挂载到UGUI的text控件上几个显示FPS,具体的代码可以查看脚本内容

     

    19.019_Controller_InteractingWithPointer

    通过射线远程使用游戏物体

    VRTK_InteractableObject脚本

    SteamVR 工具包VRTK实例解析_第31张图片

    Point Activates Use:勾选上,当射线选中物体是,就可以使用该物体

     

    20.020_CameraRig_MeshTeleporting

    通过射线在导航网格上瞬移,没有新的内容

     

    21.021_Controller_GrabbingObjectsWithJoints

    使用关节来抓取物体,演示了多个使用物体的实例,值得研究,没有涉及VRTK新的内容

    主要介绍使用物体的流程

    SteamVR 工具包VRTK实例解析_第32张图片

    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

    演示如何将一些地点设置为不可瞬移点

    SteamVR 工具包VRTK实例解析_第33张图片

    为Target List Policy设置条件属性

    以此为例,Operation为Ignore(忽略),Types为Tag(标签)和Script(脚本),Element里面设置了ExcludeTeleport,这样设置,如果游戏物体上挂载有ExcludeTeleport这个名称的脚本或是游戏物体的标签为ExcludeTeleport,则不能瞬移到这个游戏物体上

    SteamVR 工具包VRTK实例解析_第34张图片

     

    25.025_Controls_Overview

    一个物体使用例子,涉及到一些VRTK预设好一些脚本,

    VRTK_Slider,继承自VRTK_Control,滑动条相关

    SteamVR 工具包VRTK实例解析_第35张图片

    Default Events:给滑动事件设置监听的函数

    Interact Without Grab:如果勾选,当被抓取时不能使用滑块

    Connected To:滑动条将会跟着这个物体移动,一般不设置

    Direction:设定方向,选Autodetect即可

    Minimun Limit:最小数值时滑块的位置

    Maximum Limit:最大数值时滑块的位置

    Minimum Value:滑动条的最小数值

    Maximum Valus:滑动条的最大数值

    Step Size:滑块滑动的增量值

    Snap To Step:当释放滑块时会提前到达附件的一个值(和摩擦力有关)

    Released Firction:滑块释放后的摩擦力

    在代码里面设置监听函数:

    SteamVR 工具包VRTK实例解析_第36张图片

    VRTK_Control_UnityEvents这个脚本用于给控制事件设置监听,挂载继承自VRTK_Control的脚本后会在场景允许后自动挂载上这个脚本,也可以自己去手动在场景还没有开始前添加这个脚本,需要注意的是监听函数的参数是固定写法,使用这个脚本去设置监听函数可以获取一些详细的数值

    SteamVR 工具包VRTK实例解析_第37张图片

     

    VRTK_Knob,径向旋钮相关

    SteamVR 工具包VRTK实例解析_第38张图片

    相关属性和滑动条脚本相同,在代码里面设置监听函数同滑动条

     

    VRTK_Chest,带一个盖子的柜子,控制盖子的打开程度

    SteamVR 工具包VRTK实例解析_第39张图片

    SteamVR 工具包VRTK实例解析_第40张图片

    Lid:盖子部分

    Base:柜子的主要部分

    Handle:把手部分

    Content:柜子内部的物品部分

    Hide Content:当柜子盖上时柜子内的物品不可见

    Max Angle:最大的打开角度

    在代码里面设置监听函数同滑动条

     

    VRTK_Drawer,抽屉相关

    SteamVR 工具包VRTK实例解析_第41张图片

    SteamVR 工具包VRTK实例解析_第42张图片

    Min Snap Close:如果拉开的程度小于这个百分比,柜子将会自动合上

    Max Extend:最大能拉开的程度

    在代码里面设置监听函数同滑动条

     

    VRTK_Button,按钮相关

    SteamVR 工具包VRTK实例解析_第43张图片

    SteamVR 工具包VRTK实例解析_第44张图片

    Activation Distance:激活按钮的距离

    Button Strength:按下按钮的强度

    在代码里面设置监听函数:

    SteamVR 工具包VRTK实例解析_第45张图片

    VRTK_Button_UnityEvents,这个脚本是VRTK_Button配套使用的

     

    VRTK_Door,门相关

    SteamVR 工具包VRTK实例解析_第46张图片

    SteamVR 工具包VRTK实例解析_第47张图片

    Open Inward:这个门能否向内打开

    Open OutWard:能否向外打开

    Min Snap Close:如果打开的程度小于这个百分比,门将自动关闭

    Released Friction:释放后的摩擦力

    Grabbed Friction:抓取的摩擦力

    Handle Interactable Only:如果勾选,只有门把手部分可以打开门

    在代码里面设置监听同滑动条

     

    VRTK_Wheel,方向盘相关

    SteamVR 工具包VRTK实例解析_第48张图片

    SteamVR 工具包VRTK实例解析_第49张图片

    Grab Type:抓取类型,TrackObject:转盘会根据手柄位置去转动;RotatorTrack:需要手柄抓住转盘的把手才能转动

    Locked At Limits:限制转盘的转动角度不能超过最大值

    在代码里设置监听事件同滑动条

     

    26.026_Controller_ForceHoldObject

    涉及的脚本

    VRTK_ObjectAutoGrab,使用这个脚本,手柄控制器会在一开始就自动抓取一个物体

    SteamVR 工具包VRTK实例解析_第50张图片

    Object To Grab:要被抓取的物体

    Object Is Prefab:被抓取的物体是否是预制体或是场景中已经存在的物体

    Clone Grabbed Object:复制被抓取的物体

    Always Clone On Enable:总是采用复制的方式获取物体

     

    27.027_CameraRig_TeleportByModelVillage

    通过使用物体瞬移,一些物体会一直跟随着瞬移

    涉及的脚本

    VRTK_TransformFollow,使用这个脚本,可以指定一些物体跟随瞬移

    SteamVR 工具包VRTK实例解析_第51张图片

    将要跟随瞬移的物体放到挂在了这个脚本的物体的下面,或者将这些物体的父物体指定给Game Object To Change这个属性

    Follows Position:启用位置跟随

    Smooths Position:平滑位置,自动调整

    Follows Rotation:瞬移是转动角度也会跟随

    Follows Scale:缩放大小也会跟随

    Moment:选中时机,之前、同时或之后

     

    ModelVillage_TeleportLocation,将这个物体挂载在一个物体上可以实现点击瞬移

    SteamVR 工具包VRTK实例解析_第52张图片

    Destination:指定瞬移的位置点

     

    28.028_CameraRig_RoomExtender

    扩展游玩区域的例子,适用性不高,不建议使用

    涉及脚本:

    涉及的脚本有三个

    SteamVR 工具包VRTK实例解析_第53张图片

    SteamVR 工具包VRTK实例解析_第54张图片

     

    29.029_Controller_Tooltips

    为手柄和物体加上小贴士的例子

    SteamVR 工具包VRTK实例解析_第55张图片

    涉及到两个个预制体和一个脚本:

    HeadsetControllerAwareEventArgs脚本,使用这个脚本,能够在头盔朝向手柄控制器时被手柄控制器获知,配合上面的预制体使用,即可实现在头盔朝向哪个手柄控制器时就在哪个控制器上显示提示

    SteamVR 工具包VRTK实例解析_第56张图片

    使用方式:

    ControllerGlanceEnter事件:当手柄模型有不可见变为可见时被执行

    ControllerGlanceExit事件:当手柄模型由可见变为不可见时被执行

     

    ControllerTooltips预制体,需要放置在控制器下面,可以为最原始的手柄模型加上提示

    SteamVR 工具包VRTK实例解析_第57张图片

    ObjectTooltip预制体,放在物体下面,可以为游戏物体加上提示

    SteamVR 工具包VRTK实例解析_第58张图片

     

    30.030_Controls_RadialTouchpadMenu

    手柄TouchPad菜单实例

    SteamVR 工具包VRTK实例解析_第59张图片

    涉及到一个预制体

    RadialMenu预制体,sample中介绍了两种使用方式

  19. 菜单显示在手柄模型上

    SteamVR 工具包VRTK实例解析_第60张图片

    Button:设置按钮的个数,可以在内部为每个按钮设置不同的图片和各种事件的监听

    Button Prefab:按钮面板的样式,默认是一个环形

    Button Thickness:环的宽度

    Offset Distance:偏移的距离

    Offset Rotation:偏移的角度

    Icon Margin:图标的边缘距离

    Hide On Release:释放时隐藏

    Execute On Unclick:释放按钮是是否执行事件

    Base Haptic Strength:选择不同按钮时的震动

    Menu Buttons:使用真实的button构成环形菜单

    这边需要主要RadialMenuController脚本,是按钮菜单的控制脚本,手柄上的环形菜单使用的是这个脚本

  20. 菜单显示在其他地方

    SteamVR 工具包VRTK实例解析_第61张图片

    放置在其他地方的菜单使用的控制脚本是不一样的,

    VRTK_IndependentRadialMenuController,这个脚本继承自RadialMenuController

    Add Menu Collider:为菜单添加collider,这个最好加上,否则菜单无法与手柄碰撞

     

    31.031_CameraRig_HeadsetGazePointer

    通过视野中心点选择瞬移点的例子

    SteamVR 工具包VRTK实例解析_第62张图片

    没有新的脚本内容,以上各脚本的具体配置详解example

     

    32.032_Controller_CustomControllerModel

    实例说明如何替换手柄模型,并使用物品

    SteamVR 工具包VRTK实例解析_第63张图片

    将各自的模型放置到对应的控制器下面,记住需要在VRTK_SDK Manager这边的这两个地方进行配置,手柄模型必须在一开始就在场景里面,位置也要设置好

    其他的使用物体上和采用原始的模型没有什么区别

     

    33.033_CameraRig_TeleportingInNavMesh

    限制在导航网格上面的瞬移距离

    SteamVR 工具包VRTK实例解析_第64张图片

    没什么新的内容

     

    34.034_Controls_InteractingWithUnityUI

    使用射线与UI进行交互,介绍了三种使用例子

  21. 与普通的UGUI交互

    SteamVR 工具包VRTK实例解析_第65张图片

    Canvas的渲染方式需要修改成World Space,为Canvas添加VRTK_UICanvas脚本即可

    Auto Activate Within Distance:UI自动激活的距离,即使射线没有出现的时候

  22. 键盘UI

    SteamVR 工具包VRTK实例解析_第66张图片

    添加这两个脚本即可VRTK_UICanvas和UI_KeyBoard

    UI_KeyBoard脚本是sample里面的脚本

  23. 拖拽UI

    设置存放UI的容器

    SteamVR 工具包VRTK实例解析_第67张图片

    VRTK_UIDropZone,只需这个脚本即可,但是为了可以让存放在里面的UI可以自动被整理,还需要添加上Grid Layout Group脚本

    设置可以被拖拽的UI

    SteamVR 工具包VRTK实例解析_第68张图片

    VRTK_UIDraggableItem,添加这个脚本后,这个UI控件就可以在这个Canvas里面被拖拽了

    Restrict To Drop Zone:在保存空间内排序

    Restrict To Original Canvas:在画布内排序

     

    35.035_Controller_OpacityAndHighlighting

    手柄模型高亮的实例,各个按键都可以被高亮,还有为手柄单个按键设置tip

    涉及的脚本:

    VRTK_OutlineObjectCopyHighlighter

    SteamVR 工具包VRTK实例解析_第69张图片

    添加了这个脚本后就可以在代码里面获取控制高亮了

    SteamVR 工具包VRTK实例解析_第70张图片

     

    36.036_Controller_CustomCompoundPointer

    一个酷炫的贝塞尔传送曲线的示例

    没有什么新的内容,主要是对贝塞尔曲线渲染器的配置,具体看sample

    SteamVR 工具包VRTK实例解析_第71张图片

     

    37.037_CameraRig_ClimbingFalling

    一个处理各种攀爬和掉落的示例,做攀岩游戏必备

    涉及的脚本:

    VRTK_PlayerClimb,这个脚本可以处理各种攀爬和自然掉落的情况,需要其他脚本在同一个物体上,具体见sample

    VRTK_ClimbableGrabAttach,在可以被攀爬的物体上除了要添加交互抓取必须的脚本外还需要添加这个脚本

    SteamVR 工具包VRTK实例解析_第72张图片

     

    38.038_CameraRig_DashTeleport

    让瞬移有个过程,像直接冲过去一样

    涉及的脚本:

    VRTK_DashTeleport

    SteamVR 工具包VRTK实例解析_第73张图片

    添加这个脚本就可以实现这个效果

    还有一个sample里面提供的脚本RendererOffOnDash,被挂载在游戏物体上,作用应该是在瞬移冲锋的时候停止渲染该物体,实例里面是在所有的游戏物体上都添加了这个

     

    39.039_CameraRig_AdaptiveQuality

    一个优化的例子

    涉及的脚本:

    VRTK_AdaptiveQuality,挂载这个脚本,游戏会根据GPU的负荷去调整渲染的效果,简单说就是用画质换性能

    SteamVR 工具包VRTK实例解析_第74张图片

     

    40.040_Controls_Panel_Menu

    一个控制物体上面板菜单的实例

    PanelMenu预制体:

    将其放入需要产生PanelMenu的游戏物体中

    SteamVR 工具包VRTK实例解析_第75张图片

    在预制体的最上层有个PanelMenuController脚本,在这里可以为手柄TouchPad的四个方向指定相应出现的Panel,默认的使用方式是拿起物体,按下TouchPad的四个方向的按键即可

    指定的Panel需要挂载有PanelMenuItemController脚本

    在Panel的子物体上的脚本就可以通过代码去给Panel显示期间的各个按钮事件去指定监听

     

    41.041_Controller_ObjectSnappingToDropZones

    一个物体放置的示例,可以指定可以放的物体

    SteamVR 工具包VRTK实例解析_第76张图片

    涉及的内容:

    SnapDropZone预制体,这个预制体可以用来制作存放物品的栏位

    SteamVR 工具包VRTK实例解析_第77张图片

    VRTK_SnapDropZone,主要脚本,用来指定物体是实现效果

    Highlight Object Prefab:指定可以存放的物体,直接将物体的预制体拉进去即可

    Snap Type:存放采用的方式

  24. Use_Kinematic:运动学方式,物体放上去后不会被移动
  25. Use_Joint:关节方式,物体放上去之后可以被挤开,使用这种方式需要添加关节组件
  26. Use_Panenting:父子关系,物体放上去后会被缩小

    Valid Object List Policy:这边可以进一步过滤是否可以存放的物体

    VRTK_HipTracking,可以制作随人物移动的格子

    SteamVR 工具包VRTK实例解析_第78张图片

     

    42.042_CameraRig_MoveInPlace

    模拟正常移动的一个示例,按下TouchPad,人体在原地踏步即可前进(头部晃动即可),配合万向走步机使用更佳

    SteamVR 工具包VRTK实例解析_第79张图片

    添加这个脚本就可以

     

    43.043_Controller_SecondaryControllerActions

    双手同时操作物品的示例

    涉及的脚本:

    VRTK_AxisScaleGrabAction

    SteamVR 工具包VRTK实例解析_第80张图片

    使用这个脚本,使用双手可以将物体放大缩小

    VRTK_ControlDirectionGrabAction

    使用这个脚本,两只手可以拿起同一个物体,一般用于长物体

     

    44.044_CameraRig_RestrictedTeleportZones

    设置一些指定的点才能够瞬移

    先使用VRTK_PolicyList脚本限定传送点

    SteamVR 工具包VRTK实例解析_第81张图片

    在使用VRTK_DestinationPoint脚本,设置传送点的属性,这个脚本需要被挂载到每一个传送点上

    SteamVR 工具包VRTK实例解析_第82张图片

    Enable Teleport:是否可以传送

    Default Cusor Object:传送点默认的样式

    Hover Cursor Object:传送点可传送时的样式

    Locked Cursor Object:不可传送时的样式

    Snap To Point:快速到达

    Hide Point Cursor On:在传送过去的时候隐藏传送点

     

     

     

     

你可能感兴趣的:(VR相关)