Откриване на жест с плъзгане на ръка в Unity с помощта на Kinect с OpenNI

Имам 3D модел в моя проект Unity и имам JavaScript, който завърта камерата въз основа на клавишите със стрелки на клавиатурата (наляво/надясно).

Сега трябва да имам скрипт, който открива хоризонтален жест с ръка и връща вектор, който бих използвал, за да завъртя камерата.

Използвам ZigFu SDK с PrimeSense OpenNI/NITE. ZigFu SDK идва с примерни скриптове, един от които е SwipeDetector - чудя се как работи?

Моята настройка: Имам 3 GameObjects: 3D модел, основна камера и насочена светлина.

И така, как да използвам скрипта SwipeDetector в моя проект? Начинът, по който го правя в момента, е 1) Създаване на празен обект за игра „SwipeDetection“, 2) „плъзгане и пускане“ на скрипта SwipeDetector от ZigFu. Въведох регистрационни файлове в скрипта SwipeDetector, но не ги виждам.


person Sagar Hatekar    schedule 07.02.2012    source източник


Отговори (1)


Обвързванията на Zigfu (предполагам, че използвате версия 1.4?) нямат проба SwipeDetector, но включват SwipeDetector MonoBehaviour. SwipeDetector открива вертикални и хоризонтални плъзгания, но за съжаление не открива скоростта на плъзгане.

Имате няколко възможности:

  1. Използвайте предоставения детектор за плъзгане и завъртете камерата с фиксирана стойност всеки път, когато откриете хоризонтално плъзгане (събития SwipeDetector_Left или SwipeDetector_Right)

  2. Използвайте предоставения детектор за плъзгане, започнете да въртите при плъзгане и спрете да въртите при събитието SwipeDetector_Release. Това би било подобно на натискане на клавишите със стрелки (ако приемем, че имате същото поведение при събития с натискане на клавиш/клавиш)

  3. Проследявайте скоростта на ръката и проверявайте нейната стойност, когато се случи плъзгане. Използвайте тази стойност, за да завъртите камерата. Можете да следите скоростта, като създадете ново MonoBehaviour и внедрите Hand_Create, Hand_Update и Hand_Destroy (вижте някой от скриптовете в папката HandpointControls). Поддържайте опашка с точките за ръце от последните n кадъра. Делтата между най-новите и най-старите точки ще бъде вашата скорост за тези n кадъра (препоръчвам ви да започнете с 15 кадъра или около половин секунда)

(Това ще бъде включено в бъдещо издание на Zigfu :))

Вашата настройка на игрови обекти звучи правилно - ако не виждате никакви регистрационни файлове, може да не изпълнявате правилно „жеста за фокусиране“. Опитайте да махнете или да извършите докосване към сензора - това трябва да доведе до извикване на събитието Hand_Create. След като имате валидна ръчна точка, трябва да получите правилните събития от Swipe Detector.

Също така си струва да споменем, че вашият игрови обект за откриване на плъзгане трябва да има компонент HandPointControl (добавен имплицитно с RequireComponent) и че „ActiveOnStart“ трябва да е вярно.

person Shlomo Zippel    schedule 08.02.2012
comment
благодаря, че отделихте време, за да създадете полезен отговор! Да кажем, че съм използвал 1-вата опция, как ще открия плъзгане? Добавих още подробности към въпроса си за справка. - person Sagar Hatekar; 08.02.2012
comment
И да, използвам версия 1.4 - person Sagar Hatekar; 08.02.2012
comment
бърз въпрос: какъв е подписът на метода за SwipeDetector_Left/Right? - person Sagar Hatekar; 08.02.2012
comment
void SwipeDetector_Left(), void SwipeDetector_Right() - person Shlomo Zippel; 09.02.2012
comment
добре, почти съм сигурен, че правя правилно жеста за фокусиране. Опитах да размахвам/бутам, но не се отпечатват регистрационни файлове :( И да, моят обект на игра Swipe има SwipeDetector и това е имплицитна препратка HandPointControl. ActiveOnStart също е вярно. - person Sagar Hatekar; 09.02.2012
comment
Независимо от това, приемането на отговора ви, предполагайки бъдеща версия, ще има смисъл във вашите предложения. - person Sagar Hatekar; 14.02.2012
comment
Здравей, @SagarHatekar успя ли да накараш това да работи? Бих искал да знам допълнителни съвети, за да накарате жестовете за плъзгане zigfu да работят. наздраве - person ted.strauss; 25.02.2014
comment
Здравей @ted.strauss, не го направих, отказах се :( Съжалявам. - person Sagar Hatekar; 25.02.2014
comment
@ShlomoZippel бихте ли помислили да публикувате кодов фрагмент, съответстващ на един или друг от описаните от вас методи? кодът за #2 би бил невероятен. - person ted.strauss; 26.02.2014