I dette eksempel skal vi sætte en hel række teknologier sammen, så vi ender med et system der kan følgende:
Sende OSC beskeder fra en javascript side til en kørende VR applikation, så lyset for eksempel slukker, ting bevæger sig eller døre åbner i det virtuelle rum. Sende OSC beskeder ud af VR igen, så vi eksempelvis kan tænde lyset eller åbne en dør i det fysiske rum.
Vi starter med et worked example – altså et eksempel vi har sat op på forhånd, hvor i kan få indtryk af de involverede scripts, og hvordan man modificerer dem. Følg installationsguiden i indlægget om Unity set-up, og vend tilbage hertil, når du har åbnet et nyt Unity projekt og importeret pakken fra github. Find og åbn scenen darkroom.
Gennemgang
I denne scene ser vi en lyskegle, et skilt med en besked og et ellers mørkt rum. Lyskeglen kan kun bevæges med OSC udefra. Når lyset bevæges rundt, kan man pludselig se en “treasure”, en diamantformet brik, man kan klikke på. Når man klikker på den, sendes der en OSC besked ud fra Unity.
OSC test input
Vi sender OSC input til Unity fra en javascript proxy, som kan hentes her. Skitsen er lavet med node.js og p5.js For at ramme din Unity app, skal scriptet kende app’ens ip adresse. Men denne ip er selvfølgelig forskellig, når du krer Unity spillet fra din desktop og fra et par VR briller i en telefon. Derfor har vi lavet Unity app’en sådan, at den henter sin egen ip og viser den på skærmen når den starter. Åbn filen osc-unity.js og skriv den rigtige ip i Unity konfigurationen. Kør bridge.js fra terminalen, og åbn din webbrowser på localhost:8080.
Test systemet ved at køre Unity appen fra din desktop, og skriv en besked i tekstfeltet i din browser – det du skriver skal dukke op på tekstfeltet i Unity.
Unity scenen, asset for asset
For det første ligger deer en masse gameobjecter der begynder med GVR – det står for Google VR.
- GVREventSystem: scripts til at oversætte events til VR
- GVRHeadset: Gameobject til at repræsentere headsettet
- GVRControllerMain: Script til at styre input – fx mus eller Daydream Controller. Læs vejledning i inspectoren for at se hvordan du styrer VR i playmode.
- GVREditorEmulator: script til at styre app’en fra desktoppens input, når den ikke kører i en brille
- GVRInstantPreviewMain: Script der vistnok giver adgang til at teste sin app live på en Android tlf. Har ikke fået det til at virke
- SpotLight: Den lyskegle der skal styres udefra. Bemærk at denne er forbundet med OSC controller objektet, så den kan styres med OSC.
- Plane/Room: scenen er opbygget af et simpelt plane omgivet af 5 cubes til vægge og loft.
- Treasure – dette er den lille diamant man skal finde. På selve diamanten (Icosahedron) findes tre vigtige scripts:
- C# OSC kontrol script – generelt utility bibliotek til OSC.
- UDP packetIO: Generelt utility script til at sende pakker over UDP
- OSC test sender script: Rebecca Fiebrink’s lille test sender script. Her kan vi se, hvordan man sætter Unity op til at sende en OSC besked – i dette tilfælde, når eventet gazedAt sker, på diamantobjektet.
- OSCControl: her er ingredienserne til at lave OSC ind. Objektet indeholder de samme generelle utility scripts som diamanten, men i stedet for senderen, et receiver script. Gennemgå og kommenter scriptet for at lære hvordan man modtager OSC i Unity.
- Player: i 1ps VR er vi som udgangspunkt bare et kamera der flytter sig rundt med en pointer midt i blikretningen.