赞
踩
在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)
输入硬件的编号,返回是否按下的布尔值.
pointerToggleButton :激光的显示开关, 激光在VR里相当于鼠标箭头的指向功能.
pointerSetButton: 激光停留的指向目标,触发目标的功能.
grabToggleButton:
useToggleButton:
这个和pointerSetButton区别在于后者需要激光落在目标上,才能触发目标上的功能
uiClickButton :触发UI Canvas 目标的事件
menuToggleButton: 游戏目录显示开关
axisFidelity:
triggerClickThreShold:
以上是设置各个按键在插件中交互的功能
如果要获得每个按键具体的使用情况,如按下,松开按键,手触摸板的按键位置,扳机的按下强度,则需要在VRTK_ControllerEvent注册对应按键的事件
在VRTK_ControllerEvents_ListenerExample脚本中,监听了VRTK_ControllerEvent所有按键的事件,和按键的参数信息
如 下图见图的扳机键的按键事件
事件的参数是
手柄的硬件编号, 按钮的按下程度值(扳机键专有的属性), 触摸板的触摸位置和角度(触摸板专有的属性)
该脚本继承自VRTK_WorldPointer
功能的核心是将玩家的位置传送到激光所指落在的地方,
该脚本应默认放在手柄的prefab上
其他的参数设置激活颜色,传送时是否显示玩家活动区域, 激光有效触碰的层,激光的粗细等
该脚本配合继承自VRTK_WorldPointer的子类 如VRTK_Simple Pointer,
参数
1: 传送时黑屏
2: 黑屏时间
3: 头部位置
4:禁止传送物体的标签
5:作为第四个功能的补充
6
手柄上添加的组件
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
该脚本可以 为交互物体增加一个外轮廓颜色
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。