Как я могу позволить объекту прилипать к руке, а не бросать его - PullRequest
1 голос
/ 25 апреля 2019

Для проекта я хочу создать виртуальную среду, используя Leap Motion, в которой объекты могут быть подобраны.Пока что захват объекта работает (с использованием модуля InteractionEngine из Leap и скрипта InteractionBehaviour), но объекты часто отбрасываются, потому что Leap Motion, по-видимому, думает, что рука отпускает объект.Для той цели, для которой я хочу его использовать, было бы достаточно прижать объект к руке, как только он будет схвачен, что-то вроде липких пальцев.Кто-нибудь может мне с этим помочь?Я очень новичок в Leap Motion и не знаю, с чего начать.

Я пытался использовать OnCollisionEnter (я не знаю, является ли это хорошим местом для начала жесткой), но это не похожезарегистрировать столкновение, когда рука касается объекта.Он видит столкновение только тогда, когда объект падает на землю.

Редактировать: Больше информации об окружающей среде + то, что я пробовал с OnCollisionEnter:

Это среда, которую яиметь прямо сейчас

Это важные компоненты объекта .(ResetFood - это небольшой скрипт, который я написал для сброса куба в исходное положение, и для этого это не имеет значения).

Это скрипт, в котором я пытался использовать OnCollisionEnter.

using System.Collections.Generic;
using UnityEngine;

public class StickToHand : MonoBehaviour
{

    private void OnCollisionEnter(Collision collision) {
        Debug.Log("Collision detected");
    }
}

, который печатает только столкновение, обнаруженное, когда объект падает на землю.

1 Ответ

1 голос
/ 25 апреля 2019

Причина, по которой Debug.Log("Collision detected"); не попадает, наиболее вероятна, потому что вы используете (или более) коллайдер, у которого отмечена опция Is Trigger.enter image description here

Это превратит коллайдер в триггер.Что заставит его игнорировать фактическое столкновение, и вместо этого только проверяет, вошел ли коллайдер в пространство другого коллайдера.

Согласно Документам Unity на триггерах:

Коллайдер, настроенный как триггер (с использованием свойства 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

...