You need to enable JavaScript to run this app. 在Unity中使用MRTK时如何检测抓取物体的是左手还是右手?
优惠活动
大模型
产品
解决方案
定价
更多

在Unity中使用MRTK时如何检测抓取物体的是左手还是右手?

实现方案

你可以直接通过ObjectManipulator自带的操作事件获取抓取手部信息,无需额外实现复杂的手部跟踪逻辑,具体操作如下:

  • 在挂载了ObjectManipulator和NearInteractionGrabbable的游戏物体上新建脚本,例如命名为GrabHandIdentifier
  • 脚本内注册ObjectManipulator的抓取相关事件回调,从回调参数中直接提取手部类型信息

示例代码

using UnityEngine;
using Microsoft.MixedReality.Toolkit.Input;
using Microsoft.MixedReality.Toolkit.UI;

public class GrabHandIdentifier : MonoBehaviour
{
    private ObjectManipulator _objectManipulator;

    private void Awake()
    {
        _objectManipulator = GetComponent<ObjectManipulator>();
    }

    private void OnEnable()
    {
        // 注册抓取开始事件,需要监听抓取结束可以换成OnManipulationEnded
        _objectManipulator.OnManipulationStarted.AddListener(HandleGrabStart);
    }

    private void OnDisable()
    {
        // 注销事件避免内存泄漏
        _objectManipulator.OnManipulationStarted.RemoveListener(HandleGrabStart);
    }

    private void HandleGrabStart(ManipulationEventData eventData)
    {
        Handedness currentHand = eventData.Handedness;
        switch (currentHand)
        {
            case Handedness.Left:
                Debug.Log("左手触发抓取");
                // 补充左手抓取的自定义逻辑
                break;
            case Handedness.Right:
                Debug.Log("右手触发抓取");
                // 补充右手抓取的自定义逻辑
                break;
            case Handedness.None:
                Debug.Log("非手部输入触发操作");
                break;
        }
    }
}

补充说明

如果使用的是MRTK3版本,API存在小幅差异:ObjectManipulator的对应事件参数可以直接通过SelectingHand属性获取手部类型,整体逻辑和上述方案一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 18:15:06