Condividi tramite


Controllo limiti - MRTK2

Controllo dei limiti

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 fornisce funzionalità di base per la trasformazione di oggetti in realtà mista. Un controllo limiti mostrerà una casella intorno all'ologramma per indicare che può essere interagito con . I quadratini sugli angoli e i bordi della scatola consentono il ridimensionamento, la rotazione o la traslazione 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 aiutare a percepire la distanza dall'oggetto. Tutte le interazioni e gli oggetti visivi possono essere facilmente personalizzati.

Scena di esempio

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

Esempio di controllo Bounds

Proprietà del controllo

Oggetti di destinazione

Questa proprietà specifica l'oggetto che verrà trasformato dalla manipolazione del controllo dei limiti. Se non è impostato alcun oggetto, per impostazione predefinita viene impostato l'oggetto proprietario.

Comportamento di attivazione

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

  • Attiva all'avvio: 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 Limiti diventa visibile quando viene indirizzato da un puntatore a raggi della mano.
  • Attiva per prossimità e puntatore: il controllo Bounds diventa visibile quando viene indirizzato da un puntatore a raggi della mano o da una mano articolata è vicino 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 collisore box dall'oggetto per il calcolo dei limiti.

Spaziatura interna box

Aggiunge una spaziatura interna ai limiti del collisore utilizzati per calcolare gli extent del controllo. Ciò influirà non solo sull'interazione, ma anche sugli oggetti visivi.

Asse bidimensionale

Indica se il controllo viene appiattito in uno degli assi, rendendolo 2 dimensionale e non consentendo la manipolazione lungo l'asse. Questa funzionalità può essere usata per oggetti sottili come slates. Se l'asse flat è 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 smussamento per la scala e la rotazione del controllo.

Oggetti visivi

L'aspetto del controllo dei limiti può essere configurato modificando una delle configurazioni degli oggetti visivi corrispondenti. Le configurazioni visive sono oggetti collegabili a script o inlined e sono descritte in modo più dettagliato nella sezione relativa all'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 o prefab diversi. Le configurazioni possono essere condivise e collegate come singoli file di asset di cui è possibile creare script o asset annidati tramite script all'interno dei prefab. È anche possibile definire altre configurazioni direttamente nell'istanza senza collegarsi a un asset con script esterno o annidato.

Il controllo del controllo dei limiti indicherà se una configurazione è condivisa o inlined come parte dell'istanza corrente visualizzando un messaggio nel controllo proprietà. Inoltre, le istanze condivise non saranno modificabili direttamente nella finestra delle proprietà del controllo dei limiti, ma l'asset a cui è collegato deve essere modificato direttamente per evitare modifiche accidentali nelle configurazioni condivise.

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

Configurazione di Box

La configurazione del box è responsabile del rendering di una scatola continua con limiti definiti tramite dimensioni del collisore e spaziatura interna box. È possibile configurare le proprietà seguenti:

  • Materiale box: definisce il materiale applicato alla casella sottoposta a rendering quando non viene eseguita 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 interazione vicina o lontana.
  • Scala di visualizzazione asse bidimensionale: scala applicata alla visualizzazione box se uno degli assi è appiattito.

Configurazione degli handle di scalabilità

Questo pannello delle proprietà consente di modificare il comportamento e la visualizzazione degli handle di scala del controllo limiti.

  • Gestire il materiale: materiale applicato alle maniglie.
  • Maniglia materiale afferrato: materiale applicato alla maniglia afferrata.
  • Handle prefab: prefab facoltativo per l'handle di scalabilità. Se non è impostato MRTK, userà un cubo come predefinito.
  • Dimensioni dell'handle: dimensioni dell'handle di scala.
  • Riempimento collisore: riempimento da aggiungere al collisore di manipolazione.
  • Disegna tether durante la manipolazione: quando attivo disegna una linea di tether dal punto di inizio dell'interazione alla posizione corrente della mano o del puntatore.
  • Handle ignora collisore: se un collisore viene collegato qui, gli handle ignoreranno qualsiasi collisione con questo collisore.
  • Handle slate prefab: prefab da usare per l'handle quando il controllo viene appiattito.
  • Mostra handle di scalabilità: controlla la visibilità dell'handle.
  • Comportamento della scalabilità: può essere impostato su scalabilità uniforme o non uniforme.

Rotazione gestisce la configurazione

Questa configurazione definisce il comportamento dell'handle di rotazione.

  • Gestire il materiale: materiale applicato alle maniglie.
  • Maniglia 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 handle: dimensioni dell'handle.
  • Riempimento collisore: riempimento da aggiungere al collisore di manipolazione.
  • Disegna tether durante la manipolazione: quando attivo disegna una linea di tether dal punto di inizio dell'interazione alla posizione corrente della mano o del puntatore.
  • Handle ignora collisore: se un collisore viene collegato qui, gli handle ignoreranno 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 conversione gestisce la configurazione

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

  • Gestire il materiale: materiale applicato alle maniglie.
  • Maniglia 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 handle: dimensioni dell'handle.
  • Riempimento collisore: riempimento da aggiungere al collisore di manipolazione.
  • Disegna tether durante la manipolazione: quando attivo disegna una linea di tether dal punto di inizio dell'interazione alla posizione corrente della mano o del puntatore.
  • Handle ignora collisore: se un collisore viene collegato qui, gli handle ignoreranno 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.

Controllo Limiti prossimità
  • 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.

Vincoli di controllo limiti

evento

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.
Eventi del controllo Limiti

Elastics (sperimentale)

È possibile utilizzare elastici per la manipolazione degli 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 .

Controlli limiti Elastici

Gestire gli stili

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

Stili handle di controllo limiti 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.

Controllo Bounds 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.

Controllo Bounds 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.

Controllo Limiti

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.

Controllo Bounds Migrate

Vedi anche