Handcoach — MRTK2

Menu Handcoach

Handcoach is een 3D-gemodelleerde hand die wordt geactiveerd wanneer het systeem de handen van de gebruiker niet detecteert. Dit wordt geïmplementeerd als een 'onderwijzend' onderdeel dat de gebruiker helpt te begeleiden wanneer het gebaar niet is aangeleerd. Als gebruikers het opgegeven gebaar gedurende een bepaalde periode niet hebben uitgevoerd, worden de handen met een vertraging herhaald. Handcoach kan worden gebruikt om het drukken op een knop of het ophalen van een hologram aan te geven.

Het huidige interactiemodel vertegenwoordigt een breed scala aan besturingselementen voor bewegingen, zoals schuiven, ver selecteren en bijna tikken. Hieronder vindt u een volledige lijst met bestaande handcoachvoorbeelden:

  • Bijna tikken: wordt gebruikt voor knoppen of voor het sluiten van objecten die kunnen worden gebruikt
  • Ver selecteren: wordt gebruikt voor objecten die ver weg zijn
  • Verplaatsen: wordt gebruikt om een hologram in de ruimte te verplaatsen
  • Draaien: wordt gebruikt om te laten zien hoe hologrammen of objecten kunnen worden gedraaid
  • Schalen: wordt gebruikt om te laten zien hoe u hologrammen kunt bewerken zodat deze groter of kleiner zijn
  • Handspiegeling : wordt gebruikt voor het weergeven van het startscherm van de gebruikersinterface of handmenu's
  • Palm omhoog – Gebruikt voor kolibriemoment in out-of-the-box ervaring. Een andere suggestie kan zijn om een deelvenster voor het starten van de gebruikersinterface weer te geven
  • Scroll : wordt gebruikt voor het schuiven in een lijst of een lang document

Voorbeeldscène

Voorbeelden vindt u in de scène HandCoachExample onder: MixedRealityToolkit.Examples/Experimental/HandCoach/Scenes

Hand 3D Assets

U vindt de assets onder: MixedRealityToolkit.SDK/Experimental/HandCoach

Kwaliteit

Als u vervormingen op het gevilde gaas ziet, moet u ervoor zorgen dat uw project de juiste hoeveelheid verbindingen gebruikt. Ga naar Unity's Edit > Project Settings > Quality Other >> Blend Weights . Zorg ervoor dat '4 botten' zijn geselecteerd om Gladde gewrichten te zien. Projectinstelling

Scripts

Interactiehint

Het InteractionHint.cs script biedt wrapperfunctionaliteit voor het activeren van animaties en vervaagt voor de hand-rig.

Een interactiehint instellen

Als u een interactiehint wilt instellen, wordt aanbevolen om de opgegeven prefabs 'StaticHandCoachRoot_L.prefab' en 'StaticHandCoachRoot_R.prefab' te gebruiken. Deze prefab bevat het InteractionHint-script en de hand-rig, evenals de juiste hiërarchie om ervoor te zorgen dat de verstrekte hintanimaties werken zoals bedoeld. Anders moet u het script op een gameObject een bovenliggend niveau hoger plaatsen dan uw hand rig met entertainer.

Eigenschappen van inspector

  • HideIfHandTracked Deze booleaanse waarde geeft aan of de handtraceringsstatus moet worden gebruikt om visuals te verbergen wanneer de handen van een gebruiker worden gevolgd. Als dit is ingesteld op onwaar, wordt alleen de scripteigenschap customShouldHideVisuals gebruikt om te bepalen of de hint moet worden verborgen.

  • MinDelay Deze eigenschap geeft de minimale vertraging op voor het weergeven van de visuals. Standaard worden de visuals voor de hand na dit aantal seconden weergegeven als de handen van de gebruiker niet worden gevolgd.

  • MaxDelay Deze eigenschap geeft de maximale vertraging op voor het weergeven van de visuals. Standaard worden de visuals voor de hand na dit aantal seconden weergegeven, zelfs als de handen van de gebruiker worden gevolgd.

  • UseMaxTimer Als deze booleaanse waarde is ingesteld op onwaar, wordt de maximale timer uitgeschakeld en kan alleen de handhint worden weergegeven wanneer de handen van de gebruiker niet zichtbaar zijn of de aangepaste voorwaarde false retourneert.

  • Herhaalt Deze eigenschap bepaalt hoe vaak de hintanimatie wordt afgespeeld wanneer de min- of maximumtimer is verstreken. De hint wordt vervolgens verborgen en wacht opnieuw op de vertraging.

  • Autoactiveren Wanneer deze booleaanse waarde is ingesteld op true, wordt de hint automatisch door de timerlogica uitgevoerd wanneer het GameObject van het script actief is in de hiërarchie en het script is ingeschakeld. Dit moet alleen worden ingesteld op false als u het uiterlijk en de verdwijning van de hint handmatig wilt beheren via code.

  • AnimationState De naam van de animatiestatus die moet worden afgespeeld wanneer de hint actief is. Dit moet worden ingesteld voordat de functie StartHintLoop() wordt aangeroepen (tijdens OnEnable als AutoActivate is ingeschakeld).

InteractionHint beheren via script

  • StartHintLoop Met deze functie wordt de lus weergeven/verbergen gestart die anders OnEnable start als de vlag AutoActivate is ingesteld op true.
  • StopHintLoop Met deze functie wordt de fade-out-animatiestatus aangeroepen als deze momenteel niet wordt afgespeeld. Vervolgens wordt de lus weergeven/verbergen gedeactiveerd en wordt de hand rig inactief gesteld in de hiërarchie.
  • AnimationState Deze tekenreeks bepaalt welke animatiestatus wordt afgespeeld tijdens de lus. U kunt deze tekenreeks wijzigen om te wijzigen welke status wordt afgespeeld, maar u moet dit doen nadat u StopHintLoop hebt aangeroepen en u moet StartHintLoop opnieuw aanroepen nadat u de status hebt gewijzigd.
  • CustomShouldHideVisuals U kunt dit instellen met uw eigen functie, die waar moet retourneren wanneer u de handvisuals wilt verbergen (houd rekening met de MinMaxTimer, met name de parameter max)

Overwegingen voor aangepaste animaties

Vervaagden zijn standaard ingesteld op 0,5 seconden, dus alle aangepaste animaties die zijn gemaakt voor gebruik met de rig, moeten minimaal 1,5 seconden zijn om zinvolle informatie over te brengen

De opgegeven standaardstatussen voor infade en fade-out, Fade_In en Fade_Out kunnen worden aangepast door de tijdstempel van het tweede keyframe te wijzigen om de lengte van het vervagen in te stellen.

De animator en het script zijn zo ingesteld dat het instellen zo eenvoudig mogelijk zou moeten zijn. Als u nieuwe animatiestatussen wilt toevoegen, importeert u gewoon uw fbx, zorgt u ervoor dat de animatienaam is ingesteld met een afzonderlijke naam en sleept u die animatie naar de entertainer.

MoveToTarget

Het script MoveToTarget.cs biedt functionaliteit om de handhint in de loop van de tijd van een traceringspositie naar een doelpositie te verplaatsen.

MoveToTarget instellen

De opgegeven prefabs 'MovingHandCoachRoot_L.prefab' en 'MovingHandCoachRoot_R.prefab' bevatten een MoveToTarget in hun hiërarchieën. Als u dit script wilt gebruiken voor uw eigen installatie, moet u het op het hoofd-gameobject met de Entertainer voor uw rig plaatsen.

Eigenschappen van inspector

  • TrackingObject Stel dit in met het object dat u wilt dat de rig volgt voordat deze in beweging komt. Het wordt aanbevolen om een leeg GameObject te maken en dit naar een specifieke positie te verplaatsen, zodat u de tracering kunt bepalen.
  • TargetObject Stel dit in met het object waarnaar u de rig wilt verplaatsen tijdens de beweging. Het wordt aanbevolen om een leeg GameObject te maken en dit naar een specifieke positie te verplaatsen, zodat u de tracering kunt bepalen.
  • Hoofdobject Stel dit in op een gedeeld bovenliggend object tussen het bijhouden en het doelobject, zodat de relatieve posities correct kunnen worden berekend. De opgenomen prefab heeft zowel tracerings- als doelobjecten in de hiërarchie, maar u kunt het doelobject instellen als een gameObject buiten de prefab en het hoofdobject wijzigen in een gedeeld bovenliggend object.
  • Duur De hoeveelheid tijd die het moet duren (in seconden) om in seconden van TrackingObject naar TargetObject te gaan.
  • TargetOffset Een instelbare verschuiving om het GameObject op de juiste doelpositie te krijgen. Dit is handig als uw animatie een positieverschil bevat tijdens de animatie.
  • AnimationCurve Dit is standaard ingesteld op een lineaire curve, maar u kunt de curve wijzigen om in-/uiting te versoepelen bij het starten en stoppen van het animatiepad.

MoveToTarget beheren via script

Roep in uw aangepaste script Follow() aan terwijl u wilt dat de hand rig het TrackingObject volgt en roep vervolgens MoveToTargetPosition() aan wanneer u wilt dat de hand rig de beweging naar het TargetObject begint.

MoveToTarget beheren via animaties

Stel in de animatie die moet worden verplaatst twee gebeurtenissen in: een met een aanroep naar Follow() en een met een aanroep naar MoveToTargetPosition(). Volg moet worden ingesteld op het eerste hoofdframe, omdat dit ervoor zorgt dat de hand rig uw TrackingObject volgt. MoveToTargetPosition moet worden ingesteld op het hoofdframe waar u wilt dat de rig naar het doel wordt verplaatst. Dit is hoe de scriptfunctionaliteit wordt gebruikt in de opgegeven prefabs.

RotateAroundPoint

Het script RotateAroundPoint.cs biedt functionaliteit om de handhint in de loop van de tijd rond een draaipunt te draaien.

RotateAroundPoint instellen

De opgegeven prefabs 'RotatingHandCoachRoot_L.prefab' en 'RotatingHandCoachRoot_R.prefab' bevatten een RotateAroundPoint in hun hiërarchieën. Als u dit script wilt gebruiken voor uw eigen installatie, moet u het op het hoofd-gameobject met de Entertainer voor uw rig plaatsen.

Eigenschappen van inspector

  • GecentreerdOuder Stel dit in met het bovenliggende object waarover u de rig wilt laten draaien.
  • InverseOuder Stel dit in met het bovenliggende item om inverse te draaien naar gecentreerdParent om de richting van de hand hetzelfde te houden. Over het algemeen is dit het bovenliggende object met het InteractionHint-script erop.
  • Draaipositie Stel dit in op een punt waarop u de hint wilt laten beginnen met bewegen.
  • Duur De hoeveelheid tijd die het moet duren (in seconden) om de gecentreerdeparent te draaien.
  • AnimationCurve Dit is standaard ingesteld op een lineaire curve, maar u kunt de curve wijzigen om in-/uiting te versoepelen bij het starten en stoppen van het animatiepad.
  • RotationVector Het aantal graden dat langs elke as moet worden gedraaid.

RotateAroundPoint beheren via script

Maak in uw aangepaste script een aanroep naar RotateToTarget() wanneer u wilt dat de draaiing van de hand rig rond de Gecentreerde Balk begint. Als u wilt dat de positie opnieuw wordt ingesteld op de oorspronkelijke PivotPosition, roept u ResetAndDeterminePivot() aan.

RotateAroundPoint beheren via animaties

Stel in de animatie die moet worden verplaatst twee gebeurtenissen in: een met een aanroep naar ResetAndDeterminePivot() en een met een aanroep naar RotateToTarget(). ResetAndDeterminePivot moet worden ingesteld op het eerste hoofdframe, omdat dit ervoor zorgt dat de hand-rig opnieuw wordt ingesteld op de PivotPosition. RotateToTarget moet worden ingesteld op het hoofdframe waar u wilt dat de rig rond het gecentreerde teken begint te draaien. Dit is hoe de scriptfunctionaliteit wordt gebruikt in de opgegeven prefabs.