Skeleton是Steam VR 2.0中,用来描述手部模型各个关节信息的,呃,可以说是数据类型。它会根据用户的设置,在抓取物体时,使手的模型,更加贴合待抓取物,增加沉浸感。
这是我制作的一个抓取球体的手势
我们可以利用skeleton pose来为每一个可抓取物,制作专属的抓取手势
以下是Steam VR的官方教程
https://valvesoftware.github.io/steamvr_unity_plugin/tutorials/Skeleton-Poser.html
首先我们先创建一个空场景,并拖入VR预制体Player
然后随便拿一个模型,用来做测试(这里我拽了一根外星人的手指头来做测试)
首先为其添加组件。Interactable,和Throwable,并为自动生成的刚体,取消Gravity然后勾选Is Kinematic取消物理运算(这是为了测试抓取动作,以至于物体不会总掉到地上,或者手模型碰一下就飘走了)
然后为你的模型添加Collider碰撞器,这里我添加了MeshCollider 并勾选了Convex
此时运行程序,碰触物体有高亮,并且已经可以抓取物体,
下面为你的模型,添加SteamVR_Skeleton_Poser组件
使用Create创建一个Poser
添加后,默认会显示右手的模型。
可以在上图看见右侧Right Hand部分,下面的Show Right Preview已经勾选
在你的模型下,也会生成一个手部模型的克隆体
我们手动拉动这个生成的克隆体的骨骼,调节其骨骼位置到我们想要的位置即可(直接拉动其骨骼关节,旋转调节即可)
当调节满意后,勾选Show Left Preview,此时左手也会显示处理
点击Copy Right Pose To Left Hand,将右手已经做好的手势,Copy给左手
然后点击Save Pose
开始运行前,别忘了将,外星人手指头上挂取的Interactable上,取消勾选Hide Hand On Attach
运行即可查看效果,使用Grib或Trigger都可以抓取
例如
使用Grib实现抓握的手势
使用Trigger按键实现捏的手势
要实现多个手势,首先需要在PoserEditor中添加对应的手势
下面先创建一个“捏”的手势
然后编辑手势,如下
接下来在Blending Editor中点击加号,添加事件
设置参数如下
选择Pose为PoserEditer中的Main手势,即“握住”手势
下面Type为Action的类型,我们选择Boolean
然后可以在下面Action_bool中,选择要绑定此手势的Action,这里我选择Grib
接下来再次点击添加
为Trigger按键设置参数
其最下方的Smoothong Speed参数为,状态切换时,平滑的参数,值越大,切换状态越快,默认0为瞬间切换
运行后可看见,
按Trigger键,手势为捏,
按Grib键,手势为握
并且二者切换时有一个简单的平滑过渡
多个行为的混合使用,可是创建非常酷的效果
例如可以实现类似Grab握住手枪,再按Trigger可以扣动扳机。
实现上图的效果
基于上面的手指,我们复制一个finger2,作为本例使用的手指
抓取动作直接使用原来的
再创建一个(复制AlienFingerPose,再在其基础上调节,以保证位置不变),食指伸开的抓握手势,命名为AlienFingerPose_OneFingerOut,作为本次的Main手势
如下
需要注意的是,AlienFingerPose_OneFingerOut和AlienFingerPose,只是食指的动作不一样
然后再Blending Editor中做如下设置
需要注意的是,我们此次的Grab键绑定的是OneFingerOut手势,作为默认手势
在下面,开启了UserMask并只留食指
更改Type为Analog Action
然后选择Actin为Squeeze,此手势,是一个0-1的值,可以获取Trigger按下的程度
并且将其Smoothing Speed设置为0
另一种设置方式:
下方的Type若选择Boolean的话,给Smoothing Speed设置一个合适的值(10-30)也可以实现以上效果
-