Textinmatning för spel med bara en Intel RealSense-kamera

Intel RealSense 3D-kameror ger hand- och fingerspårning till hem-datorer och en lättanvänd SDK för utvecklare, vilket gör dem till en bra ny inmatningsmetod för både VR-spel och skärmbaserade spel. 

Helst skulle vi vilja göra spel som inte kräver att spelaren berör någon typ av kringutrustning vid något tillfälle. Men, som med Kinect och EyeToy, stöter vi på problem när vi står inför en gemensam uppgift: inmatning av text. Att skriva in en karaktär utan att använda ett tangentbord kan vara tråkigt.

I det här inlägget delar jag vad jag har lärt mig om de bästa (och värsta!) Sätten att låta spelare skriva in text via gest enbart och visa hur du konfigurerar Intel RealSense SDK i Unity så att du kan prova det i dina egna spel.

(Observera att jag fokuserar på ASCII-inmatning här, och i synnerhet det engelska alfabetet. Alternativa alfabet och inmatningsmetoder, som stenografi, stenografi och kanji, kan serveras bättre på andra sätt.)

Inputmetoder som vi kan förbättra på

Det finns andra tillvägagångssätt för externa textinmatningar där ute, men de har brister. Vi skulle vilja komma med ett tillvägagångssätt som förbättras på var och en av dem.

Virtuellt tangentbord

Tangentbord är guldstandarden för textinmatning, så vad sägs om att bara efterlikna att skriva på ett tangentbord i luften eller på en plan yta?

Tyvärr är bristen på taktil feedback viktigare än det kan tyckas vid första anblicken. Touch-typing är omöjligt i denna situation, eftersom kinestesi är för felaktig för att agera på tröghetsrörelse ensam. Den fysiska och responsiva handenheten på ett tangentbord ger typisten andra känslan av fingerposition och fungerar som en pågående felkorrigeringsmekanism. Utan det har fingrarna en tendens att flyta från målet, och små positioneringsfel förenas snabbt, vilket kräver en "återställning" till hemnycklar. 

Gestural Alfabet

Vårt första experiment med RealSense för textinmatning var ett försök att känna igen amerikanska teckensnittsfingerstavning. Vi upptäckte att det finns flera svårigheter som gör det här ett opraktiskt val.

Ett problem är hastighet. Kunniga fingerspellrar kan blinka om två bokstäver per sekund eller 120 bokstäver per minut. Med ett genomsnitt på fem bokstäver per ord är det 24 WPM, vilket är betydligt lägre än även den genomsnittliga maskinskrivarens hastighet på 40 WPM. En bra fingerspellare är ungefär hälften så snabb som en ojämn keyboarder.

Ett annat problem är att användaren behöver lära sig en ny teckenuppsättning. Ett av de mindre än uppenbara värdena på ett standardtangentbord är att det överensstämmer med alla andra verktyg vi använder för att skriva. Den tryckta T vi lär oss i dagis är samma T sett på tangentbordet. Att fråga användare att lära sig en ny teckenuppsättning bara för att skriva in text i ett spel är en no-go.

Joystick och rumsinmatning

Spelkonsoler kräver redan regelbundet textinmatning för kreditkortsnummer, lösenord, karaktärsnamn och andra anpassningsbara värden. Den typiska inmatningsmetoden är att visa ett virtuellt tangentbord på skärmen och tillåta en rumslig känslig ingång för att "knacka" på en given nyckel.

Det finns många iterationer av detta koncept. Många använder en joystick för att flytta en markör. Andra kan använda en handspårningsteknologi som Intel RealSense eller Kinect för att göra i huvudsak samma sak (med en våg av handen som fungerar som en knapp på nyckeln). Stephen Hawking använder en konceptuellt liknande inmatning som spårar ögonrörelser för att flytta en markör. Men alla dessa system skapar ett sämst-av-båda-världscenario där en enstaka rumlig ingång, i huvudsak en muspekare, används för att arbeta med en multi-touch-enhet. Det är som att använda en pennavalsmaskin för att skriva ett brev åt gången.

Något intressant arbete har gjorts för att göra joystickinmatning snabbare och mer flexibel av personer som Doug Naimo på Triggerfinger, men ingångshastigheten saknar fortfarande regelbunden typning med stor marginal och är verkligen bara värdefull när bättre eller snabbare inmatningsmetoder är inte tillgänglig.

Min valda inmatningsmetod

Allt detta tal om svagheterna i alternativ textinmatning innebär att det ödmjuka tangentbordet har flera styrkor som inte lätt kan ersättas eller förbättras. Hur kan dessa demonstrerade styrkor bevaras i ett textinmatningssystem som inte kräver några praktiska kringutrustning? Jag tror att svaret ligger i två kritiska observationer:

  • Möjligheten att använda så många som 10 fingrar är omöjligt att träffas eller slå med ett enkelpunktssystem.
  • Tangentbordets snäva, skiktiga och anpassningsbara layout är anmärkningsvärt effektiv, men det är en 2D-design och kan utökas genom att en tredje dimension integreras.

Med allt detta i åtanke kom jag fram med ett enkelt, tvåhandigt gestaltningssystem som jag kallar "facekeys". Så här fungerar det.

Starta enkelt: en räknare

Innan vi kommer till ett helt tangentbord, låt oss börja med en numpad-well, en enkel kalkylator. Vi behöver tio siffror (0 till 9) och fem operatörer (plus, minus, dela, multiplicera och lika). Med sikte på att använda alla tio fingrarna kan vi bryta dessa i två femsiffriga grupper och representera dessa på skärmen som två fyrkantiga pyramider, med operatörerna som en annan pyramid:

Varje finger motsvarar ett ansikte av varje pyramid. Varje ansikte kan betraktas som en "nyckel" på ett tangentbord, så jag ringer dem facekeys. Vänster hand anger siffror 1 till 5 genom att böja fingrarna individuellt, medan rätten går in i siffror 6 till 0. Flexing samma finger i båda händerna samtidigt - båda ringfingrar, säg-aktiverar en facekey på operatörspyramiden. 

Icke-siffra (men nödvändiga) funktioner inkluderar en vänstra näve för att skriva det visade värdet i minnet, en högernäve för att läsa (och rensa) minnet och två stängda nävar för att rensa däcken och starta en ny beräkning.

När jag först testade det här antog jag att användare som håller händerna i handen nedåt (som om de skriver på ett tangentbord) skulle vara mest bekväma. Det visar sig dock att en position med palmer som vetter inåt är bekvämare och möjliggör både längre användning och högre hastighet:

Det visar sig också att visuell återkoppling från skärmen är mycket viktig, särskilt när man lär sig. Vi kan tillhandahålla detta via en välkänd räknare i siffror, men det är också bra att göra pyramiderna själva rotera och animera med varje stroke, för att upprätta och förstärka sambandet mellan ett finger och dess motsvarande facekey.

Detta system är bekvämt och lättlärt, och det är också enkelt utdragbart. Till exempel blir bristen på en decimal och en backspace-nyckel frustrerande snabbt, men dessa ingångar är lätt anpassade till små ändringar. Först kan en högerhänt våg fungera som en backspace. För det andra kan den likvärdiga ansiktsnyckeln ersättas med en decimalpunkt för inmatning, och en "klapp" gest blev lika aktör, som har det förtjusande resultatet att göra beräkningar rytmiska och blygsamt roliga.

Utöka detta till ett helt tangentbord

En periferifri kalkylator är en sak, men en typisk 80+ tangentbordsbyte är helt annan. Det finns emellertid några väldigt enkla och praktiska sätt att fortsätta utvecklingen kring detta nyckelformulär.

Standardtangentbordet är ordnat i fyra rader nycklar plus ett mellanslag: siffror och skiljetecken överst med tre rader undertexter. Varje rad definieras av sin position i rymden, och vi kan använda det här konceptet här. 

I stället för att flytta händerna mot eller bort från en fast punkt som kameran, gör en mer flexibel metod systemet självrefererande. Vi kan låta spelaren definiera ett bekvämt avstånd mellan sina palmer; spelet kommer då att ställa in detta avstånd internt som 1-Delta. Motsvaret att nå olika rader på tangentbordet rör sig då bara närmare eller längre bort från varandra: a 2-Delta distansåtkomst "andra raden" tangenterna, och 3-Delta når tredje rader nycklar.

Håll dina händer 1-Delta från varandra, och de kan skriva en till J; håll dem 2-Delta från varandra, och de kan skriva K till T.

"Home keys" är inställda på detta 1-Delta avstånd och tangentbord fortsätter genom att kartlägga bokstäver och andra tecken till en serie pyramider som sekventiellt täcker hela alfabetet. Experimentation föreslår 3-4 bekväma och lätt reproducerbara Deltas finns mellan händer som rör och axelbredd. Kunniga användare kan hitta många fler, men den inneboende oaktsamheten hos normal kinestesi är sannolikt ett tak för denna faktor.

Enkla gester ger en annan expansionsaxel. Tangentbordet Flytta nyckeln, förvandlar varje nyckel till två, och Ctrl och Alt nycklarna förlänger det ännu mer. Enkla, enhandiga gester skulle skapa exakt samma tillgång till viktiga lager samtidigt som hastighet och flexibilitet bibehålls. Till exempel kan en näve vara Flytta nyckel. En "pistol" -hand kan komma åt redigeringskommandon eller ett antal kombinationer. Genom att använda enhändiga gester för att ändra nyckelfältet kan användaren få åtkomst till olika tecken.

Klar att prova själv? Först måste du installera Intel RealSense SDK och konfigurera plugin för Unity.

Crash Course i Unity och RealSense

Här är ett snabbt genomgång som förklarar hur man installerar och konfigurerar RealSense SDK och Unity. Vi gör en enkel testdemo som ändrar ett objekts storlek baserat på användarens handrörelse.

1. Vad du behöver

Du kommer behöva:

  • En Intel RealSense 3D-kamera (antingen inbäddad i en enhet eller en extern kamera)
  • Unity Professional 4.0 eller högre
  • Den fria Intel RealSense SDK

Du kan också vilja använda detta gratis plugin som låter dig skriva Unity-kod i Visual Studio; det är upp till dig.

Jag ska använda rymdskeppet från Unitys fria Space Shooter-projekt, men du kan bara använda en enkel kub eller något annat objekt om du föredrar.

2. Importera RealSense Unity Toolkit

Paketet innehåller Unity Toolkit för Intel RealSense-teknik innehåller allt du behöver för att manipulera spelobjekt. Unitypaketet är beläget i \ RSSDK \ Framework \ Unity \ mapp. Om du installerade RealSense SDK i standardplatsen, RSSDK mappen kommer att vara i C: \ Programfiler (x86) \ (på Windows).

Du kan importera Unity Toolkit som du skulle ha något paket. När du gör det har du alternativen att välja och välja vad du vill ha. I den här handledningen används vi standardvärdena och importerar allt.

Som du kan se i följande bild finns det nu flera nya mappar under mappen Tillgångar.

  • plugins och Plugins.Managed innehåller DLL-er som krävs för att använda Intel RealSense SDK.
  • RSUnityToolkit är mappen som innehåller alla skript och tillgångar för att köra verktyget.

Vi kommer inte att gå in i vad alla mappar är här; Jag lämnar det för att du ska undersöka!

3. Ställa in scenen

Lägg till skeppet på scenen.

Därefter lägger du till ett riktrikt ljus för att ge skeppet lite ljus så att du kan se det bättre.

Det ska se ut så här:

4. Lägga till skalaåtgärden

För att lägga till skalningsfunktioner till spelobjektet måste vi lägga till ScaleAction manus. De ScaleActionScript är under RSUnityToolkit mapp och i Åtgärder mapp. 

Ta enkelt skriptet och dra och släpp det direkt på skeppet i Scen se. Du kommer nu att kunna se ScaleAction Skriptparametrar i Inspektör

Här har jag kollapsat alla parametrar för att visa de tre grundläggande områdena i skalskriptet: Start Event, de Scale Trigger, och den Stoppa händelsen.

5. Ställa in parametrarna

Börjar med Start Event, expandera pilen för att visa standardutlösaren. I det här fallet vill vi inte använda Gesture Detected, vi vill använda Hand upptäckt

Högerklicka på Gesture Detected och välj Ta bort. Sedan på Start Event's Lägg till knappen, klicka och välj Hand upptäckt. Under Vilket hand, välj och välj ACCESS_ORDER_RIGHT_HANDS.

Nu ska vi ställa in Stoppa händelsen. Expandera Stoppa händelsen och ta bort Gest borttappad rad. Klicka sedan på Stoppa händelsen's Lägg till knappen och välj Handförlorad. Bredvid Vilket hand, Välj ACCESS_ORDER_RIGHT_HANDS.

Vi behöver inte byta Scale Trigger eftersom det bara finns ett alternativ för detta ändå. Vi använder bara standardvärdet.

6. Prova det

Det är allt! Spara din scen, spara projektet och kör det; Du kommer att kunna ändra storlek på fartyget på skärmen med en gest.

Nu är det din tur!

Vi har diskuterat idéerna bakom inmatning av text utan att röra en perifer, och du har sett hur du kommer igång med RealSense SDK i Unity. Därefter är det upp till dig. Ta det du har lärt dig och experimentera! 

Först, få din demo att tolka olika tecken baserat på vilka fingrar du flyttar. Därefter reflektera detta på skärmen på ett lämpligt sätt (du behöver inte använda min pyramidmetod!). Ta sedan det vidare - hur är det med att prova en annan handposition, som med palmer som vetter mot kameran eller en annan ingående rörelse, som att vrida en Rubiks kub?

Intel® Software Innovator-programmet stöder innovativa oberoende utvecklare som visar förmåga att skapa och visa framåtblickande projekt. Innovatörer utnyttjar högtalarskap och demo möjligheter vid branschhändelser och utvecklare sammankomster.

Intel® Developer Zone erbjuder verktyg och information om plattformsutveckling, plattforms- och teknikinformation, kodprover och peer-kompetens för att hjälpa utvecklare att uppfinna och lyckas. Gå med i våra samhällen för Internet av sakerAndroidIntel® RealSense ™ -teknologi, Modern kodSpel Dev och Windows ladda ner verktyg, få tillgång till dev-kit, dela idéer med likasinnade utvecklare och delta i hackatoner, tävlingar, roadshows och lokala evenemang.