Skip to content

Overdrachtsdocument

NielsStudent edited this page Jul 3, 2023 · 8 revisions

Inleiding

Dit document beschrijft de overdracht van het softwareproduct Accessible VR-Escaperoom van Niels Hoogeboom, Julie Gunning, Pepijn van Leeuwen, en Astra Hedvat naar het volgende groepje dat hieraan gaat werken. Het doel van dit document is om alle relevante informatie met betrekking tot het softwareproduct te documenteren en te delen met de nieuwe eigenaar/ontwikkelaar.

Overzicht van het Softwareproduct

Vanuit de samenwerking tussen Stichting Accessibility en het HU Inspiratie-Lab hebben we de opdracht gekregen om een VR-spel te ontwikkelen die gespeeld kan worden door mensen met een visuele beperking. Het doel van deze opdracht is om kennis omtrent toegankelijkheid van VR te vergroten.

Belangrijkste kenmerken van de applicatie:

  • Een border die de controller laat trillen als de speler te dichtbij komt. De border staat ongeveer 1:1 met de ruimte waarin wordt gespeeld.
  • Objecten waarmee de speler kan interacteren.
  • Twee versies waartussen de speler kan switchen: één met trillingen om een object weer te geven en één doormiddel van geluid.
  • Audio cues die de speler in de juiste richting wijzen.

Technische Specificaties

Programmeertalen:

  • Javascript
  • HTML
  • CSS

Technologieën en frameworks:

  • Vite (v. 4.2.0)
  • A-Frame (v. 1.4.0)
  • aframe-haptics-components (v 1.6.3)
  • aframe-extras (v. 7.0.0)
  • node.js (v 8.5.0)

Vereisten:

  • Een Meta Quest VR-bril om het spel goed te testen
  • Redelijke computer met nieuwste versie browser om assets op pc in te laden

Architectuur

Wij hebben onze lagen als volgt ingedeeld:

public/
src/
├── assets/
|   ├── 3DModels/      De modellen voor de objecten
|   ├── sounds/        Geluid                         
├── components/                 
|   ├── environment/   A-Frame componenten                  
|   |   ├── world/     A-Frame componenten voor objecten die we inladen in het spel                     
|   |   ├── player/    A-Frame componenten voor de controller en de camerapositie                    
|   ├── utils/         Functies voor het start-, gameoverscherm en de timer                 
├── scenes/            HTML files die het spel inladen

In de map assets staan alle modellen en geluiden die de componenten vorm geven. Alles wat in de 3d models mag komen te staan zijn mappen met daarin texture en scene.gltf files. Geluid mogen alleen geluid files zijn.

In de folder components/environment/world. Kun je alle files vinden die objecten neer zetten in de wereld. Hierbij wordt gebruik gemaakt van encapsulation want alle files hebben een single responsibiltity. Zo staat er een component Bed.js die zich alleen bezig houdt met wat het bed moet hebben zodat hier duidelijk mee geïnteracteerd kan worden.

Deployment

Er wordt gebruik gemaakt van GitHub Pages om ons spel te hosten: https://hu-ict-lab.github.io/A11Y-VR-Cache/

Voor elke nieuwe feature wordt er een nieuwe branch aangemaakt. Als deze feature klaar is, wordt de code aan de hand van een pull request op de review branch gezet. Als dit is getest, wordt het op de master branch gezet. De master branch wordt gepublished naar GitHub Pages.

Deployment diagram

image

Installatiehandleiding

  • Clone de code van GitHub
  • Open de code in een IDE naar keuze die Javascript en HTML ondersteunt
  • Open de terminal van je IDE
  • Zorg dat je in de root folder zit
  • Type npm install en wacht tot alle dependencies zijn geïnstalleerd

Gebruikershandleiding

Voor desktop:

Het spel is zo geprogrammeerd dat het alleen werkt met de Meta Quest controller. Als je het spel op de computer wilt spelen of testen, zul je de uitgecommente code <!-- <a-cursor raycaster="objects: .interactable"></a-cursor> --> in game.html terug moeten zetten. Ook zitten er EventListeners in de code die luisteren naar specifieke controllerevents, zoals 'abuttonup'. Deze moeten veranderd worden naar 'click'.

  • Type in je terminal npm run dev of ga naar de GitHub Pages link op de GitHub
  • Op de index.html zie je twee knoppen: 'uitleg' en 'start game'. Als je op uitleg drukt wordt de uitleg voorgelezen. Als je op start game drukt, gaat de applicatie naar game.html en begint het spel.

Voor de Meta Quest:

  • Ga via de Meta Quest browser naar de GitHub Pages URL
  • Op de index.html zie je twee knoppen: 'uitleg' en 'start game'. Als je op uitleg drukt wordt de uitleg voorgelezen. Als je op start game drukt, gaat de applicatie naar game.html en begint het spel.
  • Als het spel is ingeladen zie je rechts onderin de browserwindow de knop 'VR' staan. Druk op deze knop.
  • Nu kan het spel gespeeld worden. De controls zijn als volgt:
    • A-knop om te interacteren met objecten
    • B-knop om tussen versies te switchen
    • Home-knop ingedrukt om de wereld weer goed te positioneren in de room scaling van oculus
    • Click-knop (kleine knop achterop de controller) om in versie 2 het object waar je overheen hovert af te laten spelen

Bekende bugs

Er zijn nog wat bekende problemen. Als de wereld wordt ingeladen op de Meta Quest, kan het zo zijn dat de positie van de speler verkeerd wordt ingeladen. Verder is de Meta Quest hardnekkig in het behouden van browserdata. Als je een nieuwe GitHub Pages release wil testen, kan de Meta Quest de oude versie behouden en moet je echt alle browserdata verwijderen om de juiste release in te laden.

Bekende bugs:

  • De wereld loopt vast als je de joystick gebruikt.
  • De wereld loopt soms ook vast zonder duidelijke aanleiding.
  • Om de kamer gelijk te maken aan de borders hebben we de kamer moeten uitrekken. Dit was nodig omdat we niet met dynamische input hebben gewerkt voor de borders.

Daarnaast zitten er een aantal code smells in deze code:

  • Er zitten stukjes dode code in.
  • Er zitten dependencies in die niet meer gebruikt worden.
  • Benaming zou beter en consistenter kunnen.
  • Sommigen functies zouden netter gerefactored kunnen worden zodat deze beter onderhoudbaar en uitbreidbaar zijn.

Hoe verder

In de laatste sprint hebben we feedback gekregen van onze opdrachtgever en testpersonen over hoe ons spel nog toegankelijker kan worden gemaakt:

  • Sommige objecten spelen een geluid af om de speler in de juiste richting te wijzen. Het geluid wordt nu harder naarmate je dichterbij het object bent. In de toekomst kan de toonhoogte van het geluid worden gebruikt om de speler te helpen. Een hoge toon als de speler de controller boven het object richt, en een lage toon als de controller onder het object wordt gericht.
  • Een extra laag complexiteit in het spel. Dit hebben wij niet meer toegevoegd omdat wij vooral bezig zijn geweest met de technologieën.
  • Als het spel complexer wordt gemaakt is het een optie om hints toe te voegen die de speler in de juiste richting stuurt.
  • Mocht er een update komen in A-Frame waarbij de roomscaling wel uitgelezen kan worden, maak hier dan gebruik van in plaats van de handmatige border en zet de trilling dan daarop.
  • Kijk of er meer mogelijk is met het framework three.js
  • Een menu met toegankelijkheidsopties toevoegen waarin spelers hun ervaring nog meer kunnen personaliseren.
  • De border collision verbeteren: op dit moment worden er 16 beacons gebruikt die de afstand tussen de beacon en de speler berekenen en bij een bepaalde waarde een trilling afgeven. Dit is niet extreem nauwkeurig: er zijn situaties te bedenken dat de border nu gaat trillen terwijl de speler nog niet over de border heen is. Beter zou zijn om collision detection te hebben die daadwerkelijk afgaat als de speler de border raakt. Wellicht is a-frame-physics-extras een geschikt component hiervoor.

Decharge

Licentie overeenkomst: Deze licentieovereenkomst wordt gesloten tussen Niels Hoogeboom, Astra Hedvat, Julie Gunning, Pepijn van Leeuwen en Alex Jongman. Deze Overeenkomst regelt het gebruik van het softwareproduct genaamd Accessible-VR Escaperoom door de Licentienemer.

  1. Licentieverlening
  • De Licentienemer mag de Software gebruiken om er verder op uit te bouwen en zo een mooier product neer te kunnen zetten dan dat er al staat
  1. Aansprakelijkheid
  • De Licentiegever is niet aansprakelijk voor enige directe, indirecte, incidentele, bijzondere of gevolgschade die voortvloeit uit het gebruik van de Software. Door het gebruik van de Software verklaart de Licentienemer dat hij/zij deze Overeenkomst heeft gelezen, begrepen en ermee akkoord gaat.

Licentiegever [Naam van de Huidige Eigenaar/Ontwikkelaar] [Bedrijfsnaam] [Contactgegevens]

Licentienemer: [Naam licentienemer]