【部分原创】基于VRTK 的 Unity HTC Vive模型拼接 (组件的抓取交互)

在 VR虚拟场景中,设想做一个三维物体的展示功能,通过手柄的交互,抓取物体中的一部分,可以各个角度观察。

方便在项目展示模块中,模型等资源的展示。

VRTK插件中,提供了VRTK_InteractGrab和VRTK_InteractableObject。

当需要物体和手柄进行交互的时候,会使用到该脚本,要将VRTK_InteractableObject脚本绑定到交互的物体上;Interact Grab脚本绑定在【CameraRig】下的手柄游戏对象上,并且手柄游戏对象必须绑定VRTK_ControllerEvents脚本,来监听手柄上按钮的事件,抓取/释放可交互物体等。它监听的是AliasGrabOn和AliasGrabOff事件,当这两个事件被触发,那么本脚本内委托给这两个事件的方法就会被回调

【部分原创】基于VRTK 的 Unity HTC Vive模型拼接 (组件的抓取交互)_第1张图片

(手柄上的一系列常用的插件脚本)

VRTK_InteractableObject属性:

【部分原创】基于VRTK 的 Unity HTC Vive模型拼接 (组件的抓取交互)_第2张图片

Touch Options:触摸交互
Highlight On Touch:如果勾选,这个对象在控制器触摸它时就会高亮。
Touch Highlight Color:对象被触摸时高亮的颜色。
Rumble On Touch:控制器触碰对象时触发振动反馈,x表明时长,y表明震动强度。(x和y将来会被自定义编辑器代替)。
Allowed Touch Controllers:允许交互的手柄,Both表示允许两个手柄任一个交互。
Hide Controller On Touch: 是否覆盖手柄相关设置 (触碰物体时隐藏手柄)。也可以选择总是隐藏或总是不隐藏。

Is Grabbale:决定对象是否能被抓握。

【部分原创】基于VRTK 的 Unity HTC Vive模型拼接 (组件的抓取交互)_第3张图片

Is Droppable: 决定对象在被控制器抓握后能否被放下。如果没有勾选,一旦用控制器按钮拾起了物品就不能放下了。但是如果抓握的机制是关节(Fixed_Joint)的 话,当对象受力足够大之后关节断开,物品也就被放下了。所以最好使用控制器子物体的抓握机制(Child_Of_Controller)来防止这种情况。
Is Swappable: 物体是否可以在两个手柄之间传递。如果未勾选此项,那么物体被另一个手柄抓取之前必须先从当前手柄上放下。
Hold Button To Grab: 如果此项被勾选,那么要一直按着按钮才能保持物体抓取,松开按钮物体会掉落。如果未勾选此项那么按一下抓取按钮物体会被抓取且在按第二下之前它不会掉落。
Rumble On Grab: 当手柄抓取物体时震动反馈,x表示持续时间, y表示脉冲强度。 (在编辑器里可以修改其值)。
Allowed Grab Controllers: 决定哪个手柄可以抓取物体。可以选择两个手柄都可以或某一个可以。
Precision_Snap: 如果此项勾选那么当手柄抓取物体的时候, 它会在手柄触碰点精确地抓取物体。物体被抓取后与手柄触碰物体时两者的相对位置保持一致,不勾选时,物体的中心会与指定连接点重合
Hide Controller On Touch: 是否覆盖手柄相关设置 (触碰物体时隐藏手柄)。也可以选择总是隐藏或总是不隐藏。
Grab Attach Mesh:这决定了抓取的物品在被抓取时怎样被添加到控制器上。
 Fixed Joint(固定关节)用一个固定的关节把对象附加到控制器上,意味着附加对象以完全1:1的方式追踪控制器的位置和旋转。
 Spring Joint(弹性关节)用一个弹性关节把对象添加到控制器上,意味着物体和控制器之间有一些弹性,弹力驱动物体。在想要牵引一个物体而不是直接把物体对齐到控制器上是很有效的。就感觉物体有运动阻力一般。
 Track Object (追踪对象)不是通过关节来把对象附加到控制器上,而是确保对象追踪控制器的方向,这适用于铰链式关节。
 Child Of Controller (控制器子物体)简单地让对象成为抓取控制器的子物体,所以自然地追踪了控制器运动位置。
Detach Threshold(分离阈值): 当对象从被抓取的控制器分离时的力值。如果控制器试着施加一个高于这个阈值的力到对象上(从另一个对象上拉它或者推它到另一个对象),然后保持对象到抓取控制器的关节就将断开并且对象将不能再被抓起了。这在Tracked Object抓取机制下也有效,只是这个 值确定断开抓取钱控制器可以离对象多远。
Throw Muliplier(投掷倍数):值用来乘以给定对象被扔出时的速度值。这还可以被用来连同Interact Grab脚本的Throw Multiplier来让对象被扔的比平常更远(或者输入的值小于1就扔的很近)。

Is Usable(是否可用):决定对象是否可以被使用。

【部分原创】基于VRTK 的 Unity HTC Vive模型拼接 (组件的抓取交互)_第4张图片

【部分原创】基于VRTK 的 Unity HTC Vive模型拼接 (组件的抓取交互)_第5张图片

将需要交互的物体,按照功能拆分成不同的gameobject组,分别添加相应大小形状的collider。设置isTrigger,给每部分添加VRTK_InteractableObject,调整设置。

【部分原创】基于VRTK 的 Unity HTC Vive模型拼接 (组件的抓取交互)_第6张图片

参考 https://blog.csdn.net/alayeshi/article/details/78850210  VRTK交互脚本解析

你可能感兴趣的:(HTCVive,Unity3D)