在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
相关产品推荐
相关产品推荐

