VRTK的使用-交互和抓取
一、直接抓取
1.控制手柄抓取基础
1.向交互的目标物体挂载脚本VRTK_Interactable Object并添加碰撞体
VRTK_Interactable Object脚本解析:
- Disable When Idle:当物体空闲的时候是否关闭这个组件节约资源
- Touched HighLight Color:手柄高亮颜色,若改为黑色,则不改变颜色
- Is Grabbable( Useble):抓取(选中)选项下的组件是否可用,若想使用该功能必须勾选
- Hold Button To Grab( Use):是否一直按住按钮才会响应事件
- Stay Grabbed On Teleport:在瞬移的时候是否保持抓取事件,即瞬移的时候是否继续抓取物体
- Vaild Drop:当抓取时再次按下grab按钮,释放的一方行为,分别为不释放,扔出,把它放在指定的区域
- Grab Overriding Button:该功能的手柄操作按键,必须选择,否则无法使用
- Allowed Touch Controllers:管理响应touch事件的手柄
- Grab Attach Mechanic Script:抓取机制的脚本
- Secondary Grab Action Script:二级抓取的控制脚本
2.向手柄添加VRTK_Interact Grab、VRTK_Interact Use脚本
2.控制器抓取物体时消失
向交互物体添加VRTK_Interact Controller Appearance脚本
VRTK_Interact Controller Appearance脚本:管理三种事件的手柄是否消失和消失时间
3.控制手柄震动
向交互物体添加VRTK_Interact Haptics脚本
VRTK_Interact Haptics脚本解析:管理三种事件的手柄震动力度、持续时间、频率。
4.抓取配置的第二方法
打开Window->VRTK->SetUp Interactable Object
5.设置抓取的位置和方向
1.使用4中的方法配置好一个模型后,调整VRTK_Child of Controller Grab Attach脚本参数
2.配置VRTK_Child of Controller Grab Attach脚本的参数:
Precision Grab:是否采用精确抓取
Right(Left) Snap Handle:设置右手(左手)抓取的点,要求所设置的点必须是被抓取物体的子物体
Throw Velocity with Attach Distance:是否根据手柄的位置与吸附点的距离计算扔出的速度
Throw MultipLier:扔出速度的乘数
On Grab Collision Delay:抓取时碰撞检测的延时
3.设置吸附点,并改变手柄吸附点和物体坐标的旋转角度一致。
6.开关门效果
- 在使用4中设置时,将面板上的Grab Attach Mechanic的参数改为Rotator Track
- 为“门”加入组件Hinge Joint组件和碰撞体,注意门旋转的边框也需要有刚体和碰撞体
- Hinge Joint组件的Connected Body参数改为旋转边框的刚体,勾选Use Limit启用角度限制,角度在Min和Max中设置。
- 附加:另一种实现该效果的方法,即通过4所述方法将门设置为可use的对象。通过代码子类继承VRTK_InteractableObject父类,重写StartUsing(GameObject currentUsingObject)方法即可,将该脚本挂载在门上。
7.双手交互
1.在使用4中设置时,将面板上的Grab Attach Mechanic的参数改为Climbable
附加:面板Second Grab Attach参数介绍
- Swap Controllers:一只手持握,另一只手参与进来后会产生抓握
- Control Direction:用手对于抓取物体的调整方向
- Axis Scale:双手进行对抓取物体的缩放
2.附加:攀爬效果: 在PlayArea添加VRT’K_Player Climb脚本
再次提醒:VRTK_Interactable Object脚本的- Grab Overriding Button参数必须设置,否则无法呈现效果。
二、激光的交互和抓取
1.激光抓取基础
- 改变物体为可交互物体,勾选Is Useable。
注意:Use Only If Grab若勾选,则物体一旦被激光选中会立即使用不需要触发按钮 - 为手柄添加VRTK_Interact Use脚本,即可实现使用效果。
- 勾选VRTK_Pointer脚本的Interact With Objects,实现激光指针和手柄的选中效果
注意:Grab To Pointer Tip一旦勾选,则会将物体吸附在光标的顶端,可理解为吸附在射线的可见尽头。 - 为手柄添加VRTK_Interact Use_Unity Events脚本,该脚本可挂载使用时的事件和使用完毕后的事件
2.激光抓取
- 实现抓取,.将VRTK_Interact Use_Unity Events脚本的使用时的事件添加为本手柄的VRTK_InteractGrab.AttemptGrab
- 在抓取的同时不会进行瞬移,将VRTK_Interact Use_Unity Events脚本的使用时的事件再添加一个,为本手柄的VRTK_Pointer.Toggle,并且勾选
3.自主编写抓取效果
- 导入VRTK的包,using.VRTK
- 类继承VRTK_InteractableObjetc
- 重写父类的StartUsing函数和StopUsing函数。不会的小伙伴建议返回学习代码基础override关键字。
- 注意:由于继承的原因,这里物体只需要导入自主编写的代码即可。
三、附加:unity的关节知识
unity内的关节组件一共分为5大类,它们分别是链条关节、固定关节、弹簧关节、角色关节和可配置关节。
- 链条关节(Hinge Joint):将两个物体以链条的形式绑在一起,当力量过大超过链条的固定力矩时,两个物体就会产生相互的拉力。
- 固定关节(Fixed Joint):将两个物体永远以相对的位置固定在一起,即使发生物理改变,它们之间的相对位置也不会发生改变。
- 弹簧关节(Spring Joint):将两个物体以弹簧的形式绑定在一起,挤压它们会得到向外的推力,拉伸它们会得到两边对中间的拉力。
- 角色关节(Character Joint):可以模拟角色的骨骼关节。
- 可配置关节(Configurable Joint):它可以模拟任意关节的效果,包括上面的4种效果。
- 更多介绍请参考另一位博主的博客:关于Unity中关节的使用(一)