Virtual Reality-spel och gör din kropp en Controller! (Unity + Visual Studio + Kinect + Oculus) (9 / 11 steg)

Steg 9: Hand kontroller med Kinect




Nästa skriptet skapar vi kommer att vara den som vi använder i vårt spel tillsammans med kroppen manager skriptet. Det kommer att upptäcka tillståndet hand och utlösa rotation för vårt spel.

Hand Manager Script

Nu skapa en annan i samma mapp som skriptet manager kropp och kropp Visa manager tecken. Kalla det HandManager. Detta skript kommer att se mycket ut vår kropp View controller.

Lägg till följande från BodyView vårt HandManager skript.

använder UnityEngine;

använder System.Collections;

använder System.Collections.Generic;

använda Kinect = Windows.Kinect;

allmän klass HandManager: MonoBehaviour

{

offentliga GameObject BodyManager;

privat PlatformRotate platformRotate;

privat OVRInfinitePlayerController ovrPlayerScript;

privat InfinitePlayerController playerScript;

privat ordlista _Bodies = ny ordbok ();

privat BodyManager _BodyManager;

privat float flipTimer;

privat float flipDelay = 2;

int prevState = 0;

privat ordlista _BoneMap = ny Dictionary()

{

{Kinect.JointType.FootLeft, Kinect.JointType.AnkleLeft},

{Kinect.JointType.AnkleLeft, Kinect.JointType.KneeLeft},

{Kinect.JointType.KneeLeft, Kinect.JointType.HipLeft},

{Kinect.JointType.HipLeft, Kinect.JointType.SpineBase},

{Kinect.JointType.FootRight, Kinect.JointType.AnkleRight},

{Kinect.JointType.AnkleRight, Kinect.JointType.KneeRight},

{Kinect.JointType.KneeRight, Kinect.JointType.HipRight},

{Kinect.JointType.HipRight, Kinect.JointType.SpineBase},

{Kinect.JointType.HandTipLeft, Kinect.JointType.HandLeft}, //Need detta för HandSates

{Kinect.JointType.ThumbLeft, Kinect.JointType.HandLeft},

{Kinect.JointType.HandLeft, Kinect.JointType.WristLeft},

{Kinect.JointType.WristLeft, Kinect.JointType.ElbowLeft},

{Kinect.JointType.ElbowLeft, Kinect.JointType.ShoulderLeft},

{Kinect.JointType.ShoulderLeft, Kinect.JointType.SpineShoulder},

{Kinect.JointType.HandTipRight, Kinect.JointType.HandRight}, //Needthis för Hand

{Kinect.JointType.ThumbRight, Kinect.JointType.HandRight},

{Kinect.JointType.HandRight, Kinect.JointType.WristRight},

{Kinect.JointType.WristRight, Kinect.JointType.ElbowRight},

{Kinect.JointType.ElbowRight, Kinect.JointType.ShoulderRight},

{Kinect.JointType.ShoulderRight, Kinect.JointType.SpineShoulder},

{Kinect.JointType.SpineBase, Kinect.JointType.SpineMid},

{Kinect.JointType.SpineMid, Kinect.JointType.SpineShoulder},

{Kinect.JointType.SpineShoulder, Kinect.JointType.Neck},

{Kinect.JointType.Neck, Kinect.JointType.Head},

};

Nu har vi lagt till en variabel som inte är i vårt bodyview skript som är variabeln prevState.

int prevState = 0;

Vi har variabeln att förhindra konstant roterande. I de regelbundna ingående kontrollerna av spelet vi gör går detta genom att endast aktivera rotation när nyckeln är som trycktes, upp. Med Kinect är det bra att ha en vila stat som måste uppnås om vi vill rotera eller vända igen. I vårt fall är resten någon hand stat som inte signalerar ett rotationssystem. till exempel när båda händerna är i nävarna.

I metoden Update måste vi nu lägga till följande:

void Update()
{
int state = 0;
om (BodyManager == null)
{
hemkomst.
}
_BodyManager = BodyManager.GetComponent();
om (_BodyManager == null)
{
hemkomst.
}
Kinect.Body [] data = _BodyManager.GetData();
om (data == null)
{
hemkomst.
}
Lista < ulong > trackedIds = ny lista < ulong > ();
foreach (var kroppen i data)
{
om (kroppen == null)
{
fortsätta;
}
om (kropp. IsTracked)
{
trackedIds.Add (organ. TrackingId);
}
}

Lista < ulong > knownIds = ny lista < ulong > (_Bodies.Keys);
Först ta bort ospårad organ
foreach (ulong trackingId i knownIds)
{
om (! trackedIds.Contains(trackingId))
{
Destroy(_Bodies[trackingId]);
_Bodies.Remove(trackingId);
}
}
}

Alla koden ovan är samma som kroppen Visa, vilket är bra eftersom vi redan vet hur det fungerar.

Det enda som skiljer är:

int state = 0;

Denna variabel kommer att hålla hand nuläget, och vid slutet av metoden Update, vi kommer att spara den i tidigare statens variabeln.

Nästa del av metoden update som skiljer sig är på en foreach loop.

void Update()

{

int state = 0;

om (BodyManager == null)

{

hemkomst.

}

_BodyManager = BodyManager.GetComponent ();

om (_BodyManager == null)

{

hemkomst.

}

Kinect.Body [] data = _BodyManager.GetData();

om (data == null)

{

hemkomst.

}

Lista trackedIds = ny lista ();

foreach (var kroppen i data)

{

om (kroppen == null)

{

fortsätta;

}

om (kropp. IsTracked)

{

trackedIds.Add (organ. TrackingId);

}

}

Lista knownIds = ny lista (_Bodies.Keys);

Först ta bort ospårad organ

foreach (ulong trackingId i knownIds)

{

om (! trackedIds.Contains(trackingId))

{

Destroy(_Bodies[trackingId]);

_Bodies.Remove(trackingId);

}

}

foreach (var kroppen i data)
{
om (kroppen == null)
{
fortsätta;
}
om (kropp. IsTracked)
{
Kontrollera sidan om kroppen spåras
State = CheckLeftHandState (organ. HandLeftState) + (2 * CheckRightHandState (organ. HandRightState));
}
}

}

Vi behöver skriva CheckLeftHandState och CheckRIghtHandState metoder. Dessa metoder ta parametern Kinect.HandState som motsvarar en enumerable stängd, öppen eller Lasso. Båda återkommer en int som vi kommer att ställa lika med variabeln staten att berätta spelet vad kommandot vi vill genomföra.

privata int CheckRightHandState (Kinect.HandState handState2)
{
int resultatet = 0;
växel (handState2)
{
Normal
fall Kinect.HandState.Closed:
resultat = 0;
bryta;
Stanna
fall Kinect.HandState.Open:
resultat = 0;
bryta;
Flip
fall Kinect.HandState.Lasso:
resultat = 1;
bryta;
standard:
resultat = 0;
bryta;
}
returnera resultat;
}

privata int CheckLeftHandState (Kinect.HandState handState1)
{
int resultatet = 0;
växel (handState1)
{
Normal
fall Kinect.HandState.Closed:
resultat = 0;
bryta;
Flip
fall Kinect.HandState.Open:
resultat = 3;
bryta;
Vänster
fall Kinect.HandState.Lasso:
resultat = 1;
bryta;
standard:
resultat = 0;
bryta;
}
returnera resultat;
}

Ursprungligen spelet vänt om båda händerna var i lasso tillstånd, men det är svårare att kontrollera, eftersom för en ram ena sidan kanske kännas aningen snabbare än den andra, och således spelet förutsätter vi roterar istället för att vända.

Så nu spelet: roterar rätt om höger hand ensam är i lasso tillstånd. roterar vänster om vänster hand är i lasso tillstånd. och vänder om vänster hand är öppet.

Med både CheckLeftHandState och CheckRightHandState metoder gjort vi kan gå tillbaka till metoden Update och avsluta det. Just nu behöver vi bara se om Kinect registrerar våra hand stater ordentligt. För att göra detta skapar vi en switch-sats som använder det aktuella läget och sedan kontrollerar vad var det tidigare tillståndet, att förhindra kontinuerlig rotation. Om det tidigare var en vilsam vi rotera, eller den i detta fall skriva ut till Debug-skärmen.

om (kropp. IsTracked)
{
Kontrollera sidan om kroppen spåras
State = CheckLeftHandState (organ. HandLeftState) + (2 * CheckRightHandState (organ. HandRightState));
Switch (state)
{
fall 0:
bryta;
fall 1:
Vänster
om (prevState == 0)
Debug.Log("Left");
bryta;
fall 2:
Höger
om (prevState == 0)
Debug.Log("Right");
bryta;
fall 3:
Både
om (prevState == 0)
{
Debug.Log("Both");
}
bryta;
standard:
bryta;
}
prevState = staten.
}
}
}

Okej så låt oss se om detta fungerar. Skapa en annan tomt spel objekt i din scen och kallar det HandManager. Bifoga handmanager skriptet till den. Kom ihåg att dra av BodyManager från hierarkin till platshållaren BodyManger i den HandManager granskare.

BILD 1

Kör koden i enighet.

BILD 2

Okej men vi ser fortfarande skelettet. Bra om vi avaktivera bodyView genom att markera rutan vänster hand i granskaren kan vi köra projektet igen.

BILD 3

BAM! Är där det, och du vet det är fortfarande arbeta utifrån Debugger även om du inte kan se skelettet längre!

Okej nu för att lägga till detta in i spelet. Första låt oss göra prefabricerade ur HandManager och BodyManager objekt.

BILD 4

När du har skapat dem dra kroppen Manager från hierarki till kroppen Manager Prefab du skapat. Gör samma sak med Hand Manager. Nu som prefabricerade kan vi enkelt flytta dessa objekt och funktioner i våra viktigaste spel scen!

Se Steg
Relaterade Ämnen

Hur man lägger in spel och program på din TI-84 med hjälp av MirageOS.

Jag gör detta instructables eftersom när jag fick min Ti-84 Plus, jag letade efter en guide att sätta spel på den. Jag hittade en annan instructables där de använde Ion men det fungerade inte för mig av någon anledning. Så jag tittade runt på interne...

Hur får alla GBC spel (och DOOM) på din iPod med Rockbox!

Någonsin velat spiff upp din iPod? Ville ha svalare funktioner...? Följ detta instructable!Också: Ha tålamod med mig, jag är bara 13 och detta är min första instructable, snälla kommentar om detta hjälpte dig :DSteg 1: Få RockBox Först behöver du någ...

OBJEKTET identifiering och spårning med hjälp av OPENCV, VISUAL STUDIO C ++ 2010 och ARDUINO

IntroduktionI detta projekt skickar Webcam video ramar till Visual Studio C ++ som innehåller öppen CV biblioteket på vår dator.Om Visual Studio C ++ programmet upptäcker bilden av objektet från webbkameran och sedan beräknas de co koordinaterna X, Y...

Ett helt 3D utskrivbara Mixed Reality spel (Pseussudio)

Med tanke på den förestående lanseringen av Projekt Tango 3D scanning smartphone från Google och Lenovo, som sannolikt 3D scanning-kompatibel iPhone 7 Plus från Apple, beslöt jag att skapa en grov proof-of-concept spel att visa ett komplett blandad v...

3D-modellering och skriva ut din egen skugga kub

En initialer skugga kub är en kub där varje vy av kuben (överst, front och sida-vy) är profilen av en annan bokstav. Detta kommer från boken Gödel, Escher, Bach, av Douglas Hofstadter. En skugga kub är en riktigt trevlig grundläggande 3D design utman...

Ersätter och krydda upp din Xbox Controller

har du knappar på din xbox controller som stick och strula till ditt spel? Är du trött på att titta på tråkiga standard svart eller vit handkontrollen? Vill du imponera på dina vänner med en bländande, sexig controller? Om du svarat "ja" på någo...

Göra en låda och armband till din käraste stjärna

Julen är dags och jag gillar att ge bort hemgjorda presenter. I år blir det ett armband i en snidad låda med ett speciellt meddelande.Jag ville spela med ord och stjärnor. På locket till rutan jag ristade: "Du är stjärnan i mitt liv". På ena sid...

Titta på TV-kanaler från hela världen gratis på ditt hem TV och förvandla din TV till en billig hem-PC

Med hjälp av en $50 Android Mini PC (hittas via Amazon eller eBay), ex-pats eller alla som vill berika sina kunskaper i främmande språk titta på utländska TV-stationer på deras hem TV. Android Mini PC ansluter till en HDTV uppsättning, och med tilläg...

Ladda ner flash spel och spela dem offline

denna guide kommer att lära dig hur man spelar online spel offline.Varför skulle du vill göra detta:Offline spelet fungerar med fullscreen.Du kan ha en stor samling.Du kan spela dem offline.* rekommenderas** RekommenderasDu behöver:En dator (windows/...

Dela och spåra dina böcker med BookCrossing

BookCrossing är en webbplats som gör att du kan tilldela unika nummer till dina böcker, och använda dessa nummer för att spåra dina böcker som de reser över hela världen. Detta blir naturligtvis mycket mer spännande om dina böcker faktiskt få lämna d...

Hur man spela telefon musik på din TV

någonsin velat spela musik högt men du inte vill betala för och dyra dock eller en dyr adapter kabel? Denna tutorial ska show dig hur man gör en för bara om under $10!Steg 1: Saker du behöver: Behöver du (uppifrån och ned) â ¢ 1 RCA Y kabel â ¢ 1 dub...

Spel och titta på bälte spänne

jag älskar Nintendos spel och klockor. För mig är detta min barndom, tappats upp i små, fickformat, rektanglar av härliga spelglädje.Min första någonsin var en Donkey Kong Jr när jag var 7. Inledningsvis kämpade jag för ett par dagar att få den lilla...

Hur man syr en söt sommarklänning solen och göra dina egna kläder

denna underbara, trendig klänning var med i vår "Varje stil har en gemensam Thread" annons att representera en Valley Girl look. Det inspirerades av tecken som Elle Woods från Legally Blonde och Cher från Clueless. Klänningen kräver en teknik so...

Förbättrat Strata för mindre än $20, planteringsjord och Semi - Sheilding din gitarr

ja jag har en indonesiska utformad Squire Strat (jag normalt berätta för människor är det en vintage Fender). Som med alla billiga nybörjare elgitarrer särskilt sådana med enda spole pickups får du en massa foder tillbaka och un-ville oväsen.Efter da...

Duschförhänge inte längre hålla sig till din kropp

om du har ett duschdraperi vet du förmodligen fenomenet att gardinen gillar dig så mycket och försöker hålla sig till din kropp i duschen.En väldigt enkel fix kom fram till mig för det problemet:De flesta av dusch badkar är tillverkade av stål omfatt...

Hur man ska spela och tjäna pengar i kungariket av avsky.

Detta instructable kommer att visa människor hur man skapar en karaktär och hur man gör kött (spelets valuta)__________________________________________________________________________Tre skäl varför detta spel är bra:-A DnD (dungeons n' drakar) parod...

Atari Punk konsol - Konduktiv bläck & din kropp

bygga en enkel Atari Punk konsolen som använder ledande bläck och din kropp för att ändra ljudet! Banan här var modellerad av Joshua Zimmerman underbara instructable. Den ursprungliga designen för APC eller "Klev tongeneratorn" krediteras skog M...

ULTIMATIVE spel och arbetar DESKTOP

HejJag vill presentera min gaming och arbetande skrivbordet och visa dig hur jag gjorde det!Kan börja med den grundläggande idén:Jag ville skapa ett skrivbord, som är mycket bekväma och customizalbe för ägaren.Jag ville också en inre dator, så man ka...

The Walking Dead säsong 2, Android - Hur till backningen och hålla dina framsteg

Uppdatering 22/03/2015: möjligt fix för ljudproblem.Jag märkte på min ROM (Team UB) som i menyn finns ett avsnitt "Prestanda".Där är bara en switch "Aktivera per-app profiler".Som standard är det "på", jag stängt av och alla...