Rettangolo di selezione - MRTK2
Nota
Il rettangolo di selezione è deprecato e sostituito dal relativo controllo limiti successori. Usare una delle opzioni di migrazione per aggiornare gli oggetti gioco esistenti.
Lo BoundingBox.cs
script fornisce funzionalità di base per la trasformazione di oggetti nella realtà mista. Un rettangolo di selezione mostrerà un cubo intorno all'ologramma per indicare che può essere interagito con . Le maniglie sugli angoli e sui bordi del cubo consentono di ridimensionare o ruotare l'oggetto. Il rettangolo di selezione reagisce anche all'input dell'utente. In HoloLens 2, ad esempio, il rettangolo di selezione risponde alla prossimità del dito, fornendo un feedback visivo che consente di percepire la distanza dall'oggetto. Tutte le interazioni e gli oggetti visivi possono essere facilmente personalizzati.
Per altre informazioni, vedi Riquadro delimitatore e barra dell'app in Windows Dev Center.
Scena di esempio
È possibile trovare esempi di configurazioni del rettangolo di selezione nella BoundingBoxExamples
scena.

Come aggiungere e configurare un rettangolo di selezione usando Unity Inspector
- Aggiungere Box Collider a un oggetto
- Assegnare
BoundingBox
uno script a un oggetto - Configurare le opzioni, ad esempio i metodi "Attivazione" (vedere la sezione Proprietà controllo di seguito)
- (Facoltativo) Assegnare prefab e materiali per un rettangolo di selezione dello stile di HoloLens 2 (vedere la sezione Stili di manipolazione di seguito)
Nota
Utilizzare il campo Oggetto di destinazione e Override limiti nel controllo per assegnare oggetti e collisori specifici nell'oggetto con più componenti figlio.
Come aggiungere e configurare un rettangolo di selezione nel codice
Creare un'istanza del cubo GameObject
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
Assegnare
BoundingBox
uno script a un oggetto con collider, usando AddComponent<>()private BoundingBox bbox; bbox = cube.AddComponent<BoundingBox>();
Configurare le opzioni (vedere la sezione Proprietà controllo di seguito)
// Make the scale handles large bbox.ScaleHandleSize = 0.1f; // Hide rotation handles bbox.ShowRotationHandleForX = false; bbox.ShowRotationHandleForY = false; bbox.ShowRotationHandleForZ = false;
(Facoltativo) Assegnare prefab e materiali per un rettangolo di selezione dello stile HoloLens 2. Ciò richiede ancora assegnazioni tramite il controllo poiché i materiali e i prefab devono essere caricati dinamicamente.
Nota
Non è consigliabile usare la cartella "Risorse" di Unity o Shader.Find per il caricamento dinamico degli shader perché le permutazioni di shader potrebbero non essere presenti in fase di esecuzione.
bbox.BoxMaterial = [Assign BoundingBox.mat]
bbox.BoxGrabbedMaterial = [Assign BoundingBoxGrabbed.mat]
bbox.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
bbox.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
bbox.ScaleHandlePrefab = [Assign MRTK_BoundingBox_ScaleHandle.prefab]
bbox.ScaleHandleSlatePrefab = [Assign MRTK_BoundingBox_ScaleHandle_Slate.prefab]
bbox.ScaleHandleSize = 0.016f;
bbox.ScaleHandleColliderPadding = 0.016f;
bbox.RotationHandleSlatePrefab = [Assign MRTK_BoundingBox_RotateHandle.prefab]
bbox.RotationHandleSize = 0.016f;
bbox.RotateHandleColliderPadding = 0.016f;
Esempio: Impostare la scala minima e massima del rettangolo di selezione usando MinMaxScaleConstraint
Per impostare la scala minima e massima, usare .MinMaxScaleConstraint
È anche possibile usare MinMaxScaleConstraint per impostare la scala minima e massima per ManipulationHandler
.
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
bbox = cube.AddComponent<BoundingBox>();
// Important: BoundingBox creates a scale handler on start if one does not exist
// do not use AddComponent, as that will create a duplicate handler that will not be used
MinMaxScaleConstraint scaleConstraint = bbox.gameObject.GetComponent<MinMaxScaleConstraint>();
scaleConstraint.ScaleMinimum = 1f;
scaleConstraint.ScaleMaximum = 2f;
Esempio: Aggiungere un rettangolo di selezione intorno a un oggetto gioco
Per aggiungere un rettangolo di selezione intorno a un oggetto, è sufficiente aggiungervi un BoundingBox
componente:
private void PutABoxAroundIt(GameObject target)
{
target.AddComponent<BoundingBox>();
}
Proprietà del controllo
Oggetto di destinazione
Questa proprietà specifica l'oggetto che verrà trasformato dalla modifica del rettangolo di selezione. Se non è impostato alcun oggetto, il riquadro delimitatore viene impostato per impostazione predefinita sull'oggetto proprietario.
Override dei limiti
Imposta un collisore box dall'oggetto per il calcolo dei limiti.
Comportamento di attivazione
Sono disponibili diverse opzioni per attivare l'interfaccia del rettangolo di selezione.
- Attiva all'inizio: il rettangolo di selezione diventa visibile dopo l'avvio della scena.
- Attiva per prossimità: il rettangolo di selezione diventa visibile quando una mano articolata è vicina all'oggetto.
- Attiva per puntatore: il rettangolo di selezione diventa visibile quando è destinato a un puntatore a raggi di mano.
- Attiva manualmente: il rettangolo di selezione non diventa visibile automaticamente. È possibile attivarlo manualmente tramite uno script accedendo alla proprietà boundingBox.Active.
Scala minima
Scala minima consentita. Questa proprietà è deprecata ed è preferibile aggiungere uno MinMaxScaleConstraint
script. Se viene aggiunto questo script, verrà ricavata la scala minima anziché dal rettangolo di selezione.
Scalabilità massima
Scala massima consentita. Questa proprietà è deprecata ed è preferibile aggiungere uno MinMaxScaleConstraint
script. Se viene aggiunto questo script, verrà ricavata la scala massima anziché dal rettangolo di selezione.
Visualizzazione della casella
Varie opzioni di visualizzazione del rettangolo di selezione.
Se l'asse di flatizzazione è impostato su Flatten Auto, lo script non consentirà la manipolazione lungo l'asse con l'estensione più piccola. In questo modo si ottiene un rettangolo di selezione 2D, in genere usato per oggetti sottili.
Manici
È possibile assegnare il materiale e il prefab per sostituire lo stile della maniglia. Se non vengono assegnati handle, verranno visualizzati nello stile predefinito.
Events
Il rettangolo di selezione fornisce gli eventi seguenti. Questo esempio usa questi eventi per riprodurre il feedback audio.
- Ruota avviato: attivato all'avvio della rotazione.
- Ruota terminata: generato al termine della rotazione.
- Ridimensionamento avviato: viene generato all'avvio del ridimensionamento.
- Ridimensionamento terminato: viene generato al termine del ridimensionamento.

Gestire gli stili
Per impostazione predefinita, quando si assegna semplicemente lo BoundingBox.cs
script, verrà visualizzato l'handle dello stile holoLens di prima generazione. Per usare HoloLens 2 maniglie di stile, è necessario assegnare i prefab e i materiali appropriati.
Di seguito sono riportati i prefab, i materiali e i valori di ridimensionamento per le maniglie del rettangolo di selezione dello stile HoloLens 2. Questo esempio è disponibile nella BoundingBoxExamples
scena.

Handle (impostazione per lo stile HoloLens 2)
- Materiale di manipolazione: BoundingBoxHandleWhite.mat
- Handle Grabbed Material: BoundingBoxHandleBlueGrabbed.mat
- Prefab handle di scalabilità: MRTK_BoundingBox_ScaleHandle.prefab
- Prefab slate handle di scala: 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 della maniglia)
- Prefab handle di rotazione: MRTK_BoundingBox_RotateHandle.prefab
- Dimensioni quadratino di rotazione: 0,016
- Riempimento del collisore di rotazione: 0,016 (rende il collisore afferrabile leggermente più grande dell'oggetto visivo della maniglia)
Prossimità (impostazione per lo stile HoloLens 2)
Mostra e nasconde i punti di manipolazione con l'animazione in base alla distanza tra le mani. Ha un'animazione di ridimensionamento in due passaggi.

- Effetto prossimità attivo: abilitare l'attivazione degli handle basata sulla prossimità
- Gestisci prossimità media: distanza per il ridimensionamento del primo passaggio
- Gestisci prossimità di chiusura: distanza per il ridimensionamento del secondo passaggio
- Scalabilità lontana: valore di scala predefinito dell'asset di handle quando le mani non sono compresi nell'intervallo dell'interazione del rettangolo di selezione (distanza definita in precedenza da "Handle Medium Proximity". Usare 0 per nascondere l'handle per impostazione predefinita)
- Scala media: ridimensionare il valore dell'asset di handle quando le mani si trovano all'interno dell'intervallo di interazione del rettangolo di selezione (distanza definita in precedenza da "Handle Close Proximity". Usare 1 per visualizzare le dimensioni normali)
- Scala di chiusura: ridimensionare il valore dell'asset di handle quando le mani si trovano nell'intervallo dell'interazione di cattura (distanza definita in precedenza da 'Handle Close Proximity'. Usare 1.x per visualizzare dimensioni maggiori)
Rendere un oggetto mobile con il gestore di manipolazione
Un rettangolo di selezione può essere combinato con ManipulationHandler.cs
per rendere l'oggetto mobile usando l'interazione di gran lunga. Il gestore di manipolazione supporta le interazioni con una o due mani.
Il rilevamento manuale può essere usato per interagire da vicino con un oggetto.

Affinché i bordi del rettangolo di selezione si comportino allo stesso modo quando lo si sposta usando ManipulationHandler
l'interazione lontana, è consigliabile connettere rispettivamente i relativi eventi per On Manipulation Started / On Manipulation EndedBoundingBox.HighlightWires
/ BoundingBox.UnhighlightWires
, come illustrato nello screenshot precedente.
Migrazione al controllo dei limiti
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.
