Unity(Oculus Quest 2) OVRHandPrefab手部动画不显示无动作问题求助
Oculus 手部模型显示/动画问题解决方案
一、OVRHandPrefab 不显示排查步骤
- 先确认 Oculus Integration SDK 版本适配性:Unity 2020.3.18f1 优先搭配 v34~v39 版本的 Oculus SDK 使用,高于 v40 的 SDK 对 2020 长期支持版存在兼容性缺陷,会直接导致手部网格不渲染
- 检查 OVRHandPrefab 组件配置:确认
OVRHand组件的 Hand Model Type 字段未设置为None,默认选择Synthetic即可;同时检查Mesh Renderer组件未被禁用,绑定的材质球没有丢失 - 检查节点挂载位置:两个 OVRHandPrefab 必须分别挂载到
OVRCameraRig > TrackingSpace > LeftHandAnchor和OVRCameraRig > TrackingSpace > RightHandAnchor子节点下,不能直接放在 TrackingSpace 根目录 - 确认追踪源优先级:在 Oculus 客户端/Quest 设备设置中,将「手部追踪优先级」设置为「控制器优先」,避免控制器和纯手部追踪的源冲突导致模型被强制隐藏
二、OVRCustomHandPrefab 无动画解决方案
OVRCustomHandPrefab 本身不支持开箱即用的控制器输入动画,可选择以下两种方案实现:
方案1:使用官方控制器手部预设(推荐,开箱即用)
直接替换原有自定义预设即可:
- 删除当前挂载的 OVRCustomHandPrefab 实例
- 从 Oculus SDK 资源目录中找到
OVRControllerHands_L和OVRControllerHands_R预设,分别挂载到对应左右手的 Anchor 节点下 - 将 OVRCameraRig 的 Hand Tracking Support 字段设置为
Controllers Only或Controllers And Hands,运行即可看到扳机、握持键、功能按键对应的默认手部动画
方案2:手动绑定自定义手部动画
如果需要保留自定义手部模型,按以下步骤操作:
- 给 OVRCustomHandPrefab 添加
OVRHand组件,勾选 Update Root Pose 和 Enable Skeleton Updates 选项 - 添加
Animator组件,使用官方自带的CustomHandAnim状态机作为动画控制器 - 编写输入监听脚本绑定动画参数,示例代码如下:
using UnityEngine; using OVRInput; public class HandAnimController : MonoBehaviour { public Controller targetController; private Animator _handAnim; void Start() { _handAnim = GetComponent<Animator>(); } void Update() { // 绑定扳机键动画参数 float triggerVal = Get(Axis1D.PrimaryIndexTrigger, targetController); _handAnim.SetFloat("Trigger", triggerVal); // 绑定握持键动画参数 float gripVal = Get(Axis1D.PrimaryHandTrigger, targetController); _handAnim.SetFloat("Grip", gripVal); } }
- 左手实例的
targetController字段设置为Controller.LTouch,右手设置为Controller.RTouch即可
三、功能验证注意事项
- 测试时优先使用 Oculus Link 串流模式运行,不要仅依赖 Unity 编辑器的模拟模式,模拟模式不会加载完整的控制器/手部追踪逻辑
- 打包到 Quest 端时,确认 XR 插件管理中已启用 Oculus 插件,同时在 Quest 特性设置中勾选了 Hand Tracking 支持
内容的提问来源于stack exchange,提问作者Locksleyu
相关产品推荐
相关产品推荐

