Tekstinngang for spill med bare et Intel RealSense-kamera

Intel RealSense 3D-kameraer gir hånd- og fingersporing til hjemmekomputer og en brukervennlig SDK for utviklere, noe som gjør dem til en flott ny inngangsmetode for både VR-spill og skjermbaserte spill. 

Ideelt sett vil vi gjerne kunne lage spill som ikke krever at spilleren til enhver tid berører noen form for perifer. Men som med Kinect og EyeToy løper vi inn i problemer når vi står overfor en felles oppgave: å skrive inn tekst. Selv å skrive inn et tegn uten å bruke et tastatur kan være kjedelig.

I dette innlegget vil jeg dele hva jeg har lært om de beste (og verste!) Måtene å la spillerne skrive inn tekst via gest alene og vise deg hvordan du konfigurerer Intel RealSense SDK i Unity, så du kan prøve det i dine egne spill.

(Merk at jeg fokuserer på ASCII-inngang her, og spesielt det engelske alfabetet. Alternativ alfabeter og innstillingsmoduser, som stenografi, stenografi og kanji, kan bli servert bedre på andre måter.)

Inputmetoder vi kan forbedre på

Det finnes andre tilnærminger for perifer-fri tekstinngang der ute, men de har feil. Vi ønsker å komme opp med en tilnærming som forbedrer seg på hver av dem.

Virtuelt tastatur

Tastaturer er gullstandarden for tekstoppføring, så hva med å bare etterligne å skrive på et tastatur i luften eller på en flat overflate?

Dessverre er mangelen på taktil tilbakemelding viktigere enn det som kan virke ved første øyekast. Berøringstrykk er umulig i denne situasjonen, fordi kinestesi er for unøyaktig for å opptre på inertial bevegelse alene. Den fysiske og responsive berøringen av et tastatur gir typografen en annen følelse av fingerposisjon og fungerer som en kontinuerlig feilkorrigeringsmekanisme. Uten det, har fingrene en tendens til å skli av målet, og svake posisjoneringsfeil er raskt sammensatt og krever en "tilbakestilling" til hjemmeknapper. 

Gestural Alfabet

Vårt første eksperiment med RealSense for tekstinnspilling var et forsøk på å gjenkjenne amerikansk tegnsprogfingerstaving. Vi oppdaget at det er flere vanskeligheter som gjør dette til et upraktisk valg.

Ett problem er hastighet. Proficient finger-spellers kan blinke om to bokstaver per sekund eller 120 bokstaver per minutt. I gjennomsnitt på fem bokstaver per ord, er det 24 WPM, som er betydelig under selv den gjennomsnittlige maskinens hastighet på 40 WPM. En god fingerspiller er omtrent halvparten så fort som en så viktig tastatur.

Et annet problem er at brukeren skal lære et nytt tegnsett. En av de mindre enn åpenbare verdiene til et standardtastatur er at det passer til alle de andre verktøyene vi bruker til å skrive. Den trykte T vi lærer i barnehagen er det samme T sett på tastaturet. Å spørre brukere om å lære et nytt tegnsett bare for å skrive inn tekst i et spill er en no-go.

Joystick og romlig inngang

Spillkonsoller krever allerede regelmessig tekstinngang for kredittkortnumre, passord, tegnnavn og andre tilpassbare verdier. Den typiske inngangsmetoden er å vise et virtuelt tastatur på skjermen og tillate en romlig sensitiv inngang for å "trykke" på en gitt tast.

Det er mange iterasjoner av dette konseptet. Mange bruker en joystick til å flytte en markør. Andre kan bruke en håndsporingsteknologi som Intel RealSense eller Kinect til å gjøre i det vesentlige det samme (med en bølge av hånden som fungerer som et trykk på nøkkelen). Stephen Hawking bruker en konseptuelt lignende inngang som sporer øyebevegelser for å flytte en markør. Men alle disse systemene skaper et worst-of-both-worlds scenario der en enkeltpunkts romlig inngang, i hovedsak en musepeker, brukes til å arbeide med en multi-touch-enhet; Det er som å bruke en blyantvisker for å skrive ett brev om gangen.

Noe interessant arbeid har blitt gjort for å gjøre joystick-tekstinngangen raskere og mer fleksibel av folk som Doug Naimo ved Triggerfinger, men inntakshastigheten faller fortsatt på vanlig skriving med stor margin, og er egentlig bare verdifull når bedre eller raskere inngangsmetoder er utilgjengelig.

Min valgte inngangsmetode

Alt dette snakk om svakhetene i alternative tekstinngangsmetoder innebærer at det ydmyke tastaturet har flere styrker som ikke lett kan erstattes eller forbedres. Hvordan kan disse demonstrerte styrkene bevares i et tekstinngangssystem som ikke krever noen praktisk eksterne enheter? Jeg tror svaret ligger i to kritiske observasjoner:

  • Evnen til å bruke så mange som 10 fingre er umulig å møte eller slå med et enkeltpunktssystem.
  • Den tette, lagrette og tilpassbare utformingen av tastaturet er bemerkelsesverdig effektiv, men det er en 2D-design, og kan utvides ved å inkorporere en tredje dimensjon.

Med alt dette i tankene, kom jeg opp med et enkelt, tohånds gestural system som jeg kaller "facekeys". Slik fungerer det.

Starter Enkel: En Kalkulator

Før vi kommer til et fullt tastatur, la oss starte med en numpad-brønn, en enkel kalkulator. Vi trenger ti sifre (0 til 9) og fem operatører (pluss, minus, splitt, multipliser og ligner). Med sikte på å bruke alle ti fingrene, kan vi bryte disse inn i to femsifrede grupper, og representere disse på skjermen som to firkantede pyramider, med operatørene som en annen pyramide:

Hver finger tilsvarer ett ansikt på hver pyramide. Hvert ansikt kan betraktes som en "nøkkel" på et tastatur, så jeg ringer dem facekeys. Den venstre hånden går inn i sifrene 1 til 5 ved å bøye fingrene individuelt, mens høyre kommer inn i sifrene 6 til 0. Flekker den samme fingeren på begge hender samtidig - begge ringfingre, si-aktiverer en ansiktsnøkkel på operatørpyramiden. 

Ikke-siffer (men essensielle) funksjoner inkluderer en venstrefire for å skrive den viste verdien til minne, en høyrefire for å lese (og slette) minnet og to lukkede knyttneve for å fjerne dekkene og starte en ny beregning.

Da jeg først testet dette ut, antok jeg at brukere som holder hendene nedover (som om de skriver på tastatur) ville være mest komfortable. Det viser seg imidlertid at en posisjon med palmer vendt innover er mer behagelig, og gir både lengre bruk og mer fart:

Det viser seg også at visuell tilbakemelding fra skjermen er svært viktig, spesielt når man lærer. Vi kan gi dette via en kjent kalkulator-stil sifferavlesning, men det er også godt å få pyramidene til å rotere og animere med hvert slag, for å etablere og forsterke forbindelsen mellom en finger og den tilhørende ansiktsnøkkelen.

Dette systemet er komfortabelt og lett lært, og er også lett utvidbart. For eksempel blir mangelen på et desimaltegn og en backspace nøkkel frustrerende raskt, men disse inngangene er lett innkvartert med mindre endringer. For det første kan en høyrehendt bølge fungere som et backspace. For det andre kan de samme ansiktsnålene erstattes med et desimalpunkt for oppføring, og en "klapp" -bevegelse ble like aktør, som har det herlige resultatet av å gjøre beregningene rytmiske og beskjeden.

Utvide dette til et fullt tastatur

En perifere kalkulator er en ting, men en typisk 80+ tastaturutskiftning er ganske annen. Det er imidlertid noen svært enkle og praktiske måter å fortsette utviklingen rundt dette keyfacing-konseptet.

Standardtastaturet er ordnet i fire rader med nøkler pluss et mellomrom: tall og tegnsetting på toppen med tre rader med bokstaver under. Hver rad er definert av sin posisjon i rommet, og vi kan bruke det konseptet her. 

I stedet for å bevege hendene mot eller vekk fra et fast punkt som kameraet, gjør en mer fleksibel metode systemet selvreferensiell. Vi kan la spilleren definere en behagelig avstand mellom deres palmer; Spillet vil da angi denne avstanden internt som 1-Delta. Tilsvarende når du kommer til forskjellige rader på tastaturet, er det bare å flytte hender nærmere eller lenger fra hverandre: a 2-Delta avstandstilganger "andre rad" nøkler, og 3-Delta når tredje rad nøkler.

Hold hendene dine 1-Delta fra hverandre, og de kan skrive EN til J; hold dem 2-Delta fra hverandre, og de kan skrive K til T.

"Hjem-nøklene" er satt til dette 1-Delta avstand og keyfacing fortsetter ved å kortlegge bokstaver og andre tegn til en rekke pyramider som sekvensielt dekker hele alfabetet. Eksperimentasjon antyder 3-4 behagelige og lett reproduserbare Deltas eksisterer mellom hender som berører og skulderbredde. Fagfolk kan finne mange flere, men den inneboende unøyaktigheten av normal kinestesi er sannsynligvis et tak på denne faktoren.

Enkle bevegelser gir en annen ekspansjonsaksjon. Tastaturet er Skifte nøkkel, for eksempel, forvandler hver nøkkel til to, og Ctrl og alt nøklene forlenge det enda mer. Enkle, enhåndsbehandlede bevegelser vil skape nøyaktig samme tilgang til viktige lag samtidig som hastighet og fleksibilitet opprettholdes. For eksempel kan en knyttneve være Skifte nøkkel. En "pistol" -hånd kan få tilgang til redigeringskommandoer eller et hvilket som helst antall kombinasjoner. Ved å bruke enkelthåndsbevegelser for å endre keyfaces, kan brukeren få tilgang til forskjellige tegn.

Klar til å prøve det selv? Først må du installere Intel RealSense SDK og sette opp plugin for Unity.

Crash Course i Unity og RealSense

Her er en rask gjennomgang som forklarer hvordan du installerer og konfigurerer RealSense SDK og Unity. Vi lager en enkel testdemo som endrer objektets størrelse basert på brukerens håndbevegelse.

1. Hva du trenger

Du vil trenge:

  • Et Intel RealSense 3D-kamera (enten innebygd i en enhet eller et eksternt kamera)
  • Unity Professional 4.0 eller høyere
  • Den gratis Intel RealSense SDK

Du kan også ønske å bruke dette gratis pluginet som lar deg skrive Unity-kode i Visual Studio; det er opp til deg.

Jeg skal bruke romskipet fra Unitys gratis Space Shooter-prosjekt, men du kan bare bruke en enkel terning eller et annet objekt hvis du foretrekker.

2. Importerer RealSense Unity Toolkit

Pakken som inneholder Unity Toolkit for Intel RealSense-teknologi inneholder alt du trenger for å manipulere spillobjekter. Enhetspakken ligger i \ RSSDK \ Framework \ Unity \ mappe. Hvis du installerte RealSense SDK i standardplasseringen, vil RSSDK mappen vil være i C: \ Programfiler (x86) \ (på Windows).

Du kan importere Unity Toolkit som du ville noen pakke. Når du gjør det, har du mulighetene til å velge og velge hva du vil. I denne veiledningen vil vi bruke standardinnstillingene og importere alt.

Som du ser i det følgende bildet, er det nå flere nye mapper under mappen Assets.

  • plugins og Plugins.Managed inneholder DLLer som kreves for bruk av Intel RealSense SDK.
  • RSUnityToolkit er mappen som inneholder alle skript og ressurser for å kjøre verktøysettet.

Vi vil ikke gå inn i hva alle mappene er her; Jeg la det for deg å undersøke!

3. Sette opp scenen

Legg skipet til scenen.

Deretter legger du et retningslys for å gi skipet noe lys, slik at du kan se det bedre.

Det skal se slik ut:

4. Legge til skaleringsaksjonen

For å legge til skaleringsfunksjoner til spillobjektet, må vi legge til ScaleAction manus. De ScaleActionScript er under RSUnityToolkit mappe og i handlinger undermappe. 

Bare ta tak i skriptet og dra og slipp det direkte på skipet i scene utsikt. Du vil nå kunne se ScaleAction Skriptparametere i Inspektør

Her har jeg kollapset alle parametrene for å vise de tre grunnleggende områdene av skaleringsskriptet: Start Event, de Scale Trigger, og Stopp hendelsen.

5. Stille inn parametrene

Starter med Start Event, utvider pilen for å vise standard utløseren. I dette tilfellet ønsker vi ikke å bruke Bevegelsesoppdaget, vi vil bruke Hånd oppdaget

Høyreklikk på Bevegelsesoppdaget og velg Fjerne. Så, på Start Event's Legg til knappen, klikk og velg Hånd oppdaget. Under Hvilken hånd, velg og velg ACCESS_ORDER_RIGHT_HANDS.

Nå skal vi sette Stopp hendelsen. Utvid Stopp hendelsen og fjern Bevegelse tapt rad. Deretter klikker du på Stopp hendelsen's Legg til knappen og velg Hånd tapt. Ved siden av Hvilken hånd, å velge ACCESS_ORDER_RIGHT_HANDS.

Vi trenger ikke å endre Scale Trigger fordi det er bare ett alternativ for dette uansett. Vi bruker bare standardinnstillingen.

6. Prøv det

Det er det! Lagre din scene, lagre prosjektet, og kjør det; Du vil kunne endre størrelsen på skipet på skjermen med en gest.

Nå er det din tur!

Vi har diskutert ideene bak å skrive inn tekst uten å berøre en perifer, og du har sett hvordan du kommer i gang med RealSense SDK i Unity. Deretter er det opp til deg. Ta det du har lært og eksperimentere! 

Først må du få demoen til å tolke forskjellige tegn basert på hvilke fingre du beveger deg. Deretter reflektere dette på skjermen på en passende måte (du trenger ikke å bruke min pyramide metode!). Så ta det videre - hva med å prøve en annen håndstilling, som med palmer som vender mot kameraet, eller en annen innspillingsbevegelse, som å vri en Rubiks kube?

Intel® Software Innovator-programmet støtter innovative, uavhengige utviklere som viser evne til å lage og demonstrere fremadrettede prosjekter. Innovatører utnytter høyttalerskap og demo muligheter ved industri hendelser og utvikler sammenkomster.

Intel® Developer Zone tilbyr verktøy og veiledningsinformasjon for plattformsapputvikling, plattform og teknologiinformasjon, kodeprøver og faglig kompetanse for å hjelpe utviklere til å innovere og lykkes. Bli med i våre fellesskap for Internett av tingAndroidIntel® RealSense ™ -teknologi, Moderne kodeSpill Dev og Windows å laste ned verktøy, få tilgang til dev kits, dele ideer med likesinnede utviklere, og delta i hackoner, konkurranser, roadshows og lokale arrangementer.