抓取物体功能的实现##
005_Controller_BasicObjectGrabbing##
1、VRTK_InteractableObject:可交互对象##
定义:可交互对象脚本被添加到需要用(如控制器)来交互的任何游戏对象上。
Touch Interactions:触摸交互
Highlight On Touch:如果勾选,这个对象在控制器触摸它时就会高亮。
Touch Highlight Color:对象被触摸时高亮的颜色。颜色可以被任何全局的设置颜色来覆写
(例如InteractTouch 脚本)。
Rumble On Touch:控制器触碰对象时触发振动反馈,x表明时长,y表明震动强度。(x和y将来会被自定义编辑器代替)。
Grab Interactions:抓握交互
Is Grabbale:决定对象是否能被抓握。
Is Droppable: 决定对象在被控制器抓握后能否被放下。如果没有勾选,一旦用控制器按钮拾起了物品就不能放下了。但是如果抓握的机制是关节(Fixed_Joint)的 话,当对象受力足够大之后关节断开,物品也就被
放下了。所以最好使用控制器子物体的抓握机制(Child_Of_Controller)来防止这种情况。
Hold Button To Grab:如果勾选,控制器就需要持续按住设置为抓握的按钮来保持抓握状态。如果没有勾选,
抓握的按钮切换抓握行为通过按下一次抓取,再按一次释放。
Grab Mechanics:抓握机制
Grab Attach Type:这决定了抓取的物品在被抓取时怎样被添加到控制器上。
o Fixed Joint(固定关节)用一个固定的关节把对象附加到控制器上,意味着附加对象以完全1:1的方式
追踪控制器的位置和旋转。
对于手柄控制器的抓取代码##
2、VRTK_InteractTouch:触碰##
定义:触摸交互脚本被添加到[CameraRig] 预制里的控制器对象上。
3、VRTK_InteractGrab:抓取交互对象##
定义:交互抓取脚本被 添加到[CameraRig] 预制里的控制器对象上,并且需要添加VRTK_ControllerEvents脚本用来监听抓取和释放交互游戏对象的控制器按钮事件。它监听 AliasGrabOn和AliasGrabOff 事件来确定对象合适应该被抓取和释放。
注意:
1、控制器对象也需要添加VRTK_InteractTouch 脚本用来确定何时一个可交互对象被触摸到。只有有效的
被触摸对象才能被抓取。
2、如果控制器触碰到一个包含VRTK_InteractableObject脚本并且isGrabbable 标志位设置为真的游戏对象,
该对象就可以被抓取。
3、如果有效可交互对象是可抓取的,按下控制器上所设置的抓取按钮(默认是Trigger按钮)将抓取和对齐对象
到控制器上,并且直到抓取按钮松开才会被释放。
4、当控制器抓取按钮松开时,如果可交互对象是可抓取的,它将会被按一定速率沿着控制器松开时的方向进行推动,
这就模拟了对象投掷
5、可交互对象需要碰撞体用来激活触发和一个刚体用来拾取它们并在游戏世界中四处移动它们。
参数解释
Controller Attach Point:控制器模型上用来吸附抓取的对象的刚体点(默认为tip)
Hide Controller On Grab: 当有效抓取发生时隐藏控制器模型。
Hide Controller Delay:在抓取时隐藏控制器之前的等待时间秒数。
Grab Precognition:预先抓取: 在抓取按钮按下时和控制器正在抓取某个东西时之间时间量。例如,
如果一个对象下落过快,因为人的反应时间可能很难及时按下抓取按钮来抓住对象。这个值越高 意味着抓取键可以
越提前在控制器碰到对象以及碰撞发生前按下,如果抓取键仍然被按下(如果抓取对象需要持续按键抓取的话),
则抓取动作就会成功。
Throw Multiplier:投掷乘数:用来乘以对象被扔出时速度的量。在放大 CameraRig 来模拟能够把物体
扔的更远时是很有用的。
Create Rigid Body When Not Touching:如果勾选,当抓取按钮按下时,如果控制器没有碰到一个可交互
的对象,那么添加到控制器上的刚体就允许控制器去推动周围其他的刚体对象。
发出事件如下:
· ControllerGrabInteractableObject: 当有效对象被抓取时发出
· ControllerUngrabInteractableObject: 当有效对象从抓取到放开时发出
二、相关场景解析##
026_Controller_ForceHoldObject##
4、VRTK_InteractUse:使用可交互对象##
定义:交互使用脚本被 添加到[CameraRig] 预制里的控制器对象上,并且需要添加VRTK_interactTouch及 VRTK_ControllerEvents脚本用来监听使用和停止使用交互游戏对象的控制器按钮事件。它监听 AliasUseOn 和AliasUseOff 事件来确定对象合适应该被使用和停止使用。
控制器对象也需要添加VRTK_InteractTouch脚本来决定何时可交互对象被触碰。只有有效的触碰对象才能被使用。
如果控制器触碰到一个包含VRTK_InteractableObject 脚本且isUsable标志位设置为真,这个对象就能被使用。
5、VRTK_ObjectAutoGrab:自动抓取可交互对象##
定义:通过把VRTK_ObjectAutoGrab脚本加到控制器上并指定应该默认抓取的对象,来让特定控制器能自动抓取可交互对象。
自动抓取对象脚本添加到[CameraRig] 预制里的控制器对象上,控制器对象还需要添加VRTK_InteractGrab 脚本。