对于一个项目,我想使用Leap Motion创建一个可以拾取对象的VR环境。到目前为止,拾取一个对象正在工作(使用Leap中的InteractionEngine模块和InteractionBehaviour脚本),但是对象被大量删除,因为Leap Motion显然认为手正在放弃该对象。出于我想要使用它的目的,一旦被抓住它就足以将物体粘在手上,有点像粘手指。谁能帮我这个?我是Leap Motion的新手,不知道从哪里开始。
我试过使用OnCollisionEnter(我不知道这是否是一个开始艰难的好地方)但是当手触摸对象时它似乎没有记录碰撞。当物体落到地面时,它只会看到碰撞。
编辑:有关环境的更多信息+我在OnCollisionEnter上尝试过的内容:
This is the environment that I have right now
These are the important components of the object。 (ResetFood是我编写的一个小脚本,用于将多维数据集重置到其原始位置,对此并不重要)。
这是我尝试使用OnCollisionEnter的脚本。
using System.Collections.Generic;
using UnityEngine;
public class StickToHand : MonoBehaviour
{
private void OnCollisionEnter(Collision collision) {
Debug.Log("Collision detected");
}
}
仅在对象落在地面上时才会检测到碰撞。
Debug.Log("Collision detected");
没被击中的原因很可能是因为你正在使用一个(或更多)碰撞器检查了Is Trigger
选项。
这会将对撞机变成触发器。这将使它忽略实际的碰撞,而只检查对撞机是否已进入另一个对撞机的空间。
根据触发器上的Unity docs:
配置为触发器的对撞机(使用Is Trigger属性)不会表现为实体对象,只会允许其他对撞机通过。当对撞机进入其空间时,触发器将调用触发器对象脚本上的OnTriggerEnter函数。
这反过来意味着如果任何一个碰撞器是一个触发器而不是private void OnCollisionEnter(Collision collision)
将被调用,因为没有碰撞。
相反,OnTriggerEnter(Collider collider)
被称为。
当立方体落下时打印Collision detected
的原因是因为你的立方体和地面都不是触发器,而是固体碰撞器。离开它很可能是你的手被设置为有触发器。
如果你使用
private void OnTriggerEnter(Collider collider)
{
Debug.Log("Trigger detected");
}
相反,当您触摸对象时,它应该在控制台中记录Trigger detected
。在这个方法中,您还可以使用collider.gameObject
操纵您正在触摸的对象