Unity Leap Motion检测手指与其他手指/手掌的碰撞

时间:2017-07-09 05:40:57

标签: unity3d unity5 leap-motion

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

我已经从Unity Asset Pack Desktop演示中复制了HandModels和LeapHandController。

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

我不确定如何使用Leap Motion和Unity检测手指与其他物体碰撞的标准方法,但它似乎不遵循标准的Unity Collision系统。还有其他方法我应该检测它吗?如果我能够检测到手儿骨头的碰撞会很有帮助,但是现在看来我必须手动向手发信号通知儿童骨头已经发生碰撞。

1 个答案:

答案 0 :(得分:1)

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

如果它确实是RigidRoundHand,或者使用RigidHand脚本来生成手的对手,那么你所观察到的问题来自一只手就是一个刚体这一事实,所以你没有看到OnCollisionEnter的原因是因为刚性体在碰撞时没有收到OnCollisionEnter。与自己。

要完成您尝试做的事情,而不是依赖手的默认对手,您应该将特定的Rigidbody + Collider对象(例如默认的Unity Cube)放在手的特定位置上#39;我想检测碰撞。我建议使用最近版本中提供的Attachment Hands来做到这一点:它可以让您轻松地将单个Rigidbodies放在手中的特定关节上,例如拇指尖和其他位置你正试图与之发生冲突。

确保您使用the latest version of the Leap Motion Unity SDK,然后查看Assets文件夹中LeapMotion/Core/Examples/Attachment Hands/中的示例场景。确保你在附件手的拇指下有一个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!");
    }
  }
}

在上面的例子中,我们正在寻找一个&#34; MiddleFingertipIdentifier&#34;碰撞中的脚本,所以我们需要确保有一个物体,其中有一个Kinematic Rigidbody和一个Collider 附着(通过附件手)到中指的尖端 - 标识符脚本甚至不需要包含任何内容,它只需要在那里:

public class MiddleFingertipIdentifier : MonoBehaviour { }

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