HTC VIVE

Steam VR Unity VRTK Examples 3 物

2017-02-22  本文已影响60人  壹米玖坤

006_Controller_UsingADoor 使用控制器开关门

该场景中放置了两个可交互对象——“门”。把控制器放到门前,按下控制器上面的Trigger键可以实现与门的交互。如果门是开着的话,它会关上,反之亦然。

usingdoors

下面详细的看一下这是怎么实现的。这个场景中相机的起始位置在两扇门中间的位置,需要走几步就能到达门前面,门的Collider比它的mesh要大一些,是为了交互方便。该场景中没有“传送(Teleport)”功能,读者可以自己添加,记不起来怎么做的话,翻翻前面的笔记好了。场景中的简易Door对象是个Cube做的,在Hierarchy中是这样子的:

DoorObject

Door对象具有Box Collider,Rigidbody和Openable_Door三个组件,我们要详细看Openable_Door:

Openable_Door

Openable_Door继承自VRTK_InteractableObject,上篇笔记详细介绍过该脚本的触碰与抓取功能,这次来看下Use功能是怎样的。

Use

这个术语听起来还是有点奇怪,仔细想想也合理。当你触碰或者抓住一个物体的时候,想使用该物体进行一些相关的操作时,就必须加一个动作。举个例子,你拿了一把手枪在手里,想发射一下子弹,就需要Use;你拿了个录像机,想要开始录像了,也需要Use。在本例中,控制器已经碰触到门了,想要把门打开,可以点击Trigger按键使用Use操作把门打开。

想要实现Use操作,需要以下几步:

控制器对象绑定VRTK_ControllerEvents脚本来监听控制器按钮的事件,是关于use和停止use的事件,即AliasUseOn和AliasUseOff,用来确定何时应该use以及停止use。

控制器对象需要绑定VRTK_InteractTouch脚本,用来确定可交互对象是不是被触碰着,只有有效触碰的物体可以被use。

可交互物体必须绑定VRTK_InteractableObject脚本,并且isUsable变量要设置为true。

VRTK_InteractUse脚本

Hide Controller On Use: 当use动作开始的时候,隐藏控制器模型。

Hide Controller Delay: 隐藏控制器模型之前的等待时间。

VRTK_InteractableObject脚本

下面是Use部分的参数:

useoptions

Is Usable: 决定物体是否可以使用。

Use Only If Grabbed: 如果选中的话,只有抓住的物体可以使用。

Hold Button To Use: 如果选中的话,需要一直按住use按键才能使用;没有选中的话,use按键是toggle的形式,按一次use,再按一次停止use。

Use Override Button: 可以指定一个按键,use这个特定的可交互物体。

Pointer Activates Use Action: 如果选中的话,当控制器中发出的World指针光束与该物体相交的时候,可以将会运行Using方法。还取决于Hold Button To Use属性。如果该物体Hold Button To Use属性没选中的话,必须释放指针按键才算use。如果Hold Button To Use选中的话,指针按键一直按住也算是use,比如光束划过物体的时候。

Rumble On Use: 设置物体被use时的触觉反馈。Strength指的是震动强度,Duration指的是时间长度。

-Allowed Use Controllers: 决定哪个控制器可以进行use动作。

Hide Controller On Use: 可以覆盖控制器上面的设置。

Openable_Door脚本

该脚本继承自继承自VRTK_InteractableObject,对外暴露了flipped和rotated两个属性。重写了StartUsing方法,用来控制门的开关状态和旋转方向。场景中放了两个门,只有一个属性上不同,即flipped。具体效果可以试一下,门1是只能往一个方向开;门2是朝向相机的另外一侧开门。代码中有相关的计算,仅供参考。:)

参考:

https://vrtoolkit.readme.io/

上一篇下一篇

猜你喜欢

热点阅读