找回密码
 立即注册
查看: 220|回复: 0

Unity VR Hand 实现

[复制链接]
发表于 2022-10-26 10:49 | 显示全部楼层 |阅读模式
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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-21 19:39 , Processed in 0.092739 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表