我是使用Unity和Leap动作的新手。
我已经从Unity Asset Pack Desktop演示中复制了HandModels和LeapHandController。
我正在尝试激活一个函数,当拇指骨3与手的任何其他部分碰撞时实例化一个对象,我通过创建一个带有OnCollisionEnter
函数的简单脚本并将其附加到Bone3来完成此操作拇指但是当拇指与手/手指的任何其他部分碰撞时它似乎没有激活。如果我向场景中添加一个立方体并给它一个刚体,它将成功触发拇指的onCollisionEnter
(通过print语句显示),但它不会触发oncollisionEnter
与其中的任何兄弟姐妹手模型。
我不确定如何使用Leap Motion和Unity检测手指与其他物体碰撞的标准方法,但它似乎不遵循标准的Unity Collision系统。还有其他方法我应该检测它吗?如果我能够检测到手儿骨头的碰撞会很有帮助,但是现在看来我必须手动向手发信号通知儿童骨头已经发生碰撞。
答案 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 { }
这个逻辑应该让你开始检测内部手交叉点。