This is an old revision of the document!
Headset-urile pe care le folosim se bazează pe Interaction SDK, care se ocupă de procesarea fluxului de date oferit de către hardware – în esență, datele de interes care pot fi folosite în aplicații sunt poziția și rotația atât a headset-ului cât și a controller-elor sau mâinilor. În implementări mai recente, există funcționalități ce permit și realizarea body și face tracking-ului (face tracking doar pe Meta Pro).
Aceste data de intrare sunt procesate de către Interaction SDK. De exemply, pentru hand tracking, datele de intrare sunt trecute printr-un filtru (pentru a minimiza jitter-ul), se creează o mână “sintetică” ce constrânge poziția/rotația mâinii (de exemplu, pentru a nu trece prin anumite obiecte) iar în final se creează reprezentarea vizuală.
Aceste interacțiuni se bazează pe comunicarea dintre un interactor și un interactibil. Putem defini această “comunicare” ca și o interacțiune, așadar lanțul de elemente de interes devine:
LINK DETALII AICI
Interactorul reprezintă o componentă atașată de controller-e sau de mâini ce are rolul de a iniția acțiuni. Orice interacor implementează interfața IInteractor, care dictază acțiunile posibile. Un interactor poate schimba evenimente cu alți interactibili (detalii în următoarea secțiune).
Un interactor există pentru a defini interacțiuni, care sunt de mai multe tipuri:
Fiecare dintre aceste interacțiuni se poate implementa (în forma de bază) folosind prefab-uri și configurarea în inspector.
Reprezintă o componentă care răspunde la evenimentele unui interactor. Interactibilul poată să răspunde unei interacțiuni specifice. Orice interactibil implementează interfața IInteractable, care dictază acțiunile posibile.
De exemplu, un interactibil de tip poke nu va răspunde (interacționa) cu un interactor de tip grab.
Este important de știut că elementele interactibile se pot regăsi intr-una din 4 stări posibile:
În următorul GIF puteți observa interactibilul în stările Normal, Hover și Select.
Pentru realizarea acestor interacțiuni este necesară configurarea ambelor părți. De exemplu, pentru o interacțiune de tip Poke folosing hand tracking-ul, obiectele de tip mână din ierarhie for avea atașate obiecte de tip HandPokeInteractor, iar elementele interactibile vor avea atașate o componentă de tip HandPokeInteractible.
Un flow simplificat al Interaction SDK-ului poate fi următorul: