Как я могу вызвать событие, когда пользователь вращает объект своими руками, используя Leap Motion в виртуальной реальности? - PullRequest
2 голосов
/ 12 марта 2019

Я новичок в виртуальной реальности.Я использую Oculus Rift для гарнитуры и Leap Motion для интерактивности.Когда пользователь будет вращать объект своими руками, я хочу, чтобы сработало определенное событие.

Вот мой код:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class step1 : MonoBehaviour
{

    public GameObject object;
    public ParticleSystem event;


    void Start()
    {
    }

    // Update is called once per frame
    void Update()
    {
        if(object.transform.rotation == Quaternion.AngleAxis(-30,Vector3.right))
        {
            Debug.Log("Done");
            event.Play();   
        }
    }
}

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Обратите внимание, что поскольку кватернионы могут представлять вращения, которые достигают двух полных оборотов (720 градусов), это сравнение может возвращать значение false, даже если результирующие вращения выглядят одинаково.

С Quaternion.operator == Документы Unity

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

Попробуйте использовать Vector3 представление с eulerAngles, а затем проверьте приблизительное значение равно примерно так:

//only checks for one axis!
if(Math.Abs(rotationA.eulerAngles.x - rotationB.eulerAngles.x) <= maxDifference)
{
    //do stuff
}

Или придерживайтесь Quaternion.Angle, но используйте это так:

//compares angle directly
if(Math.Abs(Quaternion.Angle(rotationA, rotationB)) <= maxDifference)
{
    //do stuff
}

Vector3 состоит из трех внутренних значений float, а Quaternion.Angle возвращает значение float. Сравнение их по точному равенству не сработает в 99% случаев. Сравните их с максимальной разницей, с которой вы в порядке, и она должна работать.

0 голосов
/ 12 марта 2019

Вы хотите запустить событие

  1. , когда пользователь впервые начинает вращать объект
  2. непрерывно запускать, пока пользователь вращает объект
  3. , когда пользовательпользователь завершил вращение объекта

вам не нужно выбирать только один из них, например

в настоящее время ваша реализация будет запускать событие только тогда, когда ваш объект имеет определенное вращениеэто то, что ожидаемое поведение?

...