Ruční trenér — MRTK2

Hand Coach Menu

Hand Coach je 3D modelovaná ruka, která se aktivuje, když systém nezjistí ruce uživatele. To je implementováno jako "výuková" komponenta, která pomáhá vést uživatele, když se gesto nenaučí. Pokud uživatelé zadané gesto po určitou dobu neprovedou, ruce se budou opakovat se zpožděním. Pomocí ručního trenéra můžete znázorňovat stisknutí tlačítka nebo vyzvednutí hologramu.

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

  • Blízké klepnutí – používá se pro tlačítka nebo zavřít interagovatelné objekty.
  • Vzdálený výběr – používá se pro objekty, které jsou daleko.
  • Move – slouží k přesunutí hologramu v prostoru.
  • Rotate – ukazuje, jak otáčet hologramy nebo objekty.
  • Měřítko – slouží k zobrazení toho, jak manipulovat s hologramy tak, aby byly větší nebo menší.
  • Překlopení rukou – slouží k vyvolání panelu Start uživatelského rozhraní nebo ručních nabídek.
  • Palm up – Používá se pro kolibříček okamžik v out of the box zkušenosti. 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 ve scéně HandCoachExample najdete 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 zkreslení na pletivo, musíte se ujistit, že váš projekt používá správné množství kloubů. Přejděte na Upravit > nastavení > projektu v Unity Kvalita > Další > váhy blendu. Ujistěte se, že jsou vybrány "4 kosti", aby se zobrazily hladké klouby. Nastavení projektu

Skripty

Nápověda k interakci

Skript InteractionHint.cs poskytuje funkci obálky pro aktivaci animací a prolnutí pro ruční zařízení.

Jak nastavit nápovědu k interakci

Pokud chcete nastavit nápovědu k interakci, doporučujeme použít předpřipoužítá nastavení StaticHandCoachRoot_L.prefab a StaticHandCoachRoot_R.prefab. Tento prefab obsahuje skript InteractionHint a ruční zařízení a také správnou hierarchii, aby poskytnuté animace nápovědy fungovaly podle očekávání. V opačném případě budete muset umístit skript na gameObject o jednu nadřazenou úroveň výše než vaše ruční zařízení s animatorem.

Vlastnosti inspektoru

  • SkrýtIfHandTracked 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 nastavena na hodnotu false, bude k určení, zda se má nápověda skrýt, použita pouze vlastnost skriptování customShouldHideVisuals.

  • MinDelay Tato vlastnost určuje minimální zpoždění při zobrazení vizuálů. Ve výchozím nastavení se vizuály pro ruku zobrazí po tomto počtu sekund, pokud nejsou ruce uživatele sledovány.

  • MaxDelay Tato vlastnost určuje maximální zpoždění při zobrazení vizuálů. Ve výchozím nastavení se vizuály pro ruku zobrazí po tomto počtu sekund, i když jsou ruce uživatele sledovány.

  • UseMaxTimer Pokud je tato logická hodnota nastavená na false, zakáže maximální časovač a povolí zobrazení nápovědy jen 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 se animace nápovědy přehraje po uplynutí minimálního nebo maximálního časovače. Nápověda se pak skryje a znovu počká na zpoždění.

  • Automatická aktivace Pokud je tato logická hodnota nastavena na hodnotu true, nápověda se automaticky spustí prostřednictvím logiky časovače, když je objekt GameObject skriptu aktivní v hierarchii a skript je povolen. Toto nastavení by mělo být nastaveno na false pouze v případě, že chcete ručně řídit vzhled a zmizení nápovědy prostřednictvím kódu.

  • AnimationState Název stavu animace, který se má přehrát, když je nápověda aktivní. Toto nastavení musí být nastaveno před zavoláním funkce StartHintLoop() (během funkce OnEnable, pokud je zaškrtnutá možnost AutoActivate).

Řízení interakceHint 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 hodnotu true.
  • StopHintLoop Tato funkce volá stav prolnutí animace, pokud se právě nepřehrává, pak deaktivuje smyčku zobrazení/skrytí a nastaví ruční zařízení v hierarchii jako neaktivní.
  • AnimationState Tento řetězec určuje, který stav animace se během smyčky přehraje. Můžete změnit tento řetězec změnit, který stav se přehrává, ale musíte to udělat po volání StopHintLoop a musíte volat StartHintLoop znovu po změně stavu.
  • VlastníShouldHideVisuals Můžete to nastavit pomocí vlastní funkce, která by měla vrátit hodnotu true, pokud chcete skrýt vizuály hand (mějte na paměti MinMaxTimer, konkrétně parametr max).

Aspekty vlastní animace

Výchozí doba prolnutí je 0,5 sekundy, takže všechny vlastní animace vytvořené pro použití s rigem by měly být minimálně 1,5 sekundy, aby se sdělovaly smysluplné informace.

Zadané výchozí stavy prolnutí a zeslabování, Fade_In a Fade_Out je možné upravit změnou časového razítka druhého klíčového snímku tak, aby se nastavil 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 soubor fbx, ujistěte se, že je název animace nastavený s jedinečným názvem, a přetáhněte animaci do animátoru.

Přesunout natarget

Skript MoveToTarget.cs poskytuje funkce pro přesunutí nápovědy ruky z pozice sledování do cílové pozice v průběhu času.

Jak nastavit MoveToTarget

Zadané prefaby "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 do kořenového herního objektu obsahujícího Animator pro vaše zařízení.

Vlastnosti inspektoru

  • TrackingObject Nastavte ho s objektem, za kterým má souprava před zahájením pohybu následovat. Doporučujeme vytvořit prázdný objekt GameObject a přesunout ho na určitou pozici, abyste mohli sledování přesně určit.
  • Targetobject Nastavte ho s objektem, na který se má souprava během pohybu přesouvat. Doporučujeme vytvořit prázdný objekt GameObject a přesunout ho na určitou pozici, abyste mohli sledování přesně určit.
  • Objekt RootObject Nastavte ho na sdílený nadřazený objekt mezi sledovacím a cílovým objektem, aby bylo možné správně vypočítat relativní pozice. Zahrnutý prefab má ve své hierarchii sledovací i cílové objekty, ale můžete nastavit cílový objekt jako gameObject mimo prefab a změnit kořenový objekt na sdílený nadřazený objekt.
  • Doba trvání Doba potřebná k přechodu z objektu TrackingObject na TargetObject v sekundách (v sekundách).
  • Cílováoffset Přizpůsobitelný posun, aby GameObject dorazil na správnou cílovou pozici. To je užitečné, pokud animace zahrnuje posun pozice během animace.
  • AnimationCurve Ve výchozím nastavení se používá lineární křivka, ale tuto křivku můžete změnit tak, aby při spouštění a zastavování dráhy pohybu poskytovala zvolnění a oddálení.

Řízení moveToTarget prostřednictvím skriptu

Ve vlastním skriptu zavolejte Metodu Follow(), zatímco chcete, aby ruční zařízení sledovalo Objekt TrackingObject, a pak zavolejte Metodu MoveToTargetPosition(), když chcete, aby ruční zařízení zahájilo pohyb do objektu TargetObject.

Ovládání moveToTarget prostřednictvím animací

V animaci, která se má přesunout, nastavte dvě události: jednu s voláním Follow() a druhou s voláním MoveToTargetPosition(). Sledování by mělo být nastaveno na prvním klíčovém snímku, protože to způsobí, že ruční zařízení bude následovat za vaším objektem TrackingObject. MoveToTargetPosition by měla být nastavená na klíčovém snímku, kde se má souprava začít přesouvat do cíle. Tímto způsobem se funkce skriptu používají v zadaných předfabech.

RotateAroundPoint

Skript RotateAroundPoint.cs poskytuje funkce pro otáčení nápovědy rukou kolem bodu otáčení v čase.

Jak nastavit RotateAroundPoint

Zadané prefaby "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 do kořenového herního objektu obsahujícího Animator pro vaše zařízení.

Vlastnosti inspektoru

  • VycentrovanýParent Nastavte ho pomocí nadřazeného objektu, kolem kterého má rig otáčet.
  • InverzníParent Tuto možnost nastavte u nadřazeného objektu tak, aby se otočila na středParent, aby byla orientace ruky stejná. Obecně se jedná o nadřazený objekt se skriptem InteractionHint.
  • Kontingenční pozice Nastavte tuto možnost do bodu, od kterého chcete, aby se nápověda začala pohybovat.
  • Doba trvání Doba, kterou by mělo trvat (v sekundách), než se otočí kolem centeredParent.
  • AnimationCurve Ve výchozím nastavení se používá lineární křivka, ale tuto křivku můžete změnit tak, aby při spouštění a zastavování dráhy pohybu poskytovala zvolnění a oddálení.
  • RotationVector O kolik stupňů se má otočit podél každé osy.

Řízení funkce RotateAroundPoint prostřednictvím skriptu

Ve vlastním skriptu zavolejte Metodu RotateToTarget(), když chcete, aby se ruční souprava začala otáčet kolem objektu CenteredParent. Pokud chcete pozici obnovit na původní kontingenční pozici, zavolejte funkci ResetAndDeterminePivot().

Ovládání funkce RotateAroundPoint prostřednictvím animací

V animaci, která se má přesunout, nastavte dvě události: jednu s voláním funkce ResetAndDeterminePivot() a druhou s voláním funkce RotateToTarget(). ResetAndDeterminePivot by měla být nastavena na prvním klíčovém snímku, protože způsobí, že ruční zařízení resetuje pivotPosition. Funkce RotateToTarget by měla být nastavená na klíčovém snímku, ve kterém se má souprava začít otáčet kolem pole CenteredParent. Tímto způsobem se funkce skriptu používají v zadaných předfabech.