Controllo Limiti

Controllo Limiti

BoundsControl è il nuovo componente per il comportamento di manipolazione, disponibile in precedenza in BoundingBox. Il controllo limiti apporta una serie di 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 visualizza una casella intorno all'ologramma per indicare che è possibile interagire con esso. I quadratini di ridimensionamento sugli angoli e sui bordi della casella consentono di ridimensionare, ruotare o tradurre l'oggetto. Il controllo dei limiti reagisce anche all'input dell'utente. In HoloLens 2, ad esempio, il controllo limiti risponde alla prossimità delle dita, fornendo feedback visivo per consentire di percepire la distanza dall'oggetto. Tutte le interazioni e gli oggetti visivi possono essere facilmente personalizzati.

Scena di esempio

Nella scena sono disponibili esempi di configurazioni di controllo dei BoundsControlExamples limiti.

Bounds control Example

Proprietà del controllo

Oggetti di destinazione

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

Comportamento di attivazione

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

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

Override dei limiti

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

Riempimento della casella

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

Appiattire l'asse

Indica se il controllo è appiattito in uno degli assi, rendendolo 2 dimensionale e non consentire la manipolazione lungo tale asse. Questa funzionalità può essere usata per oggetti sottili come ardesia. Se l'opzione Flatten axis è impostata su Flatten Auto, lo script selezionerà automaticamente l'asse con l'estensione più piccola come asse appiattito.

Definizione di movimenti uniformi

La sezione smoothing consente di configurare il comportamento di smoothing 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 collegati o inline che possono essere creati tramite script 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 con script e condivisi tra istanze o prefab diversi. Le configurazioni possono essere condivise e collegate come singoli file di asset modificabili tramite script o asset annidati che possono essere script all'interno di prefab. È anche possibile definire altre configurazioni direttamente nell'istanza senza collegarsi a un asset esterno o annidabile tramite script.

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

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

Configurazione di Box

La configurazione della casella è responsabile del rendering di una casella a tinta unita con limiti definiti tramite la dimensione del collisore e la spaziatura interna della casella. È possibile configurare le proprietà seguenti:

  • Materiale della scatola: definisce il materiale applicato alla casella sottoposta a rendering quando non viene applicata alcuna interazione. Il rendering di una casella verrà eseguito solo se questo materiale è impostato.
  • Materiale afferrato da box: materiale per la scatola quando l'utente interagisce con il controllo afferrando tramite l'interazione vicina o lontana.
  • Scala di visualizzazione dell'asse appiattito: scala applicata alla visualizzazione della casella 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 dei limiti.

  • Materiale di gestione: materiale applicato alle maniglie.
  • Maniglia materiale afferrato: materiale applicato alla maniglia afferrata.
  • Handle prefab: prefab facoltativo per l'handle di scala. Se non è impostata, MRTK userà un cubo come impostazione predefinita.
  • Handle size: dimensione del quadratino di ridimensionamento.
  • Riempimento collisore: spaziatura interna da aggiungere al collisore della maniglia.
  • Disegna tether durante la manipolazione: quando attiva disegna una linea 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 scala: controlla la visibilità dell'handle.
  • Comportamento della scala: può essere impostato su scala uniforme o non uniforme.

Configurazione degli handle di rotazione

Questa configurazione definisce il comportamento dell'handle di rotazione.

  • Materiale di gestione: materiale applicato alle maniglie.
  • Maniglia materiale afferrato: materiale applicato alla maniglia afferrata.
  • Handle prefab: prefab facoltativo per l'handle. Se non è impostata, MRTK userà una sfera come impostazione predefinita.
  • Dimensioni dell'handle: dimensioni dell'handle.
  • Riempimento collisore: spaziatura interna da aggiungere al collisore della maniglia.
  • Disegna tether durante la manipolazione: quando attiva disegna una linea 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.

Configurazione degli handle di conversione

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

  • Materiale di gestione: materiale applicato alle maniglie.
  • Maniglia materiale afferrato: materiale applicato alla maniglia afferrata.
  • Handle prefab: prefab facoltativo per l'handle. Se non è impostata, MRTK userà una sfera come impostazione predefinita.
  • Dimensioni dell'handle: dimensioni dell'handle.
  • Riempimento collisore: spaziatura interna da aggiungere al collisore della maniglia.
  • Disegna tether durante la manipolazione: quando attiva disegna una linea 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 dei limiti. È possibile configurare le proprietà seguenti:

  • Wireframe material (Materiale wireframe): materiale applicato alla mesh wireframe.
  • Raggio bordo wireframe: spessore del wireframe.
  • Forma wireframe: la forma del wireframe può essere cubica o ciclica.
  • Mostra wireframe: controlla la visibilità del wireframe.

Configurazione dell'effetto di prossimità

Mostra e nasconde i quadratini di ridimensionamento con animazione in base alla distanza dalle mani. Include un'animazione in due passaggi per il ridimensionamento. I valori predefiniti sono impostati HoloLens 2 comportamento dello stile.

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

Sistema di vincoli

Il controllo limiti supporta l'uso di Gestione vincoli per limitare o modificare il comportamento di traslazione, rotazione o ridimensionamento mentre si usano i punti di controllo dei limiti.

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

Bounds control Constraints

Eventi

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

  • Rotate Started : attivato all'avvio della rotazione.
  • Rotate Stopped (Ruota arrestata): attivato quando la rotazione si arresta.
  • Ridimensionamento avviato: viene generato all'avvio del ridimensionamento.
  • Ridimensionamento arrestato: viene generato quando il ridimensionamento si arresta.
  • Translate Started: viene generato all'avvio della traduzione.
  • Translate Stopped(Traduci arrestato): viene generato all'arresto della traduzione.
Bounds control Events

Elastics (sperimentale)

Gli elastici possono essere usati quando si modificano gli oggetti tramite il controllo dei limiti. Si noti che il sistema elastico è ancora in stato sperimentale. Per abilitare gli elastici, collegare un componente di gestione elastici esistente oppure 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 solo lo script, viene visualizzato l'handle dello stile di prima BoundsControl.cs generazione di HoloLens. Per usare i HoloLens 2 di stile, è necessario assegnare prefab e materiali di gestione adeguati.

Stili dei quadratini di ridimensionamento del controllo Bounds 2

Di seguito sono riportati i prefab, i materiali e i valori di ridimensionamento per i punti HoloLens 2 di controllo dei limiti di stile. È possibile trovare questo esempio nella BoundsControlExamples scena .

Bounds control HandleStyles

Handle (configurazione per lo HoloLens 2 personalizzato)

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

Modifiche della trasformazione con il manipolatore di oggetti

Un controllo limiti può essere usato in combinazione con ObjectManipulator.cs per consentire determinati tipi di manipolazione (ad esempio spostamento dell'oggetto) senza utilizzare handle. Il gestore di manipolazione supporta interazioni con una e due mani. Il tracciamento delle mani può essere usato per interagire con un oggetto da vicino.

Bounds control Object Manipulator

Per fare in modo che i bordi del controllo limiti si comportino allo stesso modo quando vengono spostati usando l'interazione da lontano di , è consigliabile connettere rispettivamente i relativi eventi per On Manipulation Started On Manipulation Ended a , come illustrato nello ObjectManipulator / BoundsControl.HighlightWires / BoundsControl.UnhighlightWires screenshot precedente.

Come aggiungere e configurare un controllo limiti usando Unity Inspector

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

Nota

Usare il campo Target Object (Oggetto di destinazione) e Bounds Override (Override limiti) nel controllo per assegnare oggetti e collisori specifici nell'oggetto con più componenti figlio.

Controllo Bounds

Come aggiungere e configurare un controllo limiti nel codice

  1. Creare un'istanza del gameobject del cubo

    GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
    
  2. Assegnare BoundsControl uno 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 che è possibile creare tramite script (vedere la sezione Proprietà e configurazioni del controllo più avanti)

    // 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 HoloLens 2 limiti di stile. Questa operazione richiede comunque assegnazioni tramite il controllo perché i materiali e i prefab devono essere caricati dinamicamente.

Nota

Non è consigliabile usare la cartella 'Resources' di Unity o Shader.Find per il caricamento dinamico degli shader, perché le permutazioni degli 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 scala di controllo dei limiti minimi e massimi usando MinMaxScaleConstraint

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

È anche possibile usare MinMaxScaleConstraint per impostare la scala 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 il controllo limiti intorno a un oggetto gioco

Per aggiungere un controllo limiti intorno a un oggetto, è sufficiente BoundsControl aggiungere un 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 limiti tramite la finestra di migrazione che fa parte del pacchetto di strumenti MRTK.

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

Bounds control Migrate

Vedi anche