Unity Leap Motion 检测手指与其他人的碰撞fingers/palm
Unity Leap Motion Detecting Finger collision with other fingers/palm
我是 Unity 和 Leap motion 的新手。
我已经从 Unity Asset Pack 桌面演示中复制了 HandModels 和 LeapHandController。
我试图激活一个函数来实例化一个对象,当拇指骨 3 与手的任何其他部分发生碰撞时,我通过创建一个带有 OnCollisionEnter
函数的简单脚本并将其附加到Thumb 的 Bone3,但当拇指与它作为子对象的 hand/finger 的任何其他部分发生碰撞时,它似乎不会激活。如果我在场景中添加一个立方体并给它一个刚体,它将成功触发拇指的 onCollisionEnter
(通过 print 语句显示),但它不会触发 oncollisionEnter
及其在手模.
我不确定使用 Leap Motion 和 Unity 检测手指与其他物体碰撞的标准方法是怎样的,但它似乎没有遵循标准的 Unity 碰撞系统。还有另一种方法我应该检测它吗?如果我能检测到手部子骨骼的碰撞,那将会很有帮助,但现在看来我必须手动向手发出信号,表明子骨骼已经发生碰撞。
如果您从桌面演示复制了 HandModels,您正在使用的物理手可能是 RigidRoundHand
——您可以通过检查 HandModels 对象下面的对象来确认这一点。
如果确实是 RigidRoundHand,或者使用 RigidHand 脚本生成手的碰撞体,您观察到的问题来自 一只手都是一个刚体,所以你没有看到 OnCollisionEnter 的原因是刚体在 "collides" 自身时没有收到 OnCollisionEnter。
要完成你想要做的事情,而不是依赖手的默认碰撞器,你应该将特定的刚体 + 碰撞器对象(例如默认的 Unity 立方体)放在你手的特定位置想检测碰撞。我建议使用最近版本中提供的 Attachment Hands 来执行此操作:这将使您可以轻松地将单个刚体放置在手的特定关节上,例如拇指尖和其他位置你正试图碰撞。
确保您使用的是 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!");
}
}
}
在上面的示例中,我们正在寻找碰撞中的 "MiddleFingertipIdentifier" 脚本,因此我们需要确保有一个对象具有运动学刚体和碰撞器 附加(通过 Attachment Hands)到中指的指尖骨——标识符脚本甚至不必包含任何内容,它只需要在那里:
public class MiddleFingertipIdentifier : MonoBehaviour { }
该逻辑应该让您开始检测手部内部交叉点。
我是 Unity 和 Leap motion 的新手。
我已经从 Unity Asset Pack 桌面演示中复制了 HandModels 和 LeapHandController。
我试图激活一个函数来实例化一个对象,当拇指骨 3 与手的任何其他部分发生碰撞时,我通过创建一个带有 OnCollisionEnter
函数的简单脚本并将其附加到Thumb 的 Bone3,但当拇指与它作为子对象的 hand/finger 的任何其他部分发生碰撞时,它似乎不会激活。如果我在场景中添加一个立方体并给它一个刚体,它将成功触发拇指的 onCollisionEnter
(通过 print 语句显示),但它不会触发 oncollisionEnter
及其在手模.
我不确定使用 Leap Motion 和 Unity 检测手指与其他物体碰撞的标准方法是怎样的,但它似乎没有遵循标准的 Unity 碰撞系统。还有另一种方法我应该检测它吗?如果我能检测到手部子骨骼的碰撞,那将会很有帮助,但现在看来我必须手动向手发出信号,表明子骨骼已经发生碰撞。
如果您从桌面演示复制了 HandModels,您正在使用的物理手可能是 RigidRoundHand
——您可以通过检查 HandModels 对象下面的对象来确认这一点。
如果确实是 RigidRoundHand,或者使用 RigidHand 脚本生成手的碰撞体,您观察到的问题来自 一只手都是一个刚体,所以你没有看到 OnCollisionEnter 的原因是刚体在 "collides" 自身时没有收到 OnCollisionEnter。
要完成你想要做的事情,而不是依赖手的默认碰撞器,你应该将特定的刚体 + 碰撞器对象(例如默认的 Unity 立方体)放在你手的特定位置想检测碰撞。我建议使用最近版本中提供的 Attachment Hands 来执行此操作:这将使您可以轻松地将单个刚体放置在手的特定关节上,例如拇指尖和其他位置你正试图碰撞。
确保您使用的是 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!");
}
}
}
在上面的示例中,我们正在寻找碰撞中的 "MiddleFingertipIdentifier" 脚本,因此我们需要确保有一个对象具有运动学刚体和碰撞器 附加(通过 Attachment Hands)到中指的指尖骨——标识符脚本甚至不必包含任何内容,它只需要在那里:
public class MiddleFingertipIdentifier : MonoBehaviour { }
该逻辑应该让您开始检测手部内部交叉点。