[HTC Vive + Unity开发]——VRTK的研究——用手柄旋转物体(使用VRTK_Knob脚本)

使用VRTK包中的VRTK_Knob脚本~

该脚本的作用是:

Attaching the script to a game object willallow the user to interact with it as if it were a radial knob. The directioncan be freely set.

也就是说把该脚本挂在一个物体上,就可以用手柄旋转这个物体,旋转的方向可自定。

[HTC Vive + Unity开发]——VRTK的研究——用手柄旋转物体(使用VRTK_Knob脚本)_第1张图片

Direction:设置绕哪个轴旋转

Min和Max:是转一圈的范围

Step Size:每次转的步数


在场景中新建一个cube并添加碰撞盒,然后挂上该脚本,设置Direction等参数,运行后就可以用手柄转这个物体了。

 

—————————————————————————————————————————

 

然后我将这个脚本挂到了自己的模型的一个小零件上,是一个圆台形状的物体,运行时发现旋转的很诡异,好像是绕着一个别的地方旋转的,而不是模型中心。

 

于是分析一下VRTK_Knob

这个脚本在运行时为圆台物体添加了如下组件:


按照我的理解,大致意思是为圆台添加了一个物理属性ConfigurableJoint(可配置关节),然后Grab圆台,由于物理属性的限制,圆台会绕着一个轴运动。

 

这个轴不是物体的坐标中心,而是Configurable Joint中的Anchor。


参照unity圣典的解释:


Anchor:关节中心点,所有的物理模拟都使用此点作为中心进行计算。

运行时发现Anchor的Y的数值为6.737404,问题就在这里。

 

运行时打开since试图,查看圆台物体,发现在圆台物体的底下有一个小小的坐标轴,一开始我都没看见= =

[HTC Vive + Unity开发]——VRTK的研究——用手柄旋转物体(使用VRTK_Knob脚本)_第2张图片

换个角度看:

[HTC Vive + Unity开发]——VRTK的研究——用手柄旋转物体(使用VRTK_Knob脚本)_第3张图片

在运行中把Anchor的Y设置成0,如下


这时小轴和坐标轴就重合到了一起,旋转也就正常了。

[HTC Vive + Unity开发]——VRTK的研究——用手柄旋转物体(使用VRTK_Knob脚本)_第4张图片[HTC Vive + Unity开发]——VRTK的研究——用手柄旋转物体(使用VRTK_Knob脚本)_第5张图片

 

比较省事的解决方法是改一下圆台物体的坐标轴,让它绕着Y旋转就可以了,或者自己加一个ConfigurableJoint组件而不是让脚本去加。

[HTC Vive + Unity开发]——VRTK的研究——用手柄旋转物体(使用VRTK_Knob脚本)_第6张图片

关于旋转圈数等的限制可以在ConfigurableJoint中设置。


你可能感兴趣的:(HTC,Vive,unity,htc)