如何让物体贴在手上而不是放下它

问题描述 投票:1回答:1

对于一个项目,我想使用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");
    }
}

仅在对象落在地面上时才会检测到碰撞。

c# unity3d leap-motion
1个回答
1
投票

Debug.Log("Collision detected");没被击中的原因很可能是因为你正在使用一个(或更多)碰撞器检查了Is Trigger选项。 enter image description here

这会将对撞机变成触发器。这将使它忽略实际的碰撞,而只检查对撞机是否已进入另一个对撞机的空间。

根据触发器上的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操纵您正在触摸的对象

© www.soinside.com 2019 - 2024. All rights reserved.