1UnitySteamVR开发工具插件VRTK自带案例分析报告第一部分.docx

上传人:b****7 文档编号:24022337 上传时间:2023-05-23 格式:DOCX 页数:19 大小:748.60KB
下载 相关 举报
1UnitySteamVR开发工具插件VRTK自带案例分析报告第一部分.docx_第1页
第1页 / 共19页
1UnitySteamVR开发工具插件VRTK自带案例分析报告第一部分.docx_第2页
第2页 / 共19页
1UnitySteamVR开发工具插件VRTK自带案例分析报告第一部分.docx_第3页
第3页 / 共19页
1UnitySteamVR开发工具插件VRTK自带案例分析报告第一部分.docx_第4页
第4页 / 共19页
1UnitySteamVR开发工具插件VRTK自带案例分析报告第一部分.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

1UnitySteamVR开发工具插件VRTK自带案例分析报告第一部分.docx

《1UnitySteamVR开发工具插件VRTK自带案例分析报告第一部分.docx》由会员分享,可在线阅读,更多相关《1UnitySteamVR开发工具插件VRTK自带案例分析报告第一部分.docx(19页珍藏版)》请在冰豆网上搜索。

1UnitySteamVR开发工具插件VRTK自带案例分析报告第一部分.docx

1UnitySteamVR开发工具插件VRTK自带案例分析报告第一部分

1、UnitySteam_VR开发工具插件VRTK自带案例分析(第一部分)

VRTK这个工具包提供了很多在Unity3d做VR开发用的VR功能,主要包括

1)具有别名的控制器按钮事件

2)控制世界指针(激光指针)

3)玩家瞬间转移

4)使用控制器抓起/握住物体

5)使用控制器与物体交互

6)把游戏物体变成交互式的UI元素

这个工具集主要分成三个部分:

1)Prefabs-VRTK/Prefabs/

2)Scripts-VRTK/Scripts/

3)Examples-VRTK/Examples/

DEMO1 查询硬件手柄头显

在VRTK插件的第一个demo001_CameraRIg_VR_PlayArea案例。

这个demo显示的功能:

 按下任一手柄上的按键,便载入下一个场景。

找到demo场景中##SceneChanger##游戏物体,打开附加的scenechanger脚本,里面有两个核心的类,以及几个重要的API。

VRTK_DeviceFinder类:

用于在场景中寻找左右手柄、头显、返回硬件编号

或手柄,头显的gameobject。

         

重要的API:

  

获得左右手柄的游戏物体

VRTK_DeviceFinder.GetControllerRightHand(); 

VRTK_DeviceFinder.GetControllerLiftHand();

获得左右手柄对应的硬件编号

VRTK_DeviceFinder.GetControllerIndex(rightHand)

按下手柄任一按键或键盘上的空格键,加载下一个场景。

ForwardPressed用于侦测手柄的按键是否按下。

上图中引入第二个重要的类:

VRTK_SDK_Bridge,这是插件封装了 SteamVR的比较底层的API:

VRTK_SDK_Bridge.IsTriggerPressedOnIndex(controllerIndex)。

输入硬件的编号,返回是否按下的布尔值。

 

DEMO2手柄的输入事件002_Controller_Events

封装成VRTK_ControllerEvent脚本。

针对VR中常见的交互动作:

 UI点击,抓住物体,触发物体功能等,自定义手柄按键,绑定这些动作。

旧版

新版

pointerToggleButton:

激光的显示开关,激光在VR里相当于鼠标箭头的指向功能。

pointerSetButton:

激光停留的指向目标,触发目标的功能,相当于鼠标点击。

grabToggleButton:

抓住物体动作,配合使用VRTK插件集成的抓取,投掷功能。

useToggleButton:

触发目标事件,比如把手柄放在门把手上,按下这个按键,触发门打开的功能;手柄放在电灯开关上,按下按键,触发电灯开发的功能。

这个和pointerSetButton区别在于后者需要激光落在目标上,才能触发目标上的功能。

uiClickButton:

触发UICanvas目标的事件。

menuToggleButton:

游戏目录显示开关。

axisFidelity:

按键按下的强度,完全按下是1,松开时是0。

现在只有Trigger按键(手部后面扳机)有此属性。

triggerClickThreShold:

扳机要到多大程度,才能使用扳机的触发功能。

如果是0.5,则表示只要按下一半的程度就可以触发,如果是1,则必须完全按下才能触发。

 

以上是设置各个按键在插件中交互的功能。

如果要获得每个按键具体的使用情况,如按下、松开按键、手触摸板的按键位置、扳机的按下强度等,则需要在VRTK_ControllerEvent注册对应按键的事件。

 

在VRTK_ControllerEvents_ListenerExample脚本中,监听了VRTK_ControllerEvent所有按键的事件,和按键的参数信息。

如下图的扳机键的按键事件。

 

事件的参数在VRTK_ControllerEvents中是:

手柄的硬件编号、按钮的按下程度值(扳机键专有的属性)、触摸板的触摸位置和角度(触摸板专有的属性)

 

DEMO003_Controller_SimplePointer 传送位置

VRTK_SimplePointer类。

该脚本继承自VRTK_WorldPointer

旧版

新版

功能的核心是将玩家的位置传送到激光所指落在的地方,该脚本应默认放在手柄的prefab上。

其他的参数设置激活颜色、传送时是否显示玩家活动区域、激光有效触碰的层、激光的粗细等。

 

DEMO004_CameraRig_BasicTeleport

VRTK_BasicTeleport。

该脚本配合继承自VRTK_WorldPointer的子类,如VRTK_SimplePointer,添加此脚本后才可以位移传送。

 

参数

1)传送时黑屏:

模拟眨眼动画,过渡更自然。

2)黑屏时间:

随传送距离远近成正比的黑屏时间。

假如传送的位置比较远,则黑屏时间更久。

数值越大,黑屏时间越长,数值为0时,不受距离远近影响。

3)头部位置:

以头部为基准,作为传送的位置。

未打钩,则是玩家可玩区域的中心位置作为传送的目标点。

可玩区域不能和游戏环境交叉,最大化玩家活动空间。

4)禁止传送物体的标签:

如果传送的目标位置的物体标签和此相同,则不能传送。

5)作为第四个功能的补充:

可以添加VRTK_TagOrScriptPolicyList脚本中添加多个禁止传送的物体标签。

6)navemesh边缘限制:

在navemesh上传送,如果在navemesh的边界,则禁止传送,数值是离边界的距离围。

 

DEMO005_Controller_BasicObjectGrabbing 

抓取物体

手柄上添加的组件 

1、VRTK_InteractGrab,这个脚本用来抓取物体,抓的按键在VRTK_ControllerEvent脚本中设置。

controllerAttachPoint:

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

HideControllerOnGrab:

抓住物体时,隐藏手柄。

HideControllerDelay:

延迟几秒后隐藏手柄。

GrabPrecognition:

提前预判抓取物体。

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

ThrowMultiplier:

把物体扔出去时,速度的倍增值。

CreateRigidBodyWhenNotTouch:

在碰到物体时才创建RigidBody。

默认情况下手柄也创建Rigidbody,这就可以和物体在物理上碰撞。

2、和物体接触 VRTK_InteractTouch

HideControllerOnTouch:

接触物体时隐藏物体。

HideControllerDelay:

接触物体后延迟几秒后隐藏物体。

GlobalTouchHighLightColor:

如果被接触的物体上未设置接触高亮颜色,则用此颜色来对改变目标的颜色。

CustomRigidBodyObject:

自定义用于判定接触的刚体物体,如果没有的话,会自动在子层级创建一个刚体物体。

3、VRTK_ControllerEvent手柄的输入事件

交互物体上应该添加的脚本

VRTK_InteractableObject 需要有rigidbody组件和collider组件

1)Touchoptions 接触

HighLightOnTouch:

接触时高亮显示物体颜色。

TouchHightLightColor:

高亮的颜色。

RumbleOnTouch:

接触时的反馈震动强度和时间。

AllowTouchController:

规定哪个手柄可以接触这个物体。

HideControllerOnTouch:

覆盖是否隐藏手柄的设置,default是根据手柄的设置。

2)GrabOptions 抓取

IsGrabbable:

是否可以被抓取。

Isdroppable:

松开时是否掉落。

Isswappable:

是否可替换。

如果不行,则必须先把物体丢掉。

HoldButtonToGrab:

按住才能保证物体不掉落。

GrabOverrideButton:

覆盖手柄的抓取按键设置。

RumbleOnTouch:

接触时震动,同上。

AllowedGrabControllers:

规定哪个手柄可以接触这个物体。

PrecisionGrab:

精准抓取。

如果是,则抓取的位置是刚接触到物体的点,而不是默认的物体中心位置。

RightLeftSnapHandle:

被抓物体的抓取点,该游戏物体应该放在被抓物的子层级下。

StayGrabbedOnTeleport:

传送后仍然抓住物体,否则物体丢掉。

GrabAttachMechanic:

被抓物体的依附机制。

Fixed_joint到fixedJoint上,这是比较常用的物理上的固定位置;Spring_joint和FixedJoint类似,但是有点手臂关节,可以拉伸弯曲伸直;trackObject不靠joint,而是让被抓物跟随手柄的位置方向;rotator_Track比较适合门、车驾驶把手这种有固定转轴的物体,它只能在受转轴的约束下,根据手柄的抓取位置来调整旋转;childofcontroller作为手柄的子物体;climbable固定不动的交互物体。

3)Useoptions 使用

UseonlyifGrabbed:

只有在被抓取时才可以被使用。

HoldButtontoUse:

长按手柄按键才可以使用。

UseOverrideButton:

自定义操作按键。

PointeractivatesUseAction:

如果打钩,当手柄发射的激光落在交互物体上,于此同时如果Holontouse没有打钩,则使用该物体,Holontouse打钩了,则要按住使用按键才可以使用该物体。

该脚本可以为交互物体增加一个外轮廓颜色。

 

VRTK_InteractableObject扩展

DEMO006_Controller_UsingADoor

该例子用了一个开门的交互来扩展VRTK_InteractableObject脚本

接触VRTK_InteractableObject类,覆盖开始使用物品的方法,在此方法中写入交互动作的逻辑方法。

此外还有

物体被接触时,抓取时,接触接触,结束抓取动作发生时调用的函数,可以覆盖此方法,自定义扩展你的交互动作。

注意:

手柄上应该添加下图脚本,否则无法使用物体

DEMO007_CameraRig_HeightAdjustTeleport 高度升降传送

 此脚本继承VRTK_BasicTeleport,不像DEMO4场景只能水平面平移传送,它可以传送高低不同的地面,而且还可以模拟走上下楼梯的位移感。

 上图中红框中是扩展的功能参数。

 

Playspacefalling:

是否能下落

Playspacefallrestriction:

下落条件,规定哪个手柄位于当前平面,就不会下落

Usegravity:

是否自由落体加速度

GravityFallHeight:

超过多少高度差,才开始自由落体

BlinkYthreshold:

高度落差超过多少值时,才会模拟黑屏眨眼的效果

FloorHeightTolerance:

找过这个数值时,才会有上升和下降的位移

 

DEMO008_Controller_UsingAGrabbedObject

和第6个场景原理类似,都是继承VRTK_InteractableObject脚本,物品的使用功能拓展。

 

DEMO009_Controller_BezierPointer抛物线传送侦测。

和VRTK_SimplePointer功能类似,不同的是使用抛物线来代替激光直线获取传送的位置

红框是额外的参数, 设置抛物线的最长有效距离, 抛物线中的物体,落地的光标物体设置等,没有什么额外特别的东西

 

DEMO_CameraRig_TerrainTeleporting地形传送

此例子没有演示新的功能,只是展示了可以在地形上传送

 

DEMO011_Camera_HeadSetCollisionFading

头部碰撞到物品后黑屏眨眼效果,提示玩家已经和游戏中物体相接触,让其返回到正常的区域。

附加在Camera(eye)上

DEMO012_Controller_PointerWithAreaCollision

传送的位置附近的物品如果和玩家可活动围碰撞器的相接触,将影响传送位置的最终位置,使其在合理的围。

开启可玩区域碰撞体

DEMO013演示了多个物体抓取和使用的功能

 

DEMO014演示了抓取物品握住的位置

主要是这里的参数设置,这些参数的意义之前已经有说明

  

DEMO015_Controller_TouchpadAxisControl

演示手指在手柄触摸板的触摸位置vector2(x,y),来控制小车的移动方向,手柄的扳机,控制小车跳起的动作。

基本思路是:

一个脚本监听手柄的输入事件,将事件的相关值传入到小车的控制器。

 

监听手柄按键

传入到小车的控制运动的脚本

小车的运动部分函数

DEMO016_Controller_HapticRumble

手柄震动

当蓝色盒子上的剑和红色盒子撞击时,触发手柄震动

  

 

基本思路是剑的物体碰撞器侦测到碰撞时,获取手柄的运动速度,来决定震动的强度。

 

如下图,controllerAction和ControllerEvents对应的手柄身这两个脚本。

关键的震动方法是:

有VRTK.ControllerAction.TriggerHapticPulse (震动强度,震动持续时间,震动间隔时间)。

 

DEMO 017_CameraRig_TouchpadWalking

使用触摸板来控制人物行走,以及在低矮的洞穴中蹲走时碰到头顶的碰撞体,返回到能正常直立站立的位置。

附加在此物体上

VRTK_PlayerPresence 让人物有碰撞体,且头部上方有碰撞体时,如果不蹲着走,就会强制返回可以正常站立的位置。

 

HeadSetYposition:

头部碰撞体离头顶向下的偏移值,这样可以通过更矮的挡板

IgnoreGrabbedCollisions:

忽略交互物体的碰撞效果,建议勾上

ResetPositionOnCollision:

在低矮的洞穴中蹲走时碰到头顶的碰撞体,返回到能正常直立站立的位置

Fallingphysicsonly:

如果打钩,则可以自由落体下降

 VRTK_TouchpadWalking通过触摸板的触摸位置来定位移动方向

 参数:

leftController,rightController:

如果勾选则可以控制移动。

MaxWalkSpeed:

最大行走速度,如果触摸位置离中心位置越近,移动速度越慢。

Deceleration:

行走结束时的减速效果,防止恶心。

MoveOnButtonPress:

按下哪个按键时才能触发移动(前提触摸板也要输入)。

DeviceForDirection:

移动的方向以哪个设备为基准。

头显朝向,还是左右手柄的正方向。

 

DEMO 018_显示当前帧数

把这个prefab拖到场景中就可以显示当前帧数

 

DEMO019_Controller_InteractingWithPointer

用手柄激光和物体交互

VRTK_interactionObject的pointeractivatesuse打钩后,就可以用激光和物体交互,如果HoldButtonToUse没有勾选,那么激光落在物体上,就直接使用该物体。

如果HoldButtonToUse勾选了,那就需要激活指在物体上,同时按下扳机按键,才使用物体。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > IT认证

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1