ManoMotion este un SDK ce permite dezvoltarea de aplicații în AR, unde modalitatea de input este determinată de hand tracking.
SDK-ul este construit pe baza unor metode de computer vision și machine learning ce facilitează detecția mâinilor; este antrenat, de asemenea, să recunoască o serie de gesturi, de care vom vorbi în acest laborator.
Putem crea aplicații sau jocuri folosind ARFoundation + ManoMotion care să nu necesite interacțiunea cu touchscreen-ul sau cu UI-ul, modalitatea de input fiind dictată de către poziția mâinii detectate, precum și a gesturilor efectuate.
ManoMotion SDK (împreună cu ARFoundation) sunt deja incluse în laborator, iar setările aferente build-ului au fost realizate. Cu toate acestea, license key-ul pentru ManoMotion nu a fost setat.
Pentru a importa package-ul ManoMotion în proiect, dar și pentru a generare și a inserare license key-ul, faceți următorii pași:
Un proiect ce folosește ManoMotion se folosește de camera telefonului ca input; SDK-ul procesează fluxul de frame-uri primite de la cameră și detectează mâna și gesturile. Ne putem folosi destul de ușor de informația oferită de SDK – acesta setează valorile unor structuri de date pe care le putem interoga în fiecare frame. Informația oferită este de mai multe tipuri, împărțită pe o serie de clase:
Reprezintă clase “generale” de detecție, valori posibile:
ManoClass.NO_HAND ManoClass.GRAB_GESTURE ManoClass.POINTER_GESTURE ManoClass.PINCH_GESTURE
Acestea sunt gesturi de tip trigger – de exemplu, momentul (sau frame-ul) în care s-a detectat un “grab”, adică SDK-ul a detectat gestul de tip închidere pumn. Alt exemplu este un gest de tip “release”, care este true în frame-ul în care s-a detectat gestul de deschidere a pumnului. Valori posibile:
ManoGestureTrigger.NO_GESTURE ManoGestureTrigger.CLICK ManoGestureTrigger.RELEASE_GESTURE ManoGestureTrigger.GRAB_GESTURE ManoGestureTrigger.PICK ManoGestureTrigger.DROP
Acestea sunt gesturile continue, mai exact cele care persistă pe mai multe frame-uri – gestul de tip “closed hand” este detectat în toate frame-urile în care este detectată o mână cu pumnul strâns. Valori posible:
ManoGestureContinuous.NO_GESTURE ManoGestureContinuous.HOLD_GESTURE ManoGestureContinuous.OPEN_HAND_GESTURE ManoGestureContinuous.OPEN_PINCH_GESTURE ManoGestureContinuous.CLOSED_HAND_GESTURE ManoGestureContinuous.POINTER_GESTURE
Specifică ce parte a mâinii este detectată – palma sau dosul palmei. Valori posibile:
HandSide.None HandSide.Backside HandSide.Palmside
// Detected hand information HandInfo handInfo = ManomotionManager.Instance.Hand_infos[0].hand_info; // Detected gesture information GestureInfo gestInfo = handInfo.gesture_info; ManoClass manoClass = gestInfo.mano_class; // Gesture class ManoGestureTrigger gestTrigger = gestInfo.mano_gesture_trigger; // Trigger gesture ManoGestureContinuous gestCont = gestInfo.mano_gesture_continuous; // Continuous gesture HandSide handSide = gestInfo.hand_side; // Hand side int gestureState = gestInfo.state; // Gesture state Vector3 palmPosNorm = handInfo.tracking_info.palm_center; // Normalised screen coords [0...1] /* To get screen coords in pixels, multiply 'palmPosNorm' x/y with Screen.width, Screen.height */
În principal, aceste informații înlocuiesc inputul clasic, așadar am putea testa pe Update(), de exemplu:
void Update() { // Grab hand info from ManoMotion's SDK HandInfo handInfo = ManomotionManager.Instance.Hand_infos[0].hand_info; if(handInfo.gesture_info.mano_gesture_trigger == ManoGestureTrigger.GRAB_GESTURE) { // Do something only on the frame this is true } if(handInfo.gesture_info.mano_gesture_continuous == ManoGestureContinuous.OPEN_HAND_GESTURE) { // Do something every frame this is true } }
Proiectul are deja partea de AR configurată precum și baza unui joc (o versiune simplificată a Fruit Ninja), la care va trebui să implementați câteva feature-uri.
Aplicația de laborator este configurată într-o serie de etape, care ajută la configurarea spațiului AR de joc. Acestea sunt:
Scripturi relevante:
Înainte de a lucra la joculețul propus, vă recomandăm mai întâi să testați scena demo oferită de către cei de la ManoMotion. Aceasta se găsește în Assets → ManoMotion ARFoundation → Scenes → ManoMotionSDKProFeatures.
Testați funcționalitățile din meniul aplicaței pentru a vă familiariza cu diversele gesturi care pot fi detectate. Aveți un buton de meniu din care puteți activa/dezactiva diverse feature-uri.
În cazul în care activați toate feature-urile din scena demo, ar trebui sa obțineți o scenă similară cu cea prezentată mai jos: