Rettangolo di selezione - MRTK2

Bounding box

Nota

Il rettangolo di selezione è deprecato e sostituito dal controllo dei limiti del successore. Usare una delle opzioni di migrazione per aggiornare gli oggetti gioco esistenti.

Lo BoundingBox.cs script offre funzionalità di base per trasformare gli oggetti in realtà mista. Un rettangolo di selezione mostrerà un cubo intorno all'ologramma per indicare che può essere interagito con. Gestisce gli angoli e i bordi del cubo consentono il ridimensionamento o la rotazione dell'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 feedback visivo per aiutare a percepire la distanza dall'oggetto. Tutte le interazioni e gli oggetti visivi possono essere facilmente personalizzati.

Per altre informazioni, vedere Casella di selezione e barra dell'app nella Windows Dev Center.

Scena di esempio

È possibile trovare esempi di configurazioni di caselle di selezione nella BoundingBoxExamples scena.

Bounding Box Examples

Come aggiungere e configurare una casella di selezione usando Unity Inspector

  1. Aggiungere Box Collider a un oggetto
  2. Assegnare BoundingBox script a un oggetto
  3. Configurare le opzioni, ad esempio i metodi "Attivazione" (vedere la sezione Proprietà di controllo di seguito)
  4. (Facoltativo) Assegnare prefab e materiali per un riquadro di selezione dello stile HoloLens 2 (vedere La sezione Gestisci stili di seguito)

Nota

Usare il campo Oggetto target e Bounds Override nel controllo per assegnare oggetti e collider specifici nell'oggetto con più componenti figlio.

Bounding Box 1

Come aggiungere e configurare una casella di selezione nel codice

  1. Creare un'istanza del cubo GameObject

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

    private BoundingBox bbox;
    bbox = cube.AddComponent<BoundingBox>();
    
  3. Configurare le opzioni (vedere la sezione Proprietà di controllo riportata di seguito)

    // Make the scale handles large
    bbox.ScaleHandleSize = 0.1f;
    // Hide rotation handles
    bbox.ShowRotationHandleForX = false;
    bbox.ShowRotationHandleForY = false;
    bbox.ShowRotationHandleForZ = false;
    
  4. (Facoltativo) Assegnare prefab e materiali per un riquadro di selezione dello stile HoloLens 2. Ciò richiede comunque assegnazioni tramite il controllo poiché i materiali e i prefab devono essere caricati dinamicamente.

Nota

L'uso della cartella "Resources" di Unity o Shader.Find per il caricamento dinamico degli shader non è consigliato poiché le permutazioni dello 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 scalabilità minima, 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 aggiungere un BoundingBox componente a esso:

private void PutABoxAroundIt(GameObject target)
{
   target.AddComponent<BoundingBox>();
}

Proprietà di controllo

Oggetti di destinazione

Questa proprietà specifica l'oggetto che verrà trasformato dalla manipolazione del rettangolo di selezione. Se non viene impostato alcun oggetto, il rettangolo di selezione viene impostato per impostazione predefinita sull'oggetto proprietario.

Override dei limiti

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

Comportamento di attivazione

Esistono diverse opzioni per attivare l'interfaccia della casella di selezione.

  • Attiva su Start: la casella di selezione diventa visibile dopo l'avvio della scena.
  • Attiva per prossimità: la casella di selezione diventa visibile quando una mano articolata è vicina all'oggetto.
  • Attiva per puntatore: la casella di selezione diventa visibile quando è destinata da un puntatore a raggio a mano.
  • Attiva manualmente: la casella 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 e è preferibile aggiungere uno MinMaxScaleConstraint script. Se questo script viene aggiunto, la scala minima verrà presa da essa anziché dal rettangolo di selezione.

Scalabilità massima

Scala massima consentita. Questa proprietà è deprecata e è preferibile aggiungere uno MinMaxScaleConstraint script. Se questo script viene aggiunto, la scala massima verrà presa da essa anziché dal rettangolo di selezione.

Visualizzazione casella

Varie opzioni di visualizzazione casella di selezione.

Se l'asse flatten è impostato su Flatten Auto, lo script non consente la manipolazione lungo l'asse con l'estensione più piccola. Ciò comporta un rettangolo di selezione 2D, che viene in genere usato per oggetti sottili.

Selettori

È possibile assegnare il materiale e il prefab per eseguire l'override dello stile di handle. Se non vengono assegnati handle, verranno visualizzati nello stile predefinito.

Eventi

La casella di selezione fornisce gli eventi seguenti. In questo esempio vengono usati questi eventi per riprodurre commenti e suggerimenti audio.

  • Rotazione avviata: attivata all'avvio della rotazione.
  • Ruota terminata: attivata quando termina la rotazione.
  • Scalabilità avviata: viene attivata all'avvio del ridimensionamento.
  • Scalabilità terminata: viene attivata quando termina il ridimensionamento.
Events

Gestire gli stili

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

Bounding Box Handle Styles

Di seguito sono riportati i prefab, i materiali e i valori di ridimensionamento per gli handle delle caselle di selezione dello stile HoloLens 2. È possibile trovare questo esempio nella BoundingBoxExamples scena.

HandStyles 2

Handle (installazione per HoloLens 2 stile)

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

Prossimità (installazione per HoloLens 2 stile)

Mostra e nasconde i handle con animazione in base alla distanza delle mani. Ha un'animazione di ridimensionamento in due passaggi.

Proximity
  • Effetto di prossimità Attivo: abilitare l'attivazione dell'handle basato su prossimità
  • Gestire la prossimità media: distanza per il ridimensionamento del primo passaggio
  • Gestire la prossimità di chiusura: distanza per il ridimensionamento del 2° passaggio
  • Scala larga: valore di scala predefinito dell'asset di handle quando le mani non sono in grado di eseguire l'interazione tra caselle di selezione (distanza definita sopra da "Handle Medium Proximity". Usare 0 per nascondere l'handle per impostazione predefinita)
  • Scala media: scalare il valore dell'asset di handle quando le mani si trovano all'interno dell'intervallo di interazione tra caselle di selezione (distanza definita in precedenza da "Handle Close Proximity". Usare 1 per visualizzare le dimensioni normali)
  • Chiudi scala: scalare il valore dell'asset di handle quando le mani si trovano all'interno dell'intervallo di interazione di afferramento (distanza definita in precedenza da "Handle Close Proximity". Usare 1.x per visualizzare dimensioni maggiori)

Creazione di un oggetto mobile con gestore di manipolazione

Un rettangolo di selezione può essere combinato con ManipulationHandler.cs per rendere l'oggetto mobile usando un'interazione lontana. Il gestore di manipolazione supporta interazioni sia di una che di due mani. Il rilevamento delle mani può essere usato per interagire con un oggetto vicino.

Manipulation Handler

Per consentire ai bordi della casella di selezione di comportarsi nello stesso modo durante lo spostamento usando ManipulationHandlerl'interazione lontano, è consigliabile connettere i relativi eventi per On Manipulation Started / On Manipulation TerminateBoundingBox.HighlightWires / BoundingBox.UnhighlightWires rispettivamente, 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 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 delle proprietà del componente.

Bounds Control Migrate