Allenatore a mano - MRTK2

Hand Coach Menu

Hand coach è una mano modellata 3D che viene attivata quando il sistema non rileva le mani dell'utente. Questo viene implementato come componente di "insegnamento" che aiuta l'utente a guidare l'utente quando il gesto non è stato insegnato. Se gli utenti non hanno eseguito il gesto specificato per un periodo, le mani verranno ciclite con un ritardo. L'allenatore a mano può essere usato per rappresentare la pressione di un pulsante o la selezione di un ologramma.

Il modello di interazione corrente rappresenta un'ampia gamma di controlli movimenti, ad esempio lo scorrimento, la selezione lontana e il tocco vicino. Di seguito è riportato un elenco completo degli esempi esistenti di hand coach:

  • Near tap : usato per i pulsanti o per chiudere oggetti interagendo
  • Selezione lontano: usato per gli oggetti che si trovano lontano
  • Move : usato per spostare un ologramma nello spazio
  • Ruota: usato per mostrare come ruotare gli ologrammi o gli oggetti
  • Scalabilità: usata per mostrare come modificare gli ologrammi in modo che siano più grandi o più piccoli
  • Capovolgimento della mano: usato per visualizzare un pannello di avvio dell'interfaccia utente o menu a mano
  • Palm up: usato per un momento di hummingbird nell'esperienza predefinita. Un altro suggerimento potrebbe essere quello di visualizzare un pannello di avvio dell'interfaccia utente
  • Scorrimento: utilizzato per lo scorrimento di un elenco o di un documento lungo

Scena di esempio

È possibile trovare esempi nella scena HandCoachExample in: MixedRealityToolkit.Examples/Experimental/HandCoach/Scenes

Asset 3D mano

È possibile trovare gli asset in: MixedRealityToolkit.SDK/Experimental/HandCoach

Qualità

Se si notano distorsioni sulla mesh skinned, è necessario assicurarsi che il progetto usi la giusta quantità di articolazioni. Passare a Modifica > di Unity Project Impostazioni > altri >> pesi di fusione. Assicurarsi che siano selezionate "4 ossa" per vedere articolazioni liscia. Project Setting

Script

Hint di interazione

Lo InteractionHint.cs script fornisce funzionalità wrapper per l'attivazione di animazioni e dissolvenze per il rig manuale.

Come configurare un hint di interazione

Per configurare un hint di interazione, è consigliabile usare i prefab forniti "StaticHandCoachRoot_L.prefab" e "StaticHandCoachRoot_R.prefab". Questo prefab contiene lo script InteractionHint e il rig a mano, nonché la gerarchia appropriata per garantire che le animazioni degli hint fornite funzionino come previsto. In caso contrario, dovrai posizionare lo script su un gameObject un livello padre verso l'alto dal tuo rig a mano con animatore.

Proprietà del controllo

  • HideIfHandTracked Questo valore booleano specifica se è necessario usare lo stato di rilevamento della mano per nascondere gli oggetti visivi quando vengono rilevate le mani di un utente. Se questa proprietà è impostata su false, verrà usata solo la proprietà di scripting "customShouldHideVisuals" per determinare se nascondere l'hint.

  • MinDelay Questa proprietà specifica il ritardo minimo per la visualizzazione degli oggetti visivi. Per impostazione predefinita, gli oggetti visivi per la mano verranno visualizzati dopo questo numero di secondi se le mani dell'utente non vengono rilevate.

  • MaxDelay Questa proprietà specifica il ritardo massimo per la visualizzazione degli oggetti visivi. Per impostazione predefinita, gli oggetti visivi per la mano verranno visualizzati dopo questo numero di secondi, anche se le mani dell'utente vengono rilevate.

  • UseMaxTimer Se questo valore booleano è impostato su false, disabilita il timer massimo e consente di visualizzare solo l'hint della mano quando le mani dell'utente non sono visualizzate oppure la condizione personalizzata restituisce false.

  • Ripete Questa proprietà controlla il numero di volte in cui l'animazione dell'hint viene riprodotta al superamento del timer min o max. L'hint nasconde e attende di nuovo il ritardo.

  • Riattivazione automatica Quando questo valore booleano è impostato su true, l'hint verrà eseguito automaticamente tramite la logica del timer quando il GameObject dello script è attivo nella gerarchia e lo script è abilitato. Questa impostazione deve essere impostata su false solo se si intende controllare manualmente l'aspetto dell'hint e la scomparsa tramite codice.

  • AnimationState Nome dello stato dell'animazione che deve essere riprodotto quando l'hint è attivo. Questa impostazione deve essere impostata prima che venga chiamata la funzione StartHintLoop() (durante OnEnable se l'opzione AutoActivate è selezionata).

Controllo dell'interazioneHint tramite script

  • StartHintLoop Questa funzione avvia il ciclo show/hide che altrimenti avvia OnEnable se il flag AutoActivate è impostato su true.
  • StopHintLoop Questa funzione chiama lo stato di animazione dissolvenza in uscita se non è attualmente in riproduzione, disattiva il ciclo show/hide e imposta il rig a mano inattivo nella gerarchia.
  • AnimationState Questa stringa determina lo stato di animazione riprodotto durante il ciclo. È possibile modificare questa stringa per modificare lo stato riprodotto, ma è necessario farlo dopo aver chiamato StopHintLoop e chiamare di nuovo StartHintLoop dopo aver modificato lo stato.
  • CustomShouldHideVisuals È possibile impostarlo con la propria funzione, che dovrebbe restituire true quando si desidera nascondere gli oggetti visivi della mano (tenere presente il parametro MinMaxTimer, in particolare il parametro max)

Considerazioni sull'animazione personalizzata

Le dissolvenze sono predefinite di 0,5 secondi, quindi tutte le animazioni personalizzate create per l'uso con il rig devono essere minime di 1,5 secondi per qualsiasi informazione significativa da trasmettere

La dissolvenza predefinita specificata in stati di dissolvenza e dissolvenza, Fade_In e Fade_Out possono essere modificate modificando il timestamp del secondo fotogramma chiave per impostare la lunghezza di dissolvenza.

L'animatore e lo script sono stati configurati in modo da rendere la configurazione il più semplice possibile. Per aggiungere nuovi stati di animazione, importare semplicemente fbx, assicurarsi che il nome dell'animazione sia impostato con un nome distinto e trascinare l'animazione nell'animazione.

MoveToTarget

Lo script MoveToTarget.cs fornisce funzionalità per spostare l'hint della mano da una posizione di rilevamento a una posizione di destinazione nel tempo.

Come configurare MoveToTarget

I prefab forniti "MovingHandCoachRoot_L.prefab" e "MovingHandCoachRoot_R.prefab" contengono un oggetto MoveToTarget nelle rispettive gerarchie. Se vuoi usare questo script in una configurazione personalizzata, devi inserirlo nell'oggetto gioco radice contenente l'animatore per il tuo rig.

Proprietà del controllo

  • TrackingObject Impostare questo oggetto con l'oggetto che si desidera che il rig segua prima che inizi il movimento. È consigliabile creare un GameObject vuoto e spostarlo in una posizione specifica per individuare il rilevamento.
  • Targetobject Imposta questo valore con l'oggetto a cui vuoi che il rig si sposti durante il movimento. È consigliabile creare un GameObject vuoto e spostarlo in una posizione specifica per individuare il rilevamento.
  • RootObject Impostarlo su un elemento padre condiviso tra il rilevamento e l'oggetto di destinazione in modo che le posizioni relative possano essere calcolate correttamente. Il prefab incluso include sia oggetti di rilevamento che di destinazione nella gerarchia, ma è possibile impostare l'oggetto di destinazione come gameObject all'esterno del prefab e modificare l'oggetto radice in un elemento padre condiviso.
  • Durata Tempo necessario (in secondi) per passare da TrackingObject a TargetObject in secondi.
  • TargetOffset Offset regolabile per ottenere l'oggetto GameObject per arrivare alla posizione di destinazione corretta. Ciò è utile se l'animazione include un offset di posizione durante l'animazione.
  • AnimationCurve L'impostazione predefinita è una curva lineare, ma è possibile modificare la curva per fornire un'interpolazione in/uscita all'avvio e all'arresto del percorso del movimento.

Controllo di MoveToTarget tramite script

Nello script personalizzato effettuare una chiamata a Follow() mentre si vuole che il rig a mano segua TrackingObject, quindi effettuare una chiamata a MoveToTargetPosition() quando si vuole che il rig della mano inizi il relativo movimento in TargetObject.

Controllo di MoveToTarget tramite animazioni

Nell'animazione che deve essere spostata, impostare due eventi: uno con una chiamata a Follow() e uno con una chiamata a MoveToTargetPosition(). Seguire deve essere impostato sul primo fotogramma chiave, perché fa sì che il rig della mano segua l'oggetto TrackingObject. MoveToTargetPosition deve essere impostato nel fotogramma chiave in cui si vuole che il rig inizi a passare alla destinazione. Questa è la modalità di utilizzo della funzionalità di script nei prefab forniti.

RotateAroundPoint

Lo script RotateAroundPoint.cs fornisce funzionalità per ruotare l'hint della mano intorno a un punto pivot nel tempo.

Come configurare RotateAroundPoint

I prefab forniti "RotatingHandCoachRoot_L.prefab" e "RotatingHandCoachRoot_R.prefab" contengono un RotateAroundPoint nelle rispettive gerarchie. Se vuoi usare questo script in una configurazione personalizzata, devi inserirlo nell'oggetto gioco radice contenente l'animatore per il tuo rig.

Proprietà del controllo

  • CenteredParent Impostare questa opzione con l'oggetto padre in cui si vuole che il rig si pivot.
  • InverseParent Impostare questo valore con l'elemento padre per ruotare l'inverso su centeredParent per mantenere lo stesso orientamento della mano. In generale, questo sarà l'oggetto padre con lo script InteractionHint su di esso.
  • PivotPosition Impostare questo valore su un punto in cui si vuole che il suggerimento inizi lo spostamento.
  • Durata Il tempo necessario (in secondi) per ruotare intorno a CenteredParent.
  • AnimationCurve L'impostazione predefinita è una curva lineare, ma è possibile modificare la curva per fornire un'interpolazione in/uscita all'avvio e all'arresto del percorso del movimento.
  • RotationVector Numero di gradi da ruotare lungo ogni asse.

Controllo di RotateAroundPoint tramite script

Nello script personalizzato effettuare una chiamata a RotateToTarget() quando si vuole che il rig della mano inizi la rotazione intorno a CenteredParent. Quando si desidera che la posizione venga reimpostata sulla PivotPosition originale, effettuare una chiamata a ResetAndDeterminePivot().

Controllo di RotateAroundPoint tramite animazioni

Nell'animazione che deve essere spostata, impostare due eventi: uno con una chiamata a ResetAndDeterminePivot() e una con una chiamata a RotateToTarget(). ResetAndDeterminePivot deve essere impostato sul primo fotogramma chiave, perché fa sì che il rig della mano venga reimpostato nella PivotPosition. RotateToTarget deve essere impostato sul fotogramma chiave in cui si vuole che il rig inizi a ruotare intorno a CenteredParent. Si tratta del modo in cui viene usata la funzionalità dello script nei prefab forniti.