You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中使用自定义手部模型适配XR Hands时骨骼匹配报错求助

自定义VR手部模型适配XR Hands插件的问题与解决方案

问题背景

正在开发支持Meta Quest 2与PCVR平台的VR游戏,需求是为不同角色配置多款自定义手部模型,并适配Quest 2的手部追踪功能,理想实现方案:

  • 一套命名规范的骨骼结构,如palm、thumbLower等;
  • 为骨骼创建relaxed、fist等动画;
  • 通过脚本判断手部追踪状态:开启时用追踪数据驱动骨骼,否则通过控制器按键切换动画。

当前使用版本为2.3.0的XR Interaction Toolkit和1.1.0的XR Hands插件,在Blender中修改手部模型的流程:

  1. 导入Asset Store的手部模型GlovesHandRight与XR Hands自带的RightHand.fbx;
  2. 删除GlovesHandRight的骨骼与RightHand的网格,将RightHand的骨骼对齐GlovesHandRight网格;
  3. 为网格添加自动权重蒙皮,在Blender中可正常变形。

但将导出的FBX替换原模型后,HandVisualizer脚本抛出如下错误:

Hand transform hierarchy not set correctly - couldn't find Wrist joint!
Hand transform hierarchy not set correctly - couldn't find ThumbMetacarpal joint!
Hand transform hierarchy not set correctly - couldn't find IndexMetacarpal joint!
Hand transform hierarchy not set correctly - couldn't find MiddleMetacarpal joint!
Hand transform hierarchy not set correctly - couldn't find RingMetacarpal joint!
Hand transform hierarchy not set correctly - couldn't find LittleMetacarpal joint!
all at
UnityEngine.XR.Hands.Samples.VisualizerSample.HandVisualizer:Update () (at Assets/Samples/XR Hands/1.1.0/HandVisualizer/Scripts/HandVisualizer.cs:144)

报错原因分析

  1. 骨骼命名/层级不匹配:HandVisualizer脚本依赖XR Hands定义的固定骨骼命名与层级结构,你导出的FBX中骨骼名称(比如用了palm而非插件要求的Wrist)或父子层级关系不符合插件预期,导致脚本无法找到对应关节。
  2. Blender导出设置问题:导出FBX时,可能默认修改了骨骼名称(比如添加自动前缀)、未正确保留骨骼层级,或应用了不必要的变换,导致导入Unity后骨骼结构错乱。
  3. 模型替换流程问题:替换原模型时,未确保新模型的骨骼节点路径与HandVisualizer脚本绑定的路径完全一致。

Blender端修正步骤

  1. 复刻XR Hands骨骼命名
    • 在Blender中打开XR Hands自带的RightHand.fbx,查看每个骨骼的精确名称(如Wrist、ThumbMetacarpal等,注意大小写敏感);
    • 将你对齐后的自定义骨骼名称完全改成和XR Hands自带骨骼一致。
  2. 同步骨骼层级结构
    • 检查并调整骨骼的父子关系,确保和XR Hands自带骨骼的层级完全一致(比如ThumbMetacarpal必须是Wrist的子节点,ThumbProximal是ThumbMetacarpal的子节点)。
  3. 正确配置FBX导出
    • 选中修改好的骨骼与网格,打开FBX导出面板:
      • 勾选「仅选中对象」,避免导出无关内容;
      • 取消勾选「应用变换」,防止骨骼位置偏移;
      • 在「骨骼」选项中,勾选「骨骼」与「蒙皮权重」,确保完整导出绑定数据;
      • 骨骼名称空间设置为None,避免自动添加前缀。
  4. Unity端验证
    • 导入FBX后,在Inspector面板展开骨骼层级,确认每个骨骼的名称、父子关系与XR Hands自带模型完全一致;
    • 替换原模型时,重新绑定HandVisualizer脚本的骨骼引用,或直接替换模型的Mesh组件(保留原有骨骼对象)。

替代实现思路

  1. 使用XR Hands骨骼映射功能
    • 在Unity中打开XR Hands的设置面板,找到骨骼映射选项,手动将自定义模型的骨骼与XR Hands的标准关节(如XRHandJointID.Wrist)一一绑定,无需修改Blender中的骨骼名称。
  2. Humanoid骨骼重定向
    • 将自定义手部模型设置为Humanoid骨骼类型,在Unity的Avatar配置中映射到标准Humanoid骨骼,再通过XR Hands的Humanoid适配工具关联到VR手部关节数据。
  3. 自定义驱动脚本
    • 放弃使用HandVisualizer示例脚本,编写自定义脚本:
      • 通过XRHandSubsystem监听手部追踪数据;
      • 遍历XRHandJointID获取每个关节的位置与旋转;
      • 直接将数据赋值给自定义骨骼对应的Transform组件,实现完全自定义的骨骼驱动逻辑。

内容的提问来源于stack exchange,提问作者Samwise

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 20:45:09