Table of Contents

Laborator VR 01. Google Cardboard XR

Înainte de a începe laboratorul...

  • Vă recomandăm să studiați aici câteva concepte generale ce țin de realitatea virtuală
  • Înainte de a începe implementarea laboratorului:
    • Asigurați-vă că îndepliniți cerințele tehnice deschise aici
    • Aveți setup-ul pentru Unity realizat, puteți studia acesta aici
  • Vă recomandăm să urmăriți pașii descriși în acest ghid pentru setup-ul proiectului împreună cu Git. Vă va ușura munca pe parcursul semestrului.

Link către GitHub repo.

Introducere

Google Cardboard (XR Plugin for Unity) este un SDK ce permite dezvoltatorilor să creeze experințe în realitate virtuală folosind dispozitive mobile (smartphone-uri) în motorul de jocuri Unity. Acest plugin este destinat utilizării împreună cu Google Cardboard (vezi imaginea de mai jos), un dispozitiv de tip holder pentru telefoane, ce permite o variantă low-cost de experimentare a realitații virtuale.

Aceste dispozitive de tip holder se pot achiziționa de la diverse brand-uri – se pot achiziționa, de asemenea, controller-e de tip joystick ce comunică pe Bluetooth cu telefonul, pentru a avea un control sporit în scenele virtuale (de exemplu, se poate implementa movement-ul sau diferite interacțiuni folosind aceste controller-e).

Highlights tehnologie

În mod evident, soluțiile dedicate pentru VR (HTC Vive, Meta Quest 2/3, Meta Pro, etc.) oferă o experiență virtuală mult superioară procesării posibile pe un smartphone, dar acest plugin ne permite să avem un prim sneak peek al tehnologiei VR într-un mod accesibil.

Overview laborator

În cadrul acestui laborator:

În mod ideal, testarea funcționalităților din laborator se face folosind un dispozitiv de tip holder VR pentru smartphone, dar se poate testa și în absența acestuia. De asemenea, nu este necesară folosirea unui joystick pentru mobile.

Integrare Google Cardboard XR Plugin în proiect

Asigurați-vă că aveți Git instalat pe sistemul vostru! Nu veți putea adăuga pachete via managerul de pachete din Unity folosit URL-uri git daca nu-l aveți.

Întrucât pașii pentru integrarea acestui pachet sunt bine descriși în acest acest ghid, vă recomandăm să-l urmați și voi - cel mai probabil veți face acești pași împreună cu asistentul de laborator.

Instalați, pe baza ghidului, sample-ul inclus în pachet.

⚠️ Atenție ⚠️ la build-urile pe Android! S-ar putea ca API-ul grafic Vulkan să nu ruleze deloc pe smartphone-ul vostru. Așadar, când ajungeți la pasul de setup al API-ului grafic:

Pre-build setup

Îndată ce se încheie instalarea pachetului Google Cardboard XR Plugin, ar trebui să vă apară în toolbar-ul (de sus) din Unity un nou menu item, pe care va trebui să-l folosiți pentru a seta o serie de dependințe ce țin de bibliotecile XR.

În proiectul Unity de VR veți include, pe parcursul laboratoarelor, diverse SDK-uri necesare pentru rezolvarea acestora. Întrucât integrarea tuturor acestora într-un singur proiect poate crea unele probleme, a fost implementat un editor script custom (accesat din acest meniu) care se ocupă de configurarea soluției dependent de laboratorul pentru care doriți să faceți build.

În cazul în care toate elementele din meniu sunt grayed out și prmiți null ref-uri în consolă, încercați să restartați editorul.

  • Notați existența acestui meniu întrucât la trebui să-l folosiți și să selectați opțiunea corespunzătoare și în următoarele laboratoare de VR.
  • În cazul în care nu vă apare acest meniu, sau dacă sunt actualizări ale acestuia, stergeți din proiect folder-ul Assets → Project Setup → CustomXRPluginProvider si reimportați ultima versiune a pachetului IRVA_ProjectSetup_XRPluginProviderController, care se găsește în folder-ul UnityPackages din folder-ul root al proiectului, după care restartați Unity.

Pentru acest laborator va trebui să setați activă opțiunea Set Cardboard XR Loader. Funcționarea este marcată în felul următor:

Testarea scenei sample

Build And Run e destul de picky și câteodata s-ar putea să nu funcționeze conform așteptărilor. Din acest motiv, vă recomandăm în general Build și instalarea manuală.

Scena demo sample:

Ierarhia scenei sample:

Testarea scenei sample

Implementarea jocului

Veți avea de implementat un joculeț în care se spawnează în mod contnuu baloane, care pot fi sparte dacă player-ul le privește pentru un timp îndelungat – așadar, ne folosim de acest concept de gaze interaction. O parte a jocului este deja implementată, voi va trebui sa urmăriți todo-urile din cod pentru rezolva complet laboratorul.

Import schelet laborator

Task-uri

  1. Realizați un build folosind scena sample din plugin. Validați funcționarea corectă a acestui build:
    • Ar trebui sa aveți un render stereoscopic
    • Ar trebui să se realizeze head tracking-ul
    • Obiectul 'Treasure' din scenă ar trebui să-și schimbe culoarea dacă reticle-ul player-ului interacționează cu aceasta
  2. Importați scheletul de laborator
    • Din toolbar-ul editor-ului, Assets → Import Package → Custom Package
    • Selectați ultima versiune a pachetului IRVA_L1_VR_GoogleCardboard_Skeleton care se găsește în folder-ul UnityPackages din folder-ul root al proiectului
  3. Instanțiați obiectele de tip balon
    • Instanțiați obiectele din script-ul de spawner la o poziție random in volumul BoxCollider-ului atașat de obiectul spawner
    • Calculați, de asemenea, poziția acestora de instanțiere
  4. Realizați translația baloanelor instanțiate
    • În cel mai simplu mod, translatați-le cu o viteză constantă pe axa Y
  5. Implementați mecanica de spargere a baloanelor
    • Aveți în script-ul ce controlează baloanele metodele OnPointerEnter și OnPointerExit, care sunt apelate în mod automat atunci când un balon este privit sau când se încheie privirea acestuia
    • Cât timp un balon este targeted, incrementați timer-ul intern
    • În momentul în care un balon nu mai este targeted, restetați timer-ul intern
    • Dacă timer-ul intern depășește valoarea maximă definită (variabila requiredTimeToPop), spargeți balonul
  6. Implementați funcționalitatea de scor
    • Un balon spart de jucător va incrementa scorul
    • Un balon spart de tavan (ratat de jucător) va decrementa scorul
    • Folosiți-vă de ScoreController pentru a ține cont de scor și pentru a actualiza componenta text