HTC Vive+Unity开发实现手柄旋转物体(VRTK版)
发表于2018-07-22
本篇文章和大家介绍的是在使用unity引擎针对HTC Vive开发时,实现手柄旋转物体的方法,其核心就是使用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.
也就是说把该脚本挂在一个物体上,就可以用手柄旋转这个物体,旋转的方向可自定。

Direction:设置绕哪个轴旋转
Min和Max:是转一圈的范围
Step Size:每次转的步数
在场景中新建一个cube并添加碰撞盒,然后挂上该脚本,设置Direction等参数,运行后就可以用手柄转这个物体了。
然后我将这个脚本挂到了自己的模型的一个小零件上,是一个圆台形状的物体,运行时发现旋转的很诡异,好像是绕着一个别的地方旋转的,而不是模型中心。
于是分析一下VRTK_Knob
这个脚本在运行时为圆台物体添加了如下组件:

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

参照unity圣典的解释:

Anchor:关节中心点,所有的物理模拟都使用此点作为中心进行计算。
运行时发现Anchor的Y的数值为6.737404,问题就在这里。
运行时打开since试图,查看圆台物体,发现在圆台物体的底下有一个小小的坐标轴,一开始我都没看见= =

换个角度看:

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

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


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

关于旋转圈数等的限制可以在ConfigurableJoint中设置。
来自:https://blog.csdn.net/wwanrong/article/details/56494839