Doris232 发表于 2022-10-26 10:49

Unity VR Hand 实现

Device Based Rig

在这篇 Unity + Oculus Quest 之十 Device Based Rig explained 中对 Device Based Rig 去魅, 原来自己组装一套 Device Based Rig 也能 work,重要的是添加对应的部件和脚本以实现对应的功能:
Device Based Rig= VR Camera + Left VR Controller + Right VR Controller
VR Grab Interactor + Interactable

其次在这篇 Unity XR Interaction Toolkit 如何获取 controller 位置 写到了如何在脚本使用 InputDevice 来初始化 controller,使用 Common Usage 来获取 Controller 的位置和旋转.
这某种程度上也对 VR Grab Interactor 和 Interactable 去魅了,感觉 VR 中抓取物体的几步:

[*]判断是否碰到物体 : collider 可实现
[*]抓取物体 : 物体的位置跟着 controller 走
VR Hand

同时通过 Device Based Rig 我们也知道比如给 Controller 添加child component sphere 就可以看到作为 sphere的 controller,现在我们来去魅一下 Oculus Integration,Oculus Integration 可以实现展示 controller 为手, 同时按钮会有动画产生。
这里我们来一个一个的分析:
的形象

如同给 Controller 添加一个child sphere 可以展示 controller 为 sphere,这里无非是使用了长得像手的 prefab,我们可以通过很多种不同的方式来做到添加这个 prefab:

[*]XR Controller Script 最下边有 Model Prefab,可以拖拽 prefab 到这里
[*]代码添加,两小步:代码找到 prefab, 同样在代码中有了作为 InputDevice 的 controller, 通过 Unity 中的 Parent child relationship 添加把 prefab 添加到 controller
[*]手动拖拽 : 直接把 LeftHand 和 RightHand 的 prefab 放到 controller 下面
至于怎么得到这个 prefab 呢?可以在网上找到比如 CustomHandsAsset.unitypackage,这样的一个 package 里面就包含了lef/right hand prefab,当然这个 package 里还有别的我们即将用上的。
或者自己也可以组装这样的 ,用最基本的 球+圆柱,参见 leap Creating Your Own Hand Prefabs:



的动作

按下按钮,要有动画,需要用到的是 Animator Controller,这一切也可以自己动手来做,但是如果是上面的 package 的话,其实如果我们导入的时候就有一个 Animation 的文件夹,并且如果我们点开 prefab 看的 inspector ,它上面有 Animator component,并且有一些可以设置的选项。
实际上我们也可以自己创建:

[*]create animtor
[*]添加对应的 parameter
[*]创建 blend tree
[*]在 blend tree 把 parameter 和对应的 animation 对应起来
如果是自己组件的 hand prefab 也可以尝试自己做对应的动画组件。
如果 animator component 已经有的话,那么就很简单,直接用类似如下的代码就能实现:
if (controller.TryGetFeatureValue(CommonUsages.trigger, out float triggerValue))
{
    animator.SetFloat("Trigger", rightTriggerValue);
}
其实这里的 blend 就是 blend skining 的那个 blend 的意思,有点 lerp 的那个意味(毕竟 blend 有调配的意思), 所以 blender 也是取的这个 blend 意思(?)
这样就可以做到 按键的时候有动画,并且因为 hand prefab 是 controller 的 child object,就能做到跟随 controller 的位置和旋转:



参考:

[*]Introduction to VR in Unity - PART 1 : VR SETUP
[*]Introduction to VR in Unity - PART 2 : INPUT and HAND PRESENCE
页: [1]
查看完整版本: Unity VR Hand 实现