This shows you the differences between two versions of the page.
irva:laboratoare:09 [2024/01/09 11:22] andrei.lapusteanu |
irva:laboratoare:09 [2024/01/09 11:33] (current) andrei.lapusteanu |
||
---|---|---|---|
Line 37: | Line 37: | ||
{{ :irva:laboratoare:mq2_l9_waiting.jpg?350 |}} | {{ :irva:laboratoare:mq2_l9_waiting.jpg?350 |}} | ||
- | Este important de știut că elementele interactibile se pot regăsi intr-una din 4 stări posibile: | + | Este important de știut că elementele **interactibile** se pot regăsi intr-una din 4 stări posibile: |
* **Disabled** (inactiv) | * **Disabled** (inactiv) | ||
* **Normal** | * **Normal** | ||
Line 43: | Line 43: | ||
* **Select** (intracțiune) | * **Select** (intracțiune) | ||
- | În următorul GIF puteți observa interactibilul în stările **Normal**, **Hover** și **Select**. | + | În următorul GIF puteți observa **interactibilul** în stările **Normal**, **Hover** și **Select**. |
{{ :irva:laboratoare:l9_mq2_states.gif?300 |}} | {{ :irva:laboratoare:l9_mq2_states.gif?300 |}} | ||
- | 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**. | + | 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 **PokeInteractible** (care poate răspunde atât la poke-uri de la controller cât și de la mâini). |
==== Sumar interacțiuni ==== | ==== Sumar interacțiuni ==== | ||
- | Un flow simplificat al Interaction SDK-ului poate fi următorul: | + | Un flow simplificat al **Interaction SDK**-ului poate fi următorul: |
- | * Se preia input-ului iar în urma procesării și filtrarii se randează controller-ele/mâinile | + | * Se preia input-ului iar în urma procesării și filtrării se randează controller-ele/mâinile |
* Controller-ele/mâinile sunt **interactori** care așteaptă/ascultă **interacțiunea** cu elemente **interactibile** | * Controller-ele/mâinile sunt **interactori** care așteaptă/ascultă **interacțiunea** cu elemente **interactibile** | ||
* Dacă **interactorul** este în proximitatea unui **interactibil**, iar cele 2 elemente implementează o **interacțiune** comună (poke, grab), are loc evenimentul de **hover** | * Dacă **interactorul** este în proximitatea unui **interactibil**, iar cele 2 elemente implementează o **interacțiune** comună (poke, grab), are loc evenimentul de **hover** | ||
* **Interacțiunea** efectivă are loc atunci când **interactibilul** este selectat de către **interactor** | * **Interacțiunea** efectivă are loc atunci când **interactibilul** este selectat de către **interactor** | ||
+ | |||
+ | ==== Basic setup | Headset, controllers, hands ==== | ||
+ | |||
+ | Vom realiza în continuare cnfigurarea de bază prin care putem plasa în scenă un headset, precum și controller-e și mâini virtuale. Puteți urmări în detaliu pașii la [[https://developer.oculus.com/documentation/unity/unity-isdk-getting-started/|acest link]], vom prezenta succint pașii și în continuare. | ||
+ | |||
+ | * Deschideți scena **Assets -> L9_MetaQuest -> Scenes -> L9_MQ2_BasicSetup** | ||
+ | * Adăugați în scenă pregab-ul **OVRCameraRig**. Acesta este prefab-ul de bază ce permite tracking-ul atât al headset-ului cât și al interactorilor | ||
+ | * Studiați setările din inspector. Asigurați-vă că tipul de input (**Hand Tracking Support**) este **Controllers and Hands**, iar **Hand Tracking Version** este **V2** | ||
+ | * Atașați prefab-ul **OVRInteraction** ca și copil la **OVRCameraRig**. Acest prefab este cel de bază pentru controller-e sau mâini | ||
+ | * **Setup controlller-e**: Adăgați prefab-ul **OVRControllers** ca și copil la **OVRInteraction**. Acesta se ocupă de inteacțiunile posibile precum și partea vizuală a controller-elor | ||
+ | * **Realizați un build sau testați in-editor folosing Quest Link**. Ar trebui să apară controller-ele în scenă (și să fie tracked) | ||
+ | * Setup hand tracking: Urmați pașii descriși [[https://developer.oculus.com/documentation/unity/unity-isdk-getting-started/|aici]] în secțiunea **Set Up Hands** | ||
+ | * ⚠️ **Atenție**, mâinile vor avea atașate niște physics capsules necesare interacțiunilor, dar implementarea din documentație este (încă) broken, așadar **nu faceți pasul 6** | ||
+ | * Realizați, de asemenea, pașii descriși în subsecțiunea **Add OVRHands Prefab** – atașați prefab-ul **OVRHands** ca și copil la **OVRInteraction** | ||
+ | * Pentru a repara problema cu physics capsules, navigați întâi în ierarhie la **OVRCameraRig -> OVRInteraction -> OVRInteraction**. Atât pe **LeftHand** cât și pe **RightHand** atașați script-ul **HandPhysicsCapsule** și asignați în inspector field-urile necesare (primele 3) | ||
+ | * **Realizați un build sau testați in-editor folosing Quest Link**. Ar trebui să funcționeze atât controller-ele cât și hand tracking-ul și să puteți face switch între cele 2 la run-time | ||
+ | |||
+ | {{ :irva:laboratoare:mq2_l9_handsetup.png?300 |}} | ||
+ | |||
+ | ==== Task-uri ==== | ||
+ | |||
+ | - Implementați setup-ul descris în capitorul “**Basic setup | Headset, controllers, hands**”, pentru a implementa tracking-ul headset-ului, precum și suport pentru controller-e și hand tracking | ||
+ | - Implementați o interacțiune de tip **Grab**. Întrucât pașii descriși în documentație sunt suficient de detaliați, urmăriți modelul prezentat la [[https://developer.oculus.com/documentation/unity/unity-isdk-create-hand-grab-interactions/|acest link]]. Puteți lucra în scena curentă | ||
+ | - **Bonus**: Fiți creativi și implementați un alt tip de interacțiune (altceva decât grab) – plecați tot de la exemplele din documentație. De exemplu, un buton care aprinde/stinge o lumina, sau realizați un obiect pe care îl puteți arunca – sau orice alt exemplu relevant care vă ajută să înțelegi mai bine modul de funcționare interactor <-> interacțiune | ||
+ | |||