Condividi tramite


Vincoli — MRTK3

ConstraintManager consente di applicare un set di componenti di vincolo a una trasformazione. Per impostazione predefinita, gestione vincoli raccoglierà automaticamente tutti i componenti dei vincoli associati e li applicherà all'oggetto di destinazione. Tuttavia, gli utenti possono anche scegliere di configurare manualmente l'elenco dei vincoli applicati e consentire l'uso di un subset di vincoli associati.

Nota

MRTK3 offre attualmente un subset limitato dei vincoli di MRTK 2.x. Attualmente si sta esaminando un refactoring del sistema Vincoli per unificare il flusso di lavoro per sviluppatori con risolutori ed elastici. Verificarne con regolarità il contenuto.

Attualmente, gli elementi dell'esperienza utente MRTK seguenti supportano i vincoli:

Il gestore dei vincoli può operare in due modalità:

  • Selezione automatica dei vincoli
  • Selezione manuale dei vincoli

Selezione dei vincoli

Selezione automatica dei vincoli

Modalità di selezione automatica

La modalità automatica predefinita elenca tutti i componenti dei vincoli associati. È possibile passare direttamente al componente nel controllo usando i pulsanti Vai al componente o aggiungere un nuovo vincolo dall'elenco a discesa.

Selezione manuale dei vincoli

Modalità di selezione manuale

Se la gestione vincoli è impostata sulla modalità manuale, vengono elaborati e applicati alla trasformazione solo i vincoli collegati nell'elenco di vincoli. Quando si abilita la modalità manuale per la prima volta, il gestore popola automaticamente l'elenco con tutti i vincoli attualmente associati.

Nota

L'azione Rimuovi voce rimuoverà solo il vincolo dall'elenco di selezione manuale. Il componente sarà ancora presente in GameObject.

Ordine di esecuzione

L'ordine di esecuzione di ogni vincolo può essere definito nell'opzione Ordine di esecuzione del vincolo stesso. L'ordine verrà riportato nell'elenco visualizzato nel gestore dei vincoli. Alcuni vincoli si comportano in modo diverso quando vengono combinati in ordini diversi, quindi tenere presente le priorità di ogni vincolo e regolarne l'ordine di conseguenza.

Vincoli di trasformazione

È possibile usare vincoli per limitare la manipolazione in qualche modo. Ad esempio, alcune applicazioni possono richiedere rotazione e che l'oggetto rimanga in posizione verticale. In questo caso, un RotationAxisConstraint oggetto può essere aggiunto all'oggetto e usato per limitare la rotazione alla rotazione dell'asse y. MRTK fornisce diversi vincoli, tutti descritti di seguito.

È anche possibile definire nuovi vincoli e usarli per creare un comportamento di manipolazione univoco che potrebbe essere necessario per alcune applicazioni. A tale scopo, creare uno script che eredita da TransformConstraint e implementa la proprietà astratta ConstraintType e il metodo astratto ApplyConstraint . Il nuovo vincolo deve essere visualizzato nell'elenco a discesa e deve essere registrato automaticamente nel gestore dei vincoli quando viene aggiunto all'oggetto.

Tutti i vincoli forniti da MRTK condividono le proprietà seguenti:

Hand Type specifica se il vincolo viene utilizzato per una mano, due mani o entrambi i tipi di manipolazione. Poiché questa proprietà è un flag, è possibile selezionare entrambe le opzioni.

  • Una mano: il vincolo verrà usato durante la manipolazione di una mano, se selezionato.
  • Due mani: il vincolo verrà usato durante la manipolazione a due mani, se selezionato.

ProximityType specifica se il vincolo viene utilizzato per la manipolazione vicino, lontano o per entrambi i tipi di manipolazione. Poiché questa proprietà è un flag, è possibile selezionare entrambe le opzioni.

  • Near: il vincolo verrà usato durante la manipolazione vicina, se selezionato.
  • Far: il vincolo verrà usato durante la manipolazione da lontano, se selezionato.

FaceUserConstraint

Questo vincolo limita la rotazione di un oggetto in modo che faccia sempre fronte all'utente. L'opzione Face Away controlla se viene usato l'asse Z positivo o negativo.

Dimostrazione di FaceUserConstraint

FixedDistanceConstraint

Questo vincolo corregge la distanza tra l'oggetto manipolato e un'altra trasformazione oggetto all'inizio della manipolazione. Ciò è utile per il comportamento, ad esempio la correzione della distanza dall'oggetto manipolato alla trasformazione head. Il campo Trasformazione vincolo viene predefinito per la trasformazione della fotocamera ed è l'altra trasformazione a cui l'oggetto modificato avrà una distanza fissa.

Dimostrazione di FixedDistanceConstraint

MaintainApparentSizeConstraint

Quando questo vincolo viene associato a un oggetto, indipendentemente dalla distanza dell'oggetto dall'utente, manterrà le stesse dimensioni apparenti per l'utente( ad esempio, occupa la stessa proporzione del campo di visualizzazione dell'utente). Ciò può essere usato per garantire che uno slate o un pannello di testo rimanga leggibile durante la modifica.

Dimostrazione di MaintainApparentSizeConstraint

MoveAxisConstraint

Questo vincolo può essere utilizzato per correggere gli assi in cui è possibile spostare un oggetto modificato. Ciò può essere utile per modificare gli oggetti sulla superficie di un piano o lungo una linea.
Il campo Vincolo per lo spostamento specifica gli assi su cui impedire lo spostamento. Per impostazione predefinita, questi assi saranno globali anziché locali, ma è possibile modificarli di seguito. Poiché questa proprietà è un flag, è possibile selezionare un numero qualsiasi di opzioni.

Dimostrazione di MoveAxisConstraint

MinMaxScaleConstraint

Questo vincolo limita la scala di un oggetto, utile per impedire agli utenti di ridimensionare gli oggetti a dimensioni ridotte o grandi in modo inutilizzabile. Funziona sia per il ridimensionamento basato su handle (con BoundsControl) che per il ridimensionamento diretto a due mani (con ObjectManipulator). L'opzione Relativa allo stato iniziale definisce se i valori di scalaminimo e massimo specifici sono valori assoluti o se vengono moltiplicati sulla scala iniziale dell'oggetto.

Dimostrazione di MinMaxScaleConstraint

RotationAxisConstraint

Questo vincolo può essere utilizzato per correggere gli assi che possono essere ruotati da un oggetto modificato. Ciò può essere utile per mantenere un oggetto manipolato in posizione verticale, ma consentendo comunque rotazioni dell'asse y, ad esempio.
Il campo Vincolo sulla rotazione specifica quali assi impedire la rotazione. Per impostazione predefinita, questi assi saranno globali anziché locali, ma è possibile modificarli di seguito. Poiché questa proprietà è un flag, è possibile selezionare un numero qualsiasi di opzioni.

Dimostrazione di RotationAxisConstraint