VRTK使用
参考文档:https://blog.csdn.net/qq_25601345/article/details/78497537?tdsourcetag=s_pcqq_aiomsg#_Toc31475
VRTK:3.2.1 版本 Steam VR:Assets Store下载
1、手柄发射射线
- 手柄控制器挂载两个脚本:VRTK_Pointer 射线发射脚本 和 VRTK_Stratight Pointer Renderer
直
射线渲染脚本(或 VRTK_Bezier Pointer Renderer曲
射线脚本组件,射线的模型和目标点模型等参数可自定义),VRTK_Pointer脚本中指定Pointer Render类型;
2、手柄基本交互事件(触摸、抓取和使用)
给手柄控制器添加 VRTK_Controller_Events 脚本(手柄事件机制必需);
- 根据需要添加以下脚本组件 :
VRTK_Interact Touch(触碰)
VRTK_Interact Grab(抓取注:指定默认的抓取按键 Grab Button
)
VRTK_Interact Use(使用注:指定默认的使用按键 Use Button
)
一般 Events、Touch、Grab、Use 这几个脚本都给控制器添加上
抓取和使用脚本中,按钮若指定默认值,被交互物体所挂脚本中按钮可默认不更改;按钮若不指定,被交互物体所挂脚本中按钮要自定义;否则,被交互物体不能响应手柄的事件
3、物体抓取
- 物体能够被抓取的条件*
需要有Rigidbody
和Collider
组件,
挂载 VRTK_Interactable Object 脚本才可以响应手柄的交互,Touch Highlight Color 调整触碰时的高亮颜色,
如果不给物体添加抓取方式,默认使用固定关节抓取方式:VRTK_FixedJointGrabAttach,
挂载VRTK_ Outline Object Copy Highlighter脚本使物体 外轮廓 呈现高亮,默认整体高亮
注:
- VRTK_Interactable Object脚本中的 Is Grabable(Is Usable) 默认是不勾选的,如果想要该物体能够被抓取,需要勾选该选项
- 如果想点击抓取按钮之后就拿到物体,而不是一直按着按钮,取消勾选 Hold Button To Grab 即可
- 挂载 VRTK_Swap Controller Grab Actions 脚本实现物体可以左右手交换
七种抓取方式:
VRTK_FixedJointGrabAttach 固定关节抓取(系统默认方式)
VRTK_SpringJointGrabAttach 弹簧关节抓取(手柄和被抓取物体之间弹簧链接效果,比如抽屉的弹性效果)
VRTK_CustomJointGrabAttach 自定义关节抓取(添加所需类型的Joint组件,并指定给自定义关节参数 Custom Joint)
VRTK_TrackObjectGrabAttach 对象追踪抓取(被抓取物体跟踪手柄,受外力阻挡时不会掉落)
VRTK_ClimbableGrabAttach 可攀爬抓取(实现手抓物体可攀爬效果),另外需要在场景上挂载 VRTK_Player Climb 脚本
VRTK_RotatorTrackGrabAttach 旋转体抓取 (效果和弹簧关节相似,比如门旋转的弹性效果,笔者猜测钟摆效果也可)
VRTK_ChildOfControllerGrabAttach 作为控制器子物体(抓取物体成为手柄控制器模型子物体,射箭的典型例子)
4、物体使用(第25个例子未研究,一些物体的使用)
手柄控制器添加 VRTK_Interact Use 脚本,
被使用物体添加自定义脚本,继承VRTK_Interactable Object 类(勾选 Is Usable),重写该类的 StartUsing () { //自定义“使用”功能 } 和 StopUsing () 方法
注:
- 若多个物体组成被交互对象,其中有使用对象,脚本挂在父容器上即可
射线使用物体:
勾选 Use Options 中的 Pointer Activates Use 实现
5、物体交互手柄震动
TriggerHapticPulse() 函数实现手柄震动:
- 参数:
index:手柄索引
strength:震动强度
duration:持续时间
旧版本VRTK中使用的是 VRTK_Controller Action.TriggerHapticPulse(float strength);
较新版本中使用的是 VRTK_SharedMethods.TriggerHapticPulse
( int index ÿ