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

Unity XR Interaction Toolkit:持握物体时Hover检测失效求助

问题:Unity XR Interaction Toolkit握持物体时无法触发Hover事件

我在用Unity XR Interaction Toolkit开发VR小游戏时碰到一个问题:当手部握持带XR Grab Interactable组件的物体B后,再用这只手去Hover带XR Simple Interactable组件的物体A,无法触发A的Hover事件——未握持物体时,Hover A能正常触发材质切换效果,但握持B后完全没反应。

解决建议

  • 调整Interactor的交互层与优先级
    选中手部的XR Ray Interactor/XR Direct Interactor组件,确认Interaction Layer Mask同时包含物体A和B所在的交互层。另外可以提高该Interactor的Interactor Priority值,确保握持操作不会完全抢占Hover检测的资源。

  • 修改XR Grab Interactable的交互保留设置
    打开物体B的XR Grab Interactable组件,查找并开启Allow Hover While Grabbing选项(部分版本在组件的Interaction Settings折叠面板下),让手部在握持B时仍然能检测其他物体的Hover事件。同时检查Keep Selected On Disable,确保握持状态下Interactor的检测逻辑不被中断。

  • 自定义Hover检测逻辑
    如果内置设置无效,可通过脚本补充检测:

    1. 给物体A添加碰撞器并勾选Is Trigger,手部也添加对应的碰撞器;
    2. 在A上挂载脚本,通过OnTriggerEnter/OnTriggerExit检测手部进入/离开,手动调用材质切换逻辑:
    public class CustomHoverHandler : MonoBehaviour
    {
        public Material hoverMaterial;
        private Material defaultMaterial;
        private Renderer rend;
    
        void Start()
        {
            rend = GetComponent<Renderer>();
            defaultMaterial = rend.material;
        }
    
        void OnTriggerEnter(Collider other)
        {
            if (other.CompareTag("Hand")) // 手部标签需提前设置
            {
                rend.material = hoverMaterial;
            }
        }
    
        void OnTriggerExit(Collider other)
        {
            if (other.CompareTag("Hand"))
            {
                rend.material = defaultMaterial;
            }
        }
    }
    
  • 检查XR Interaction Manager全局配置
    打开场景中的XR Interaction Manager,在Interaction Settings里将Hover Mode设置为Allow Multiple,允许单个Interactor同时触发多个物体的Hover事件,避免握持操作屏蔽其他检测。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:06:33