Handcoach

Menyn Handcoach

Handcoach ä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 att vägledas när gesten inte har lärts ut. Om användarna inte har gjort den angivna gesten under en period, loopas händerna med en fördröjning. Handcoach kan användas för att representera att trycka på en knapp eller hämta ett hologram.

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

  • Nära tryckning – används för knappar eller stäng interagerande objekt
  • Långt bort – används för objekt som är långt bort
  • Flytta – används för att flytta ett hologram i utrymme
  • Rotate – används för att visa hur hologram eller objekt roteras
  • Skala – Används för att visa hur hologram manipuleras så att de är större eller mindre
  • Hand flip – Används för att starta en ui-startpanel eller handmenyer
  • Tag up – Används för att bli upptrassad i en "out of the box"-upplevelse. Ett annat förslag kan vara att öppna en startpanel för användargränssnittet
  • Bläddra – Används för att bläddra i 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 att det är snedfördelade nät måste du se till att projektet använder rätt mängd tack. Gå till Unity's Edit > Project Inställningar > Quality > Other > Blend Weights (Andra > Blend Weights). Se till att "4 grundor" har valts för att se Smooth-bevaring. Project Inställningen

Skript

Interaktionstips

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

Så här ställer du in ett interaktionstips

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

Inspector-egenskaper

  • 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 anges till false används bara 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 visuella objekt 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 visuella objekt för hand efter så här många sekunder även om användarens händer spåras.

  • UseMaxTimer Om den här booleska inställningen är inställd på false inaktiveras den högsta timern och tillåter endast att handtipset 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 hint-animeringen spelas upp när den minsta eller högsta timern har passerat. Tipset döljer och väntar sedan på fördröjningen igen.

  • Inaktivera automatiskt När det här booleska är inställt på true (sant) körs tipset automatiskt genom timerlogiken när GameObject för skriptet är aktivt i hierarkin och skriptet är aktiverat. Detta ska endast anges till falskt om du tänker styra tipsutseendet och uttrycket manuellt via kod.

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

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 tona ut om den inte spelas upp, inaktiverar loopen visa/dölj och anger handriggen som inaktiv i hierarkin.
  • AnimeringState 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, vilket ska returnera true när du vill dölja handvisuella objekt (tänk på MinMaxTimer, särskilt maxparametern)

Överväganden för anpassad animering

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

Det angivna standardvärdet tona in och tona ut tillstånd, Fade_In och Fade_Out kan justeras genom att ändra tidsstämpeln för den andra nyckelbildrutan för att ange toningslängden.

Animatorn och skriptet har ställts in på ett sätt som bör göra konfigurationen så enkel som möjligt. Om du vill lägga till nya animeringstillstånd importerar du bara din fbx, ser till att animeringens namn anges med ett distinkt namn och drar animeringen till animatorn.

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 ställer du in MoveToTarget

De tillhandahållna 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 installation måste du placera det i rot gameobject som innehåller Animator för din dator.

Inspector-egenskaper

  • TrackingObject Ange detta med objektet som du vill att datorn ska följa innan den startar sin rörelse. Vi rekommenderar att du skapar ett tomt GameObject och flyttar det till en specifik position som hjälper dig att hitta spårningen.
  • TargetObject Ange detta med det objekt som du vill att rig ska flyttas till under dess rörelse. Vi rekommenderar att du skapar ett tomt GameObject och flyttar det till en specifik position som hjälper dig att hitta spårningen.
  • RootObject Ange detta till ett delat överordnat objekt mellan spårning och målobjekt så att de relativa positionerna kan beräknas korrekt. Den inkluderade prefaben har både spårnings- och målobjekt i sin hierarki, men du kan ange målobjektet som ett gameObject utanför prefab och ändra rotobjektet till ett delat överordnat objekt.
  • Varaktighet Hur lång tid det tar (i sekunder) att gå från TrackingObject till TargetObject i sekunder.
  • TargetOffset En justerad förskjutning som gör att GameObject kommer till rätt målposition. Detta är användbart om animeringen innehåller en position förskjutning under animeringen.
  • AnimeringCurve Standardvärdet är en linjär kurva, men du kan ändra kurvan för att minska in/ut när du startar och stoppar rörelsevägen.

Kontrollera MoveToTarget via skript

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

Kontrollera MoveToTarget via animeringar

I animeringen som behöver flyttas anger du två händelser: en med anropet till Follow() och en med ett anrop till MoveToTargetPosition(). Följ bör ställas in på den första nyckelbildrutan eftersom den gör att handdatorn följer TrackingObject. MoveToTargetPosition ska ställas in på den nyckeldator där du vill att datorn ska börja flytta till målet. Det är så skriptfunktionen används i de angivna prefabs.

RotateAroundPoint

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

Konfigurera RotateAroundPoint

De tillhandahållna 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 installation måste du placera det i rot gameobject som innehåller Animator för din dator.

Inspector-egenskaper

  • CenteredParent Ange detta med det överordnade objekt som du vill att rig ska pivotera runt.
  • InverseParent Ange detta med den överordnade för att rotera inversen till centreradParent för att hålla handorienteringen densamma. I allmänhet är detta det överordnade objektet med InteractionHint-skriptet på det.
  • PivotPosition Ställ in det här på en punkt där du vill att tipset ska börja röra sig.
  • Varaktighet Hur lång tid det ska ta (i sekunder) att rotera runt centreradparent.
  • AnimeringCurve Standardvärdet är en linjär kurva, men du kan ändra kurvan för att minska in/ut när du startar och stoppar rörelsevägen.
  • RotationVector Hur många grader som ska roteras längs varje axel.

Kontrollera RotateAroundPoint via skript

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

Kontrollera RotateAroundPoint via animeringar

I animeringen som behöver flyttas anger du två händelser: en med anropet ResetAndDeterminePivot() och en med anropet till RotateToTarget(). ResetAndDeterminePivot ska anges på den första nyckelramen eftersom den gör att handdatorn återställs till PivotPosition. RotateToTarget ska ställas in på nyckelramen där du vill att datorn ska börja rotera runt CenteredParent. Så här används skriptfunktionen i de angivna prefabs.