Hand coach

Nabídka Hand Coach

Hand coach je 3D modelovaná ruky, která se aktivuje, když systém nezjistí ruce uživatele. Tato funkce je implementovaná jako součást výuky, která pomáhá vést uživatele, když se gesto neučte. Pokud uživatelé po určitou dobu neučiní zadané gesto, budou ruce zacyklovat se zpožděním. Hand coach by se mohl použít k reprezentaci stisknutí tlačítka nebo vyzvednutí hologramu.

Aktuální model interakce představuje širokou škálu ovládacích prvků gest, jako je posouvání, velký výběr a blízko klepnutí. Níže je úplný seznam existujících příkladů trenérů hand:

  • Blízké klepnutí – používá se pro tlačítka nebo zavřete interagovatelné objekty.
  • Far select – používá se pro objekty, které jsou daleko.
  • Move – slouží k přesunutí hologramu v prostoru.
  • Rotate – slouží k zobrazení otočení hologramů nebo objektů.
  • Scale – ukazuje, jak manipulovat s hologramy tak, aby byl větší nebo menší.
  • Překlopení rukou – slouží k zobrazení úvodního panelu uživatelského rozhraní nebo nabídek rukou.
  • Šmídli – používá se pro moment s chemingem v prostředí, které je součástí balení. Dalším návrhem může být zobrazení úvodního panelu uživatelského rozhraní.
  • Scroll – slouží k posouvání seznamu nebo dlouhého dokumentu.

Příklad scény

Příklady najdete ve scéně HandCoachExample v části: MixedRealityToolkit.Examples/Experimental/HandCoach/Scenes

Ruční 3D prostředky

Prostředky najdete v části: MixedRealityToolkit.SDK/Experimental/HandCoach

Kvalita

Pokud si všimnete, že je na sádřenou síť, musíte se ujistit, že váš projekt používá správné množství mihotů. Přejděte na stránku Edit Project Nastavení Quality Other Blend Weights (Upravit ostatní >>> váhy blendu v > Unity). Ujistěte se, že jsou zaškrtnuté 4 nárty, aby se vyhlédl Smooth. Project nastavení

Skripty

Nápověda k interakci

Skript InteractionHint.cs poskytuje funkce obálky pro aktivaci animací a zesměšnění pro ruční rigu.

Nastavení nápovědy k interakci

Pokud chcete nastavit nápovědu pro interakci, doporučujeme použít předfabs StaticHandCoachRoot_L.prefab a StaticHandCoachRoot_R.prefab. Toto předfab obsahuje skript InteractionHint a ruční rigu a správnou hierarchii, aby se zajistilo, že poskytnuté animace nápovědy fungují podle zamýšleného záměru. V opačném případě budete muset umístit skript na objekt gameObject o jednu nadřazenou úroveň výše z ručního rigu pomocí animátoru.

Vlastnosti inspektoru

  • HideIfHandTracked Tato logická hodnota určuje, jestli se má stav sledování rukou použít ke skrytí vizuálů při sledování rukou uživatele. Pokud je nastavená hodnota false, k určení, jestli se má nápověda skrýt, se použije pouze vlastnost skriptování customShouldHideVisuals.

  • MinDelay Tato vlastnost určuje minimální zpoždění zobrazení vizuálů. Ve výchozím nastavení se vizuály pro ruce zobrazí po uplynutí této mnoha sekund, pokud se nesledují ruce uživatele.

  • MaxDelay Tato vlastnost určuje maximální zpoždění zobrazení vizuálů. Ve výchozím nastavení se vizuály pro ruční zobrazení zobrazí po tomto mnoha sekundách i v případě, že uživatel sleduje ruce.

  • UseMaxTimer Pokud je tato logická hodnota nastavená na false, zakáže maximální časovač a povolí zobrazení nápovědy rukou pouze v případě, že jsou ruce uživatele mimo zobrazení nebo když vlastní podmínka vrátí hodnotu false.

  • Opakuje Tato vlastnost určuje, kolikrát animace nápovědy přehrává, když uplynul minimální nebo maximální časovač. Nápověda se pak skryje a počká na zpoždění znovu.

  • Automatická aktivace Pokud je tato logická hodnota nastavená na true, nápověda se automaticky spustí logikou časovače, když je GameObject skriptu v hierarchii aktivní a skript je povolený. Tato hodnota by měla být nastavená pouze na false, pokud máte v úmyslu ručně řídit vzhled nápovědy a zmizení prostřednictvím kódu.

  • AnimationState Název stavu animace, který by se měl přehrát, když je nápověda aktivní. Tuto hodnotu je nutné nastavit před voláním funkce StartHintLoop() (během onenable, pokud je zaškrtnutá možnost AutoActivate).

Řízení souboru InteractionHint prostřednictvím skriptu

  • StartHintLoop Tato funkce spustí smyčku show/hide, která v opačném případě spustí OnEnable, pokud je příznak AutoActivate nastavený na true.
  • StopHintLoop Tato funkce volá stav animace zeslábnutí, pokud právě nehraje, pak deaktivuje smyčku show/hide a nastaví ruční rig neaktivní v hierarchii.
  • AnimationState Tento řetězec určuje, který stav animace se přehrává během smyčky. Tento řetězec můžete změnit tak, aby měnil, který stav přehraje, ale musíte to udělat po zavolání metody StopHintLoop a po změně stavu musíte znovu zavolat volání funkce StartHintLoop.
  • CustomShouldHideVisuals Můžete ho nastavit pomocí vlastní funkce, která by měla vrátit hodnotu true, pokud chcete skrýt ruční vizuály (mějte na paměti MinMaxTimer, konkrétně parametr max).

Aspekty vlastní animace

Prolnutí je ve výchozím nastavení 0,5 sekundy, takže všechny vlastní animace vytvořené pro použití se zařízením by měly být minimálně 1,5 sekundy, aby se předaly smysluplné informace.

Poskytnuté výchozí prolnutí a zeslabení stavů, Fade_In a Fade_Out, je možné upravit změnou časového razítka druhého klíčového rámce tak, aby se nastavoval délka prolnutí.

Animátor a skript byly nastaveny tak, aby nastavení bylo co nejjednodušší. Pokud chcete přidat nové stavy animace, jednoduše naimportujte svůj fbx, ujistěte se, že je název animace nastavený s jedinečným názvem, a přetáhněte ji do animátoru.

MoveToTarget

Skript MoveToTarget.cs poskytuje funkci pro přesun nápovědy rukou z pozice sledování na cílovou pozici v průběhu času.

Jak nastavit MoveToTarget

Předfabs "MovingHandCoachRoot_L.prefab" a "MovingHandCoachRoot_R.prefab" obsahují MoveToTarget ve svých hierarchiích. Pokud chcete tento skript použít ve vlastním nastavení, musíte ho umístit na kořenový gameobject obsahující Animator pro vaši rigu.

Vlastnosti inspektoru

  • TrackingObject Nastavte tento objekt s objektem, který má rig sledovat, než začne s pohybem. Doporučuje se vytvořit prázdný objekt GameObject a přesunout ho na konkrétní pozici, abyste sledování zcítěním.
  • Targetobject Nastavte tento objekt s objektem, na který se má návazná zařízení přesunout během pohybu. Doporučuje se vytvořit prázdný objekt GameObject a přesunout ho na konkrétní pozici, abyste sledování zcítěním.
  • Objekt RootObject Nastavte ji na sdílenou nadřazenou hodnotu mezi objektem sledování a cílovým objektem, aby bylo možné správně vypočítat relativní pozice. Zahrnuté předfab má ve své hierarchii sledovací i cílové objekty, ale můžete nastavit cílový objekt jako gameObject mimo předfab a změnit kořenový objekt na sdílený nadřazený objekt.
  • Doba trvání Doba, kterou by měla trvat (v sekundách), než se přesune z objektu TrackingObject na TargetObject v sekundách.
  • TargetOffset Nastavitelný posun pro získání objektu GameObject tak, aby se dostal na správnou cílovou pozici. To je užitečné, pokud vaše animace zahrnuje posun pozice během animace.
  • AnimationCurve Ve výchozím nastavení se jedná o lineární křivku, ale křivku můžete změnit tak, aby při spouštění a zastavování cesty pohybu urychluje nebo odstartoval.

Řízení MoveToTarget pomocí skriptu

Ve vlastním skriptu zavolejte metodu Follow(), zatímco chcete, aby ruční zařízení sledovalo TrackingObject, a potom zavolejte metodu MoveToTargetPosition(), když chcete, aby ruční zařízení zahajuje pohyb do objektu TargetObject.

Řízení MoveToTarget prostřednictvím animací

V animaci, která se musí přesunout, nastavte dvě události: jednu s voláním Follow() a jednu s voláním MoveToTargetPosition(). U prvního klíčového snímku by měla být nastavená možnost Sledovat, protože to způsobí, že ruční rigu bude sledovat váš objekt TrackingObject. Vlastnost MoveToTargetPosition by měla být nastavená na klíčovém snímku, ve kterém chcete, aby se rig začal přesouvat do cíle. Tímto způsobem se funkce skriptu používají v poskytovaných předfabech.

RotateAroundPoint (Bod otočení)

Skript RotateAroundPoint.cs poskytuje funkci otočení nápovědy rukou kolem bodu otáčení v průběhu času.

Jak nastavit RotateAroundPoint

Předfabs "RotatingHandCoachRoot_L.prefab" a "RotatingHandCoachRoot_R.prefab" obsahují RotateAroundPoint ve svých hierarchiích. Pokud chcete tento skript použít ve vlastním nastavení, musíte ho umístit na kořenový gameobject obsahující Animator pro vaši rigu.

Vlastnosti inspektoru

  • CenteredParent Nastavte tento objekt s nadřazeným objektem, kolem kterého se má návazná zařízení překlopovat.
  • InverseParent Pokud chcete zachovat orientaci ruky, nastavte tuto vlastnost s nadřazenou závorkou tak, aby se inverze točí k objektu centeredParent. Obecně to bude nadřazený objekt se skriptem InteractionHint.
  • PivotPosition Nastavte tento bod na bod, kde má nápověda začít s pohybem.
  • Doba trvání Doba, kterou by měla trvat (v sekundách), než se obtočí kolem zařízení CenteredParent.
  • AnimationCurve Ve výchozím nastavení se jedná o lineární křivku, ale křivku můžete změnit tak, aby při spouštění a zastavování cesty pohybu urychluje nebo odstartoval.
  • RotationVector (Otáčenívector) How many degrees to rotate along each axis.

Řízení RotateAroundPoint pomocí skriptu

Ve vlastním skriptu zavolejte metodu RotateToTarget(), pokud chcete, aby ruční vrtné zařízení začalo obměna kolem objektu CenteredParent. Pokud chcete, aby se pozice resetovat na původní pivotposition, zavolejte ResetAndDeterminePivot().

Řízení RotateAroundPoint prostřednictvím animací

V animaci, která se musí přesunout, nastavte dvě události: jednu s voláním ResetAndDeterminePivot() a jednu s voláním RotateToTarget(). U prvního klíčového rámce by se mělo nastavit ResetAndDeterminePivot, protože to způsobí, že se ruční sada nástrojů resetuje do pivotpozice. Objekt RotateToTarget by měl být nastavený na klíčovém snímku, kde chcete, aby se zařízení začalo obměnět kolem třídy CenteredParent. Tímto způsobem se funkce skriptu používají v poskytovaných předfabech.