【问题标题】:Unity Leap Motion Detecting Finger collision with other fingers/palmUnity Leap Motion 检测手指与其他手指/手掌的碰撞
【发布时间】:2017-12-13 02:02:54
【问题描述】:

我是使用 Unity 和 Leap 运动的新手。

我从 Unity Asset Pack 桌面演示中复制了 HandModels 和 LeapHandController。

当拇指骨 3 与手的任何其他部分碰撞时,我试图激活一个函数来实例化一个对象,我通过创建一个带有 OnCollisionEnter 函数的简单脚本并将其附加到拇指的 Bone3 来做到这一点但是当拇指与它是孩子的​​手/手指的任何其他部分碰撞时,它似乎没有激活。如果我在场景中添加一个立方体并给它一个刚体,它将成功触发拇指的onCollisionEnter(通过打印语句显示),但它不会触发oncollisionEnter 与手模型中的任何兄弟姐妹。

我不确定使用 Leap Motion 和 Unity 检测手指与其他对象碰撞的标准方法是怎样的,但它似乎不遵循标准的 Unity 碰撞系统。我应该用另一种方法来检测它吗?如果我能检测到手子骨骼的碰撞会很有帮助,但现在看来我必须手动向手发出子骨骼碰撞的信号。

【问题讨论】:

  • @Hellium 这些不是最新的,Leap API 在上个月发生了变化,它有一些非常重要的新功能
  • @Hellium 这些链接都没有回答提问者的问题,甚至没有讨论尝试做提问者想做的事情。提问者正在尝试检测手与自身的碰撞,例如,同一只手上的一根手指与另一根手指的碰撞。

标签: unity3d unity5 leap-motion


【解决方案1】:

如果您从桌面演示中复制了 HandModels,那么您正在使用的物理手可能是 RigidRoundHand - 您可以通过检查 HandModels 对象下方的对象来确认这一点。

如果确实是 RigidRoundHand,或者使用 RigidHand 脚本来生成手的碰撞器,那么您观察到的问题来自 手都是一个刚体,所以您没有看到 OnCollisionEnter 的原因是刚体在与自身“碰撞”时没有收到 OnCollisionEnter。

要完成你想要做的事情,而不是依赖手的默认碰撞器,你应该将特定的 Rigidbody + Collider 对象(例如默认的 Unity Cube)放在你想要的手的特定位置喜欢检测碰撞。我建议使用最近版本中提供的Attachment Hands 来执行此操作:它可以让您轻松地将单个刚体放置在手的特定关节上,例如拇指尖,以及您的其他位置正在尝试碰撞。

确保您使用的是 the latest version of the Leap Motion Unity SDK,然后查看资产文件夹中 LeapMotion/Core/Examples/Attachment Hands/ 中的示例场景。确保在 Attachment Hand 的拇指下有一个 Kinematic Rigidbody Collider(一个 SphereCollider 是一个不错的选择),并添加一些脚本,例如:

public class ThumbCollisionDetector : MonoBehaviour {
  void OnCollisionEnter(Collision c) {
    if (c.gameObject.GetComponent<MiddleFingerIdentifier>() != null) {
      Debug.Log("The thumb collided with the middle finger identifier!");
    }
  }
}

在上面的示例中,我们正在寻找碰撞中的“MiddleFingertipIdentifier”脚本,因此我们需要确保有一个带有运动学刚体和碰撞器的对象附加(通过 Attachment Hands ) 到中指的尖骨——标识符脚本甚至不需要包含任何内容,它只需要在那里:

public class MiddleFingertipIdentifier : MonoBehaviour { }

该逻辑应该让您开始检测内部手交叉点。

【讨论】:

  • 感谢您的建议,这很有帮助。我现在唯一遇到的问题是 AttachementHand 示例使手变得怪异且有缺陷。使用我正在使用的 RigidRoundHand 示例(您猜对了),它可以很好地渲染双手,并且不会突然跳跃/出现故障。但在附件手中,它似乎到处乱跳,不像 RigidRoundHands(Desktop) 示例那样平滑和精确。
  • 我从leap控制器上移除了相机组件,并将一个新相机连接到手上并稍微偏移了一点,然后我从leap头戴式装备中移除了小时候的AttachemenHands并将其放在一起然后抬起关于跳跃控制器的手,它似乎有很大帮助。
  • 很好奇...不幸的是,在没有更详细的设置图片的情况下,我可能无法调试您所描述的内容。如果您有一个 RigidRoundHands 渲染“正确”的场景,您应该尝试在 Attachment Hands 场景中看到的相同位置添加一个 Attachment Hands 脚本。然后,您可以使用它的检查器为您有兴趣使用的连接点添加变换(例如拇指提示)。它使用与所有其他组件相同的手部数据,因此它应该在您的其他场景中仍然“正常工作”。
  • 啊,请注意附件手演示是为 VR 设计的,所以如果您在桌面环境中使用它,它可能看起来很奇怪。如果您打算在桌面上使用 Leap Motion,则不应使用 LHeadMountedRig。
  • 您是否碰巧知道父母检测其孩子碰撞的方法。我相信,如果手部检测两个特定手指是否发生碰撞,而不是检查是否发生任何碰撞然后找出发生了什么,这将是更好的架构。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多