VRTK - 2.场景物体的交互:触碰,抓取,使用


  VRTK交互小笔记,VR场景中的交互设置分为两块,手柄设置和交互物体设置。

一、手柄的设置
触碰(VRTK_InteractTouch):

通过VRTK_InteractTouch脚本来控制,挂载了这个脚本后,手柄能够检测出何时碰到了场景中可触碰物体(挂载了VRTK_InteractableObject脚本)

抓取(VRTK_InteractGrab):

需要依赖于VRTK_ControllerEvents和VRTK_InteractTouch这两个脚本,VRTK_InteractGrab用于监听手柄的按键事件从而得知抓取或者放下交互物体,所以需要VRTK_ControllerEvents;
而只有在触碰了之后才能够被抓取到,所以需要通过VRTK_InteractTouch确定是否有触碰到可抓取物体,只有有效的触摸物体可以被抓住(挂载了VRTK_InteractableObject脚本,并且isGrabbable勾选)。

使用(VRTK_InteractUse):

需要依赖于VRTK_ControllerEvents,VRTK_InteractTouch和VRTK_InteractGrab这三个脚本

当手柄挂载了这四个脚本之后,就可以正常使用了:

VRTK - 2.场景物体的交互:触碰,抓取,使用_第1张图片
Controller.png
二、交互物体的设置

在场景中需要交互的物体上挂载VRTK_InteractableObject脚本组件,挂载后可以用来被触碰,抓取和使用:

1.触碰

可以设置的参数如下:


VRTK - 2.场景物体的交互:触碰,抓取,使用_第2张图片
Touch.png
2.抓取

抓取的设置参数如下:


VRTK - 2.场景物体的交互:触碰,抓取,使用_第3张图片
Grab.png

对于抓取的操作,VRTK定义了两种:物体的触碰抓取方式和抓取到物体后物体可以进行的操作:

触碰抓取方式

可以在VRTK中的Scripts/Interactions文件夹中找到:


VRTK - 2.场景物体的交互:触碰,抓取,使用_第4张图片
AttachGrab.png

分别说明一下几个触碰抓取方式:
VRTK_BaseGrabAttach,VRTK_BaseJointGrabAttach
这两是所有抓取方式的抽象父类,下面几个抓取方式分别继承与这两个;

VRTK_ChildOfControllerGrabAttach

继承于VRTK_BaseGrabAttach,使用这种触碰抓取方式的物体当被抓取时会自动的成为手柄的子对象,使物体自然的跟随手柄移动和旋转。

VRTK_ClimbableGrabAttach

继承于VRTK_BaseGrabAttach,使用这种触碰抓取方式的物体会被标记为一个可攀爬的交互对象;

VRTK_CustomJointGrabAttach

继承于VRTK_BaseJointGrabAttach,可以在可交互物体上自定义一个抓取关节,运行时会把这个关节作为交互物体的子对象。

VRTK_FixedJointGrabAttach

继承于VRTK_BaseJointGrabAttach,抓取时,在手柄和抓取物体之间建立一个Fixed Joint来连接

VRTK_RotatorTrackGrabAttach

继承于VRTK_TrackObjectGrabAttach,这种抓取方式是给物体施加一个控制器方向的力让它旋转,适用于门或者车轮等物体;

VRTK_SpringJointGrabAttach

在手柄和抓取物体之间创建一个Spring Joint来连接;

VRTK_TrackObjectGrabAttach

继承于VRTK_BaseGrabAttach,这种抓取方式物体只是跟随手柄方向进行移动,当碰到其他刚体时,超过限制就会掉落。

抓取后的操作方式:
如下图所示,


VRTK - 2.场景物体的交互:触碰,抓取,使用_第5张图片
GrabAction.png

分别说明一下几种操作方式:

VRTK_BaseGrabAction

同样的这个也是所有抓取后操作的抽象父类。

VRTK_AxisScaleGrabAction

在物体被另外一个手柄抓取时,能够控制物体的缩放。

VRTK_ControlDirectionGrabAction

允许物体在被另外一个手柄抓取时控制物体的旋转方向;

VRTK_SwapControllerGrabAction

允许抓取的物体在两个手柄之间交换

3.使用
VRTK - 2.场景物体的交互:触碰,抓取,使用_第6张图片
Use.png

当物体勾选上Is Usable后,说明物体可以被使用啦,需要使用到自定义的使用方法时要继承VRTK_InteractableObject,然后在重写其中的StartUsing方法即可:

VRTK - 2.场景物体的交互:触碰,抓取,使用_第7张图片
StartUsing.png

你可能感兴趣的:(VRTK - 2.场景物体的交互:触碰,抓取,使用)