◉ VR-kurser
▶ Spela webbversionen

11. Interaktioner: hink, nyckel och medkit

Målet

Kunna lägga till ett nytt föremål som spelaren kan använda utan att duplicera styrlogik för desktop och VR. Läs nearestAction() och interact() i main.js.

Ett beslut, två inmatningssätt

På desktop anropar E funktionen interact(). I VR anropar grip samma funktion med en hand som argument. Funktionen räknar ut en ungefärlig plats nära spelaren eller handen och ber nearestAction() hitta det närmaste interagerbara objektet. Gränsen är 1,6 meter i X–Z-planet.

nearestAction() går igenom hinkar, synliga nycklar, medkit när hälsan inte är full, magasin och stängda dörrar. Den returnerar ett litet objekt med kind och object. interact() väljer sedan åtgärd med if (kind === ...). Det gör att ett nytt objekt behöver registreras på två ställen: som möjlig kandidat och som konkret handling.

Synlighet är inte samma sak som ägande

En nyckel skapas från början men är visible = false. När hinken flyttas blir nyckeln synlig och får ljus och markörer. Det betyder inte att spelaren äger den. Först collectKey() ändrar state.keys[number - 1] och tar bort 3D-objektet. Denna skillnad förhindrar att en dold nyckel låser upp en dörr för tidigt.

Medkit har motsatt regel: vid full hälsa ska det ligga kvar. Om hälsan är lägre än max kan spelaren använda E/grip eller bara gå in i föremålet. restoredHealth() begränsar resultatet till maxhälsan. HUD visar "Health full" när ett medkit är nära men inte kan användas.

Testa systematiskt

  1. Stå två meter från första hinken och tryck E. Ingenting ska plockas upp.
  2. Gå närmare och tryck E: hinken flyttas och nyckeln syns tydligt.
  3. Tryck E igen eller gå väldigt nära efter den korta visningspausen. Nyckelräknaren ska bli 1/2.
  4. Förlora hälsa, gå in i ett medkit och kontrollera ökning. Upprepa vid full hälsa: medkitet ska ligga kvar.

Gör en egen enkel interaktion

I din kopia kan du lägga till en stationär informationsskylt. Skapa en THREE.Group, placera den i banan och lägg den i en egen lista. Låt nearestAction() överväga kind: 'sign' och låt interact() anropa announce('Find two keys'). Börja med en enda skylt nära startplatsen. Om den inte fungerar: kontrollera avståndet, att gruppen finns i scenen och att spelrundan har startat.

Klart när: du kan förklara varför en interaktion behöver både ett 3D-objekt, en avståndskontroll och en ändring i spelstatus eller HUD.