Обнаружение жеста смахивания руки в Unity с помощью Kinect с OpenNI - PullRequest
3 голосов
/ 07 февраля 2012

У меня есть 3D-модель в моем проекте Unity, и у меня есть JavaScript, который вращает камеру на основе клавиш со стрелками на клавиатуре (влево / вправо).

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

Я использую ZigFu SDK с PrimeSense OpenNI / NITE.ZigFu SDK поставляется с примерами сценариев, одним из которых является SwipeDetector - мне интересно, как он работает?

Моя настройка: У меня есть 3 GameObjects: 3D-модель, MainCameraи Направленный свет.

Итак, как мне использовать сценарий SwipeDetector в моем проекте?Сейчас я делаю это следующим образом: 1) Создайте пустой игровой объект «SwipeDetection», 2) «перетащите» скрипт SwipeDetector из ZigFu.Я вставил логи в скрипт SwipeDetector, но я их не вижу.

1 Ответ

4 голосов
/ 08 февраля 2012

Привязки Zigfu (я предполагаю, что вы используете версию 1.4?) Не имеют образца SwipeDetector, но они включают SwipeDetector MonoBehaviour.SwipeDetector обнаруживает вертикальные и горизонтальные пролистывания, но, к сожалению, не определяет скорость пролистывания.

У вас есть несколько вариантов:

  1. Используйте прилагаемый детектор пролистывания,и поворачивать камеру на фиксированную величину каждый раз, когда вы обнаруживаете горизонтальное прокручивание (события SwipeDetector_Left или SwipeDetector_Right)

  2. Используйте предоставленный детектор прокрутки, начните вращение на Swipe и остановите вращение на SwipeDetector_Releaseсобытие.Это было бы похоже на нажатие клавиш со стрелками (при условии, что вы выполняете те же действия при событиях нажатия / нажатия клавиш)

  3. Отслеживайте скорость движения руки и проверяйте ее значение при проведении удара,Используйте это значение для поворота камеры.Вы можете отслеживать скорость, создав новый MonoBehaviour и реализовав Hand_Create, Hand_Update и Hand_Destroy (посмотрите на любой из сценариев в папке HandpointControls).Держите очередь с точками раздачи из последних n кадров.Дельта между самыми новыми и самыми старыми точками будет вашей скоростью для этих n кадров (я рекомендую начать с 15 кадров или примерно полсекунды)

(Это будет включено вбудущий релиз Zigfu:))

Настройки вашего игрового объекта звучат правильно - если вы не видите никаких логов, вы, возможно, неправильно выполняете «жест фокуса».Попробуйте помахать или выполнить прикосновение к датчику - это должно вызвать событие Hand_Create.Если у вас есть действительная точка рукой, вы должны получать правильные события от Swipe Detector.

Также стоит упомянуть, что у вашего игрового объекта для обнаружения пролистывания должен быть компонент HandPointControl (добавлен неявно с RequireComponent), а значение ActiveOnStart должно быть истинным.

...