Controllo Limiti - MRTK2

Bounds control

BoundsControl è il nuovo componente per il comportamento di manipolazione, precedentemente trovato in BoundingBox. Il controllo Limiti apporta numerosi miglioramenti e semplificazioni nella configurazione e aggiunge nuove funzionalità. Questo componente è una sostituzione del rettangolo di selezione, che verrà deprecato.

Lo BoundsControl.cs script offre funzionalità di base per trasformare gli oggetti in realtà mista. Un controllo dei limiti mostrerà una casella intorno all'ologramma per indicare che può essere interagita con. I handle sugli angoli e sui bordi della casella consentono il ridimensionamento, la rotazione o la conversione dell'oggetto. Il controllo dei limiti reagisce anche all'input dell'utente. In HoloLens 2, ad esempio, il controllo dei limiti risponde alla prossimità del dito, fornendo feedback visivo per consentire la percezione della distanza dall'oggetto. Tutte le interazioni e gli oggetti visivi possono essere facilmente personalizzati.

Scena di esempio

È possibile trovare esempi di configurazioni di controllo dei limiti nella BoundsControlExamples scena.

Bounds control Example

Proprietà di controllo

Oggetti di destinazione

Questa proprietà specifica l'oggetto che verrà trasformato dalla manipolazione dei controlli dei limiti. Se non viene impostato alcun oggetto, il valore predefinito viene impostato sull'oggetto proprietario.

Comportamento di attivazione

Esistono diverse opzioni per attivare l'interfaccia di controllo dei limiti.

  • Attiva on Start: il controllo Bounds diventa visibile dopo l'avvio della scena.
  • Attiva per prossimità: il controllo Bounds diventa visibile quando una mano articolata è vicina all'oggetto.
  • Attiva per puntatore: il controllo Bounds diventa visibile quando è destinato da un puntatore a raggio a mano.
  • Attiva per prossimità e puntatore: il controllo Bounds diventa visibile quando è destinato da un puntatore a raggio della mano o una mano articolata è vicina all'oggetto.
  • Attiva manualmente: il controllo Bounds non diventa visibile automaticamente. È possibile attivarlo manualmente tramite uno script accedendo alla proprietà boundsControl.Active.

Override dei limiti

Imposta un collider box dall'oggetto per il calcolo dei limiti.

Riempimento box

Aggiunge una spaziatura interna ai limiti di collier usati per calcolare gli extent del controllo. Ciò influenza non solo l'interazione, ma anche l'impatto sugli oggetti visivi.

Asse flat

Indica se il controllo è appiattito in uno degli assi, rendendolo 2 dimensionale e non consentendo la manipolazione lungo quell'asse. Questa funzionalità può essere usata per oggetti sottili come gli slati. Se l'asse flatten è impostato su Flatten Auto , lo script selezionerà automaticamente l'asse con l'estensione più piccola come asse flat.

Definizione di movimenti uniformi

La sezione smoothing consente di configurare il comportamento di smoothing per la scalabilità e la rotazione del controllo.

Oggetti visivi

L'aspetto del controllo dei limiti può essere configurato modificando una delle configurazioni di oggetti visivi corrispondenti. Le configurazioni visive sono oggetti scriptable collegati o inlined e sono descritte in modo più dettagliato nella sezione dell'oggetto di configurazione.

Oggetti di configurazione

Il controllo include un set di oggetti di configurazione che possono essere archiviati come oggetti scriptabili e condivisi tra istanze diverse o prefab. Le configurazioni possono essere condivise e collegate come singoli file di asset scriptabili o asset annidati all'interno di prefab. È anche possibile definire altre configurazioni direttamente nell'istanza senza collegare un asset script esterno o annidato.

Il controllo controllo dei limiti indica se una configurazione è condivisa o inlinede come parte dell'istanza corrente visualizzando un messaggio nel controllo delle proprietà. Inoltre, le istanze condivise non saranno modificabili direttamente nella finestra delle proprietà di controllo dei limiti, ma l'asset che collega deve essere modificato direttamente per evitare modifiche accidentali sulle configurazioni condivise.

Attualmente il controllo dei limiti offre opzioni di oggetti di configurazione per le funzionalità seguenti:

Configurazione box

La configurazione della casella è responsabile del rendering di una scatola solida con limiti definiti tramite dimensioni collidere e riempimento box. Le proprietà seguenti possono essere configurate:

  • Materiale box: definisce il materiale applicato alla casella di rendering quando non si verifica alcuna interazione. Verrà eseguito il rendering di una casella solo se questo materiale è impostato.
  • Materiale afferrato box: materiale per la scatola quando l'utente interagisce con il controllo afferrando tramite un'interazione vicino o lontano.
  • Scala di visualizzazione dell'asse flat: scala applicata alla visualizzazione della casella se uno degli assi è appiattito.

Scalabilità delle handle di configurazione

Questo cassetto delle proprietà consente di modificare il comportamento e la visualizzazione degli handle di scalabilità del controllo dei limiti.

  • Handle material: materiale applicato agli handle.
  • Materiale afferrato: materiale applicato alla maniglia afferrata.
  • Handle prefab: prefab facoltativo per l'handle di scalabilità. Se non è impostato MRTK userà un cubo come impostazione predefinita.
  • Dimensioni handle: dimensioni dell'handle di scalabilità.
  • Riempimento collidere: riempimento da aggiungere al collidere.
  • Disegna tether durante la modifica: quando attiva disegna una linea di tether dal punto di inizio dell'interazione alla posizione corrente o puntatore.
  • Handle ignora collider: se un collider viene collegato qui, gli handle ignorano qualsiasi collisione con questo collisore.
  • Handle slate prefab: prefab da usare per l'handle quando il controllo è appiattito.
  • Mostra handle di scalabilità: controlla la visibilità dell'handle.
  • Comportamento di scalabilità: può essere impostato su scalabilità uniforme o non uniforme.

Gestione rotazione della configurazione

Questa configurazione definisce il comportamento dell'handle di rotazione.

  • Handle material: materiale applicato agli handle.
  • Materiale afferrato: materiale applicato alla maniglia afferrata.
  • Handle prefab: prefab facoltativo per l'handle. Se non è impostato MRTK userà una sfera come impostazione predefinita.
  • Dimensioni dell'handle: dimensioni dell'handle.
  • Riempimento collidere: riempimento da aggiungere al collidere.
  • Disegna tether durante la modifica: quando attiva disegna una linea di tether dal punto di inizio dell'interazione alla posizione corrente o puntatore.
  • Handle ignora collider: se un collider viene collegato qui, gli handle ignorano qualsiasi collisione con questo collisore.
  • Gestire il tipo di collidere prefab: tipo di collider da usare con l'handle creato.
  • Mostra handle per X: controlla la visibilità dell'handle per l'asse X.
  • Mostra handle per Y: controlla la visibilità dell'handle per l'asse Y.
  • Mostra handle per Z: controlla la visibilità dell'handle per l'asse Z.

La traduzione gestisce la configurazione

Consente di abilitare e configurare handle di traduzione per il controllo dei limiti. Si noti che gli handle di traduzione sono disabilitati per impostazione predefinita.

  • Handle material: materiale applicato agli handle.
  • Materiale afferrato: materiale applicato alla maniglia afferrata.
  • Handle prefab: prefab facoltativo per l'handle. Se non è impostato MRTK userà una sfera come impostazione predefinita.
  • Dimensioni dell'handle: dimensioni dell'handle.
  • Riempimento collidere: riempimento da aggiungere al collidere.
  • Disegna tether durante la modifica: quando attiva disegna una linea di tether dal punto di inizio dell'interazione alla posizione corrente o puntatore.
  • Handle ignora collider: se un collider viene collegato qui, gli handle ignorano qualsiasi collisione con questo collisore.
  • Gestire il tipo di collisore prefab: tipo di collisore da usare con l'handle creato.
  • Mostra handle per X: controlla la visibilità dell'handle per l'asse X.
  • Mostra handle per Y: controlla la visibilità dell'handle per l'asse Y.
  • Mostra handle per Z: controlla la visibilità dell'handle per l'asse Z.

La configurazione dei collegamenti abilita la funzionalità wireframe del controllo limiti. È possibile configurare le proprietà seguenti:

  • Materiale wireframe: il materiale applicato alla mesh wireframe.
  • Raggio del bordo del wireframe: spessore del wireframe.
  • Forma wireframe: forma del wireframe può essere cubica o cilindrica.
  • Mostra wireframe: controlla la visibilità del wireframe.

Configurazione dell'effetto prossimità

Mostra e nasconde le maniglie con animazione in base alla distanza delle mani. Ha un'animazione di ridimensionamento in due passaggi. Le impostazioni predefinite sono impostate su HoloLens 2 comportamento dello stile.

Bounds control Proximity
  • Effetto prossimità attivo: abilita l'attivazione dell'handle basata sulla prossimità
  • Prossimità media oggetto: distanza per il ridimensionamento del primo passaggio
  • Prossimità di chiusura dell'oggetto: distanza per il ridimensionamento del secondo passaggio
  • Scala lontano: valore di scala predefinito dell'asset handle quando le mani non rientrano nell'intervallo di interazione del controllo dei limiti (distanza definita in precedenza da "Handle Medium Proximity". Usare 0 per nascondere l'handle per impostazione predefinita)
  • Scala media: valore della scala dell'asset di handle quando le mani sono all'interno dell'intervallo di interazione del controllo dei limiti (distanza definita in precedenza da "Handle Close Proximity". Usare 1 per visualizzare le dimensioni normali)
  • Chiudi Scalabilità: valore della scala dell'asset di handle quando le mani sono all'interno dell'intervallo di interazione di afferramento (distanza definita in precedenza da "Handle Close Proximity". Usare 1.x per visualizzare dimensioni maggiori)
  • Far Grow Rate: valuta la scalabilità di un oggetto ridimensionato di prossimità quando la mano si sposta da media a lontano.
  • Velocità di crescita media: consente di valutare la scalabilità di un oggetto ridimensionato di prossimità quando la mano passa da media a prossimità vicina.
  • Close Grow Rate (Frequenza di espansione chiusura): valuta la scalabilità di un oggetto ridimensionato di prossimità quando la mano passa dalla prossimità al centro oggetti.

Sistema di vincoli

Il controllo Bounds supporta l'uso del gestore di vincoli per limitare o modificare il comportamento di traslazione, rotazione o ridimensionamento durante l'uso di handle di controllo dei limiti.

Il controllo proprietà mostrerà tutti i gestori vincoli disponibili associati allo stesso oggetto gioco in un elenco a discesa con un'opzione per scorrere ed evidenziare il gestore dei vincoli selezionato.

Bounds control Constraints

Eventi

Il controllo Limiti fornisce gli eventi seguenti. Questo esempio usa questi eventi per riprodurre commenti e suggerimenti audio.

  • Ruota avviata: attivata all'avvio della rotazione.
  • Ruota arrestata: attivata quando si arresta la rotazione.
  • Ridimensionamento avviato: viene attivato all'avvio del ridimensionamento.
  • Scalabilità arrestata: viene attivata quando il ridimensionamento si arresta.
  • Translate Started: viene attivato all'avvio della traduzione.
  • Traduci arrestato: viene attivato all'arresto della traduzione.
Bounds control Events

Elastics (sperimentale)

È possibile utilizzare elastici per la modifica di oggetti tramite il controllo dei limiti. Si noti che il sistema elastico è ancora in stato sperimentale. Per abilitare elastici, collegare un componente di gestione elastici esistente o creare e collegare un nuovo gestore elastici tramite il Add Elastics Manager pulsante .

Bounds control Elastics

Gestire gli stili

Per impostazione predefinita, quando si assegna semplicemente lo BoundsControl.cs script, verrà visualizzato l'handle dello stile di HoloLens prima generazione. Per usare HoloLens 2 handle di stile, è necessario assegnare prefab e materiali di handle appropriati.

Bounds Control Handle Styles 2

Di seguito sono riportati i prefab, i materiali e i valori di ridimensionamento per gli handle di controllo dei limiti di stile HoloLens 2. Questo esempio è disponibile nella BoundsControlExamples scena.

Bounds control HandleStyles

Handle (impostazione per lo stile di HoloLens 2)

  • Handle Material: BoundingBoxHandleWhite.mat
  • Handle Grabbed Material: BoundingBoxHandleBlueGrabbed.mat
  • Prefab dell'handle di scalabilità: MRTK_BoundingBox_ScaleHandle.prefab
  • Prefab Slate handle di scalabilità: MRTK_BoundingBox_ScaleHandle_Slate.prefab
  • Dimensioni handle scala: 0,016 (1,6 cm)
  • Riempimento del collisore di handle di scala: 0,016 (rende il collisore afferrabile leggermente più grande dell'oggetto visivo handle)
  • Prefab dell'handle di rotazione: MRTK_BoundingBox_RotateHandle.prefab
  • Dimensioni handle di rotazione: 0,016
  • Riempimento del collisore del quadratino di rotazione: 0,016 (rende il collisore afferrabile leggermente più grande dell'oggetto visivo handle)

Modifiche della trasformazione con manipolatore di oggetti

Un controllo dei limiti può essere utilizzato in combinazione con ObjectManipulator.cs per consentire determinati tipi di manipolazione (ad esempio, lo spostamento dell'oggetto) senza utilizzare handle. Il gestore di manipolazione supporta le interazioni sia una che due mani. Il tracciamento della mano può essere usato per interagire con un oggetto da vicino.

Bounds control Object Manipulator

Per fare in modo che i bordi del controllo dei limiti si comportino allo stesso modo quando si sposta con ObjectManipulatorl'interazione lontano, è consigliabile connettere i relativi eventi rispettivamente per On Manipulation Started / On Manipulation Ended a BoundsControl.HighlightWires / BoundsControl.UnhighlightWires , come illustrato nello screenshot precedente.

Come aggiungere e configurare un controllo dei limiti usando Unity Inspector

  1. Aggiungere Box Collider a un oggetto
  2. Assegnare BoundsControl lo script a un oggetto
  3. Configurare le opzioni, ad esempio i metodi di attivazione (vedere la sezione Proprietà di controllo di seguito)
  4. (Facoltativo) Assegnare prefab e materiali per un controllo dei limiti di stile HoloLens 2 (vedere la sezione Gestire gli stili di seguito)

Nota

Utilizzare il campo Target Object and Bounds Override nel controllo per assegnare oggetti e collisori specifici nell'oggetto con più componenti figlio.

Bounds Control

Come aggiungere e configurare un controllo limiti nel codice

  1. Creare un'istanza di GameObject del cubo

    GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
    
  2. Assegnare BoundsControl lo script a un oggetto con collisore usando AddComponent<>()

    private BoundsControl boundsControl;
    boundsControl = cube.AddComponent<BoundsControl>();
    
  3. Configurare le opzioni direttamente nel controllo o tramite una delle configurazioni scriptable (vedere la sezione Proprietà e configurazioni di controllo di seguito)

    // Change activation method
    boundsControl.BoundsControlActivation = BoundsControlActivationType.ActivateByProximityAndPointer;
    // Make the scale handles large
    boundsControl.ScaleHandlesConfig.HandleSize = 0.1f;
    // Hide rotation handles for x axis
    boundsControl.RotationHandlesConfig.ShowRotationHandleForX = false;
    
  4. (Facoltativo) Assegnare prefab e materiali per un controllo dei limiti di stile HoloLens 2. Ciò richiede comunque assegnazioni tramite il controllo perché i materiali e i prefab devono essere caricati in modo dinamico.

Nota

L'uso della cartella "Resources" di Unity o shader.Find per il caricamento dinamico degli shader non è consigliato perché le permutazioni dello shader potrebbero non essere presenti in fase di esecuzione.

BoxDisplayConfiguration boxConfiguration = boundsControl.BoxDisplayConfig;
boxConfiguration.BoxMaterial = [Assign BoundingBox.mat]
boxConfiguration.BoxGrabbedMaterial = [Assign BoundingBoxGrabbed.mat]
ScaleHandlesConfiguration scaleHandleConfiguration = boundsControl.ScaleHandlesConfig;
scaleHandleConfiguration.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
scaleHandleConfiguration.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
scaleHandleConfiguration.HandlePrefab = [Assign MRTK_BoundingBox_ScaleHandle.prefab]
scaleHandleConfiguration.HandleSlatePrefab = [Assign MRTK_BoundingBox_ScaleHandle_Slate.prefab]
scaleHandleConfiguration.HandleSize = 0.016f;
scaleHandleConfiguration.ColliderPadding = 0.016f;
RotationHandlesConfiguration rotationHandleConfiguration = boundsControl.RotationHandlesConfig;
rotationHandleConfiguration.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
rotationHandleConfiguration.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
rotationHandleConfiguration.HandlePrefab = [Assign MRTK_BoundingBox_RotateHandle.prefab]
rotationHandleConfiguration.HandleSize = 0.016f;
rotationHandleConfiguration.ColliderPadding = 0.016f;

Esempio: Impostare la scalabilità del controllo dei limiti minimi e massimi usando MinMaxScaleConstraint

Per impostare la scala minima e massima, collegare un oggetto MinMaxScaleConstraint al controllo. Quando il controllo dei limiti si collega e attiva automaticamente gestione vincoli, MinMaxScaleConstraint verrà applicato automaticamente alle modifiche della trasformazione dopo che è collegato e configurato.

È anche possibile usare MinMaxScaleConstraint per impostare la scalabilità minima e massima per ObjectManipulator.

GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
bcontrol = cube.AddComponent<BoundsControl>();
// Important: BoundsControl creates a constraint manager on start if one does not exist.
// There's no need to manually attach a constraint manager.
MinMaxScaleConstraint scaleConstraint = bcontrol.gameObject.AddComponent<MinMaxScaleConstraint>();
scaleConstraint.ScaleMinimum = 1f;
scaleConstraint.ScaleMaximum = 2f;

Esempio: Aggiungere un controllo dei limiti intorno a un oggetto gioco

Per aggiungere un controllo dei limiti intorno a un oggetto, è sufficiente aggiungervi un BoundsControl componente:

private void PutABoundsControlAroundIt(GameObject target)
{
   target.AddComponent<BoundsControl>();
}

Migrazione dal rettangolo di selezione

I prefab e le istanze esistenti che usano il rettangolo di selezione possono essere aggiornati al nuovo controllo dei limiti tramite la finestra di migrazione che fa parte del pacchetto degli strumenti MRTK.

Per aggiornare singole istanze del rettangolo di selezione è disponibile anche un'opzione di migrazione all'interno del controllo proprietà del componente.

Bounds control Migrate

Vedi anche