Handcoach – MRTK2

Handbussmeny

Handbussen är en 3D-modellerad hand som utlöses när systemet inte identifierar användarens händer. Detta implementeras som en "undervisningskomponent" som hjälper användaren när gesten inte har lärts ut. Om användarna inte har gjort den angivna gesten under en period loopar händerna med en fördröjning. Handcoach kan användas för att representera att trycka på en knapp eller plocka upp ett hologram.

Den aktuella interaktionsmodellen representerar en mängd olika gestkontroller, till exempel rullning, långt urval och nära tryckning. Nedan visas en fullständig lista över befintliga Hand coach-exempel:

  • Nära tryckning – Används för knappar eller stäng interaktionsbara objekt
  • Långt val – används för objekt som är långt borta
  • Flytta – Används för att flytta ett hologram i blanksteg
  • Rotera – används för att visa hur du roterar hologram eller objekt
  • Skala – Används för att visa hur du ändrar hologram till att vara större eller mindre
  • Hand flip – Används för att ta upp en startpanel för användargränssnittet eller handmenyer
  • Palm up - Används för kolibri ögonblick in ur lådan erfarenhet. Ett annat förslag kan vara att ta upp en startpanel för användargränssnittet
  • Rulla – används för att rulla en lista eller ett långt dokument

Exempelscen

Du hittar exempel i HandCoachExample-scenen under: MixedRealityToolkit.Examples/Experimental/HandCoach/Scenes

Hand 3D-tillgångar

Du hittar tillgångarna under: MixedRealityToolkit.SDK/Experimental/HandCoach

Kvalitet

Om du märker snedvridningar på det flådda nätet måste du se till att projektet använder rätt mängd leder. Gå till Unitys Redigera > projektinställningar > Kvalitet > Andra > blandningsvikter. Se till att "4 ben" har valts för att se Smooth Joints. Projektinställning

Skript

Interaktionstips

Skriptet InteractionHint.cs innehåller omslutningsfunktioner för att utlösa animeringar och toningar för handriggen.

Så här konfigurerar du ett interaktionstips

Om du vill konfigurera ett interaktionstips rekommenderar vi att du använder de angivna prefaberna "StaticHandCoachRoot_L.prefab" och "StaticHandCoachRoot_R.prefab". Den här prefab innehåller InteractionHint-skriptet och handriggen samt rätt hierarki för att säkerställa att de angivna tipsanimationerna fungerar som avsett. Annars måste du placera skriptet på en gameObject en överordnad nivå upp från din handrigg med animatör.

Egenskaper för kontroll

  • HideIfHandTracked Det här booleska värdet anger om handspårningstillstånd ska användas för att dölja visuella objekt när en användares händer spåras. Om detta är inställt på false används endast skriptegenskapen "customShouldHideVisuals" för att avgöra om tipset ska döljas.

  • MinDelay Den här egenskapen anger den minsta fördröjningen för att visa de visuella objekten. Som standard visas de visuella objekten för handen efter så här många sekunder om användarens händer inte spåras.

  • MaxDelay Den här egenskapen anger den maximala fördröjningen för att visa de visuella objekten. Som standard visas de visuella objekten för handen efter så här många sekunder även om användarens händer spåras.

  • UseMaxTimer Om det här booleska värdet är inställt på falskt inaktiveras maxtimern och handtipset kan bara visas när användarens händer inte visas eller om det anpassade villkoret returnerar falskt.

  • Upprepar Den här egenskapen styr hur många gånger ledtrådsanimeringen spelas upp när min- eller maxtimern har passerat. Tipset döljer och väntar sedan på fördröjningen igen.

  • Autoaktivera När det här booleska värdet är true körs tipset automatiskt genom timerlogiken när GameObject för skriptet är aktivt i hierarkin och skriptet är aktiverat. Detta bör bara anges till falskt om du tänker kontrollera tipsets utseende manuellt och försvinna via kod.

  • AnimationState Namnet på animeringstillståndet som ska spelas upp när tipset är aktivt. Detta måste anges innan funktionen StartHintLoop() anropas (under OnEnable om autoaktivering är markerad).

Kontrollera InteractionHint via skript

  • StartHintLoop Den här funktionen startar show/hide-loopen som annars startar OnEnable om flaggan AutoActivate är inställd på true.
  • StopHintLoop Den här funktionen anropar animeringstillståndet tonas ut om den inte spelas upp, inaktiverar sedan show/hide-loopen och ställer in handriggen som är inaktiv i hierarkin.
  • AnimationState Den här strängen avgör vilket animeringstillstånd som spelas upp under loopen. Du kan ändra den här strängen för att ändra vilket tillstånd som spelas upp, men du måste göra det när du har anropat StopHintLoop och du måste anropa StartHintLoop igen när du har ändrat tillståndet.
  • CustomShouldHideVisuals Du kan ange detta med din egen funktion, som ska returnera sant när du vill dölja visuella handobjekt (tänk på MinMaxTimer, särskilt maxparametern)

Anpassade animeringsöverväganden

Toningar är som standard 0,5 sekunder, så alla anpassade animeringar som skapats för användning med riggen bör vara minst 1,5 sekunder för all meningsfull information som ska förmedlas

Det angivna standardläget tonas in och tonas ut, Fade_In och Fade_Out kan justeras genom att ändra tidsstämpeln för den andra nyckelramen för att ange toningslängden.

Animatören och skriptet har konfigurerats på ett sätt som gör installationen så enkel som möjligt. Om du vill lägga till nya animeringstillstånd importerar du bara din fbx, kontrollerar att animeringsnamnet har angetts med ett distinkt namn och drar animeringen till animatören.

MoveToTarget

Skriptet MoveToTarget.cs innehåller funktioner för att flytta handtipset från en spårningsposition till en målposition över tid.

Så här konfigurerar du MoveToTarget

De angivna prefaberna "MovingHandCoachRoot_L.prefab" och "MovingHandCoachRoot_R.prefab" innehåller en MoveToTarget i sina hierarkier. Om du vill använda det här skriptet i din egen konfiguration måste du placera det på rotspelobjektet som innehåller animatören för din rigg.

Egenskaper för kontroll

  • TrackingObject Ange detta med det objekt som du vill att riggen ska följa innan den startar sin rörelse. Vi rekommenderar att du skapar en tom GameObject och flyttar den till en viss position för att hjälpa dig att hitta spårningen.
  • TargetObject Ange detta med det objekt som du vill att riggen ska flyttas till under dess rörelse. Vi rekommenderar att du skapar en tom GameObject och flyttar den till en viss position för att hjälpa dig att hitta spårningen.
  • RootObject Ange detta till en delad överordnad mellan spårning och målobjekt så att de relativa positionerna kan beräknas korrekt. Den inkluderade prefab har både spårnings- och målobjekt i hierarkin, men du kan ange målobjektet som ett gameObject utanför prefab och ändra rotobjektet till en delad överordnad.
  • Varaktighet Hur lång tid det tar (i sekunder) att gå från TrackingObject till TargetObject på några sekunder.
  • TargetOffset En justerbar förskjutning för att få GameObject att komma fram till rätt målposition. Det här är användbart om animeringen innehåller en positionsförskjutning under animeringen.
  • AnimationCurve Detta är standardinställningen för en linjär kurva, men du kan ändra kurvan så att du lättar in/ut när du startar och stoppar rörelsebanan.

Styra MoveToTarget via skript

I ditt anpassade skript gör du ett anrop till Follow() medan du vill att handriggen ska följa TrackingObject och sedan göra ett anrop till MoveToTargetPosition() när du vill att handriggen ska påbörja sin rörelse till TargetObject.

Styra MoveToTarget via animeringar

I animeringen som behöver flyttas anger du två händelser: en med ett anrop till Follow() och en med ett anrop till MoveToTargetPosition(). Följ bör anges på den första nyckelramen, eftersom den gör att handriggen följer din TrackingObject. MoveToTargetPosition ska anges på nyckelramen där du vill att riggen ska börja flyttas till målet. Så här används skriptfunktionerna i de angivna prefaberna.

RoteraAroundPoint

Skriptet RotateAroundPoint.cs innehåller funktioner för att rotera handtipset runt en pivotpunkt över tid.

Så här konfigurerar du RotateAroundPoint

De angivna prefaberna "RotatingHandCoachRoot_L.prefab" och "RotatingHandCoachRoot_R.prefab" innehåller en RotateAroundPoint i sina hierarkier. Om du vill använda det här skriptet i din egen konfiguration måste du placera det på rotspelobjektet som innehåller animatören för din rigg.

Egenskaper för kontroll

  • CenteredParent Ange detta med det överordnade objekt som du vill att riggen ska pivotleda runt.
  • InverseParent Ange detta med det överordnade objektet för att rotera inverterat till centreratParent för att hålla handorienteringen densamma. I allmänhet är detta det överordnade objektet med InteractionHint-skriptet på.
  • Pivotposition Ange detta till en punkt där du vill att tipset ska börja röra sig.
  • Varaktighet Den tid det tar (i sekunder) att rotera runt CenteredParent.
  • AnimationCurve Detta är standardinställningen för en linjär kurva, men du kan ändra kurvan så att du lättar in/ut när du startar och stoppar rörelsebanan.
  • RotationVector Hur många grader som ska roteras längs varje axel.

Styra RotateAroundPoint via skript

I ditt anpassade skript anropar du RotateToTarget() när du vill att handriggen ska börja rotera runt CenteredParent. När du vill att positionen ska återställas till den ursprungliga pivotpositionen gör du ett anrop till ResetAndDeterminePivot().

Styra RotateAroundPoint via animeringar

I animeringen som behöver flyttas anger du två händelser: en med ett anrop till ResetAndDeterminePivot() och en med ett anrop till RotateToTarget(). ResetAndDeterminePivot bör anges på den första nyckelramen, eftersom den gör att handriggen återställs till pivotpositionen. RotateToTarget ska anges på nyckelramen där du vill att riggen ska börja rotera runt CenteredParent. Så här används skriptfunktionerna i de angivna prefaberna.