Rectángulo de selecciónBounding box

Rectángulo de selección

Nota

El cuadro de límite está en desuso y se reemplaza por su control de límites de su sucesor.Bounding box is deprecated and replaced by its successor bounds control. Use una de las opciones de migración para actualizar los objetos de juego existentes.Use one of the migration options to upgrade existing game objects.

El BoundingBox.cs script proporciona funcionalidad básica para transformar objetos en realidad mixta.The BoundingBox.cs script provides basic functionality for transforming objects in mixed reality. Un rectángulo delimitador mostrará un cubo alrededor del holograma para indicar que se puede interactuar con él.A bounding box will show a cube around the hologram to indicate that it can be interacted with. Los identificadores de las esquinas y bordes del cubo permiten escalar o girar el objeto.Handles on the corners and edges of the cube allow scaling or rotating the object. El cuadro de límite también reacciona a la entrada del usuario.The bounding box also reacts to user input. Por HoloLens 2, por ejemplo, el cuadro de límite responde a la proximidad de los dedos, proporcionando comentarios visuales para ayudar a percibir la distancia desde el objeto.On HoloLens 2, for example, the bounding box responds to finger proximity, providing visual feedback to help perceive the distance from the object. Todas las interacciones y objetos visuales se pueden personalizar fácilmente.All interactions and visuals can be easily customized.

Para obtener más información, vea Cuadro de límite y Barra de aplicación en la Windows Centro de desarrollo.For more information, see Bounding box and App bar in the Windows Dev Center.

Escena de ejemploExample scene

Puede encontrar ejemplos de configuraciones de rectángulo de selección en la BoundingBoxExamples escena.You can find examples of bounding box configurations in the BoundingBoxExamples scene.

Bounding Box Examples

Adición y configuración de un rectángulo de selección mediante Unity InspectorHow to add and configure a bounding box using Unity Inspector

  1. Agregar box collider a un objetoAdd Box Collider to an object
  2. Asignación BoundingBox de script a un objetoAssign BoundingBox script to an object
  3. Configuración de opciones, como los métodos de activación (consulte la sección Propiedades del inspector a continuación)Configure options, such as 'Activation' methods (see Inspector properties section below)
  4. (Opcional) Asignación de prefabs y materiales para un HoloLens 2 delimitador de estilo (consulte la sección Estilos de identificador a continuación)(Optional) Assign prefabs and materials for a HoloLens 2 style bounding box (see Handle styles section below)

Nota

Use el objeto de destino y el campo Invalidación de límites en el inspector para asignar un objeto y colisionador específicos en el objeto con varios componentes secundarios.Use Target Object and Bounds Override field in the inspector to assign specific object and collider in the object with multiple child components.

Rectángulo de selección 1

Cómo agregar y configurar un cuadro de límite en el códigoHow to add and configure a bounding box in the code

  1. Creación de instancias de GameObject de cuboInstantiate cube GameObject

    GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
    
  2. Asignación BoundingBox de un script a un objeto con colisionador mediante AddComponent<>()Assign BoundingBox script to an object with collider, using AddComponent<>()

    private BoundingBox bbox;
    bbox = cube.AddComponent<BoundingBox>();
    
  3. Configurar opciones (consulte la sección Propiedades del inspector a continuación)Configure options (see Inspector properties section below)

    // Make the scale handles large
    bbox.ScaleHandleSize = 0.1f;
    // Hide rotation handles
    bbox.ShowRotationHandleForX = false;
    bbox.ShowRotationHandleForY = false;
    bbox.ShowRotationHandleForZ = false;
    
  4. (Opcional) Asigne prefabs y materiales para un HoloLens 2 delimitador de estilo.(Optional) Assign prefabs and materials for a HoloLens 2 style bounding box. Esto todavía requiere asignaciones a través del inspector, ya que los materiales y los objetos prefab deben cargarse dinámicamente.This still requires assignments through the inspector since the materials and prefabs should be dynamically loaded.

Nota

No se recomienda usar la carpeta "Resources" de Unity o Shader.Find para cargar de forma dinámica sombreadores, ya que es posible que falte permutaciones del sombreador en tiempo de ejecución.Using Unity's 'Resources' folder or Shader.Find for dynamically loading shaders is not recommended since shader permutations may be missing at runtime.

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;

Ejemplo: Establecer la escala mínima y máxima del cuadro de límite mediante MinMaxScaleConstraintExample: Set minimum, maximum bounding box scale using MinMaxScaleConstraint

Para establecer la escala mínima y máxima, use MinMaxScaleConstraint .To set the minimum and maximum scale, use the MinMaxScaleConstraint. También puede usar MinMaxScaleConstraint para establecer la escala mínima y máxima para ManipulationHandler .You can also use MinMaxScaleConstraint to set minimum and maximum scale for 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;

Ejemplo: Agregar un cuadro de límite alrededor de un objeto de juegoExample: Add bounding box around a game object

Para agregar un rectángulo delimitador alrededor de un objeto, basta con agregarle BoundingBox un componente:To add a bounding box around an object, simply add a BoundingBox component to it:

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

Propiedades del inspectorInspector properties

Objeto de destinoTarget object

Esta propiedad especifica qué objeto se transformará mediante la manipulación del cuadro de límite.This property specifies which object will get transformed by the bounding box manipulation. Si no se establece ningún objeto, el cuadro de límite tiene como valor predeterminado el objeto propietario.If no object is set, the bounding box defaults to the owner object.

Invalidación de límitesBounds override

Establece un colisionador de cuadros del objeto para el cálculo de límites.Sets a box collider from the object for bounds computation.

Comportamiento de activaciónActivation behavior

Hay varias opciones para activar la interfaz del cuadro de límite.There are several options to activate the bounding box interface.

  • Activar al iniciar: el cuadro de límite se vuelve visible una vez que se inicia la escena.Activate On Start: Bounding box becomes visible once the scene is started.
  • Activar por proximidad: el cuadro de límite se vuelve visible cuando una mano articulada está cerca del objeto.Activate By Proximity: Bounding box becomes visible when an articulated hand is close to the object.
  • Activar por puntero: el rectángulo de selección se vuelve visible cuando está dirigido por un puntero de rayos de mano.Activate By Pointer: Bounding box becomes visible when it is targeted by a hand-ray pointer.
  • Activar manualmente: el cuadro de límite no se vuelve visible automáticamente.Activate Manually: Bounding box does not become visible automatically. Puede activarlo manualmente a través de un script accediendo a la propiedad boundingBox.Active.You can manually activate it through a script by accessing the boundingBox.Active property.

Escala mínimaScale minimum

Escala mínima permitida.The minimum allowed scale. Esta propiedad está en desuso y es preferible agregar un MinMaxScaleConstraint script.This property is deprecated and it is preferable to add a MinMaxScaleConstraint script. Si se agrega este script, la escala mínima se toma de él en lugar del cuadro de límite.If this script is added, the minimum scale will be taken from it instead of from the bounding box.

Escalado máximoScale maximum

Escala máxima permitida.The maximum allowed scale. Esta propiedad está en desuso y es preferible agregar un MinMaxScaleConstraint script.This property is deprecated and it is preferable to add a MinMaxScaleConstraint script. Si se agrega este script, la escala máxima se toma de él en lugar del cuadro de límite.If this script is added, the maximum scale will be taken from it instead of from the bounding box.

Presentación del cuadroBox display

Varias opciones de visualización del cuadro de límite.Various bounding box visualization options.

Si Aplanar eje se establece en Aplanar automático, el script no permitirá la manipulación a lo largo del eje con la extensión más pequeña.If Flatten Axis is set to Flatten Auto, the script will disallow manipulation along the axis with the smallest extent. Esto da como resultado un cuadro de límite 2D, que normalmente se usa para objetos finos.This results in a 2D bounding box, which is usually used for thin objects.

AsasHandles

Puede asignar el material y el prefab para invalidar el estilo del identificador.You can assign the material and prefab to override the handle style. Si no se asignan identificadores, se mostrarán en el estilo predeterminado.If no handles are assigned, they will be displayed in the default style.

EventsEvents

El cuadro de límite proporciona los siguientes eventos.Bounding box provides the following events. En este ejemplo se usan estos eventos para reproducir comentarios de audio.This example uses these events to play audio feedback.

  • Girar iniciado: se desencadena cuando se inicia la rotación.Rotate Started: Fired when rotation starts.
  • Girar finalizado: se desencadena cuando finaliza la rotación.Rotate Ended: Fired when rotation ends.
  • Escalado iniciado: se inicia cuando se inicia el escalado.Scale Started: Fires when scaling starts.
  • Escala finalizada: se produce cuando finaliza el escalado.Scale Ended: Fires when scaling ends.
Events

Controlar estilosHandle styles

De forma predeterminada, al asignar el script, se mostrará el identificador del HoloLens BoundingBox.cs de primera generación.By default, when you just assign the BoundingBox.cs script, it will show the handle of the HoloLens 1st gen style. Para usar HoloLens 2 identificadores de estilo, debe asignar prefabs y materiales de identificador adecuados.To use HoloLens 2 style handles, you need to assign proper handle prefabs and materials.

Estilos de identificador de cuadro de límite

A continuación se muestran los requisitos previos, los materiales y los valores de escalado para los identificadores HoloLens 2 cuadro de límite de estilo.Below are the prefabs, materials, and the scaling values for the HoloLens 2 style bounding box handles. Puede encontrar este ejemplo en la BoundingBoxExamples escena.You can find this example in the BoundingBoxExamples scene.

HandStyles 2

Identificadores (configuración para HoloLens 2 estilo)Handles (Setup for HoloLens 2 style)

  • Material de identificador: BoundingBoxHandleWhite.matHandle Material: BoundingBoxHandleWhite.mat
  • Handle Grabbed Material: BoundingBoxHandleBlueGrabbed.matHandle Grabbed Material: BoundingBoxHandleBlueGrabbed.mat
  • Prefab del identificador de escala: MRTK_BoundingBox_ScaleHandle.prefabScale Handle Prefab: MRTK_BoundingBox_ScaleHandle.prefab
  • Prefab de pizarra del controlador de escala: MRTK_BoundingBox_ScaleHandle_Slate.prefabScale Handle Slate Prefab: MRTK_BoundingBox_ScaleHandle_Slate.prefab
  • Tamaño del identificador de escala: 0,016 (1,6 cm)Scale Handle Size: 0.016 (1.6cm)
  • Relleno del colisionador del controlador de escala: 0,016 (hace que el colisionador que se puede agarrar sea ligeramente mayor que el objeto visual del controlador)Scale Handle Collider Padding: 0.016 (makes the grabbable collider slightly bigger than handle visual)
  • Prefab del identificador de rotación: MRTK_BoundingBox_RotateHandle.prefabRotation Handle Prefab: MRTK_BoundingBox_RotateHandle.prefab
  • Tamaño del identificador de rotación: 0,016Rotation Handle Size: 0.016
  • Relleno del colisionador del controlador de rotación: 0,016 (hace que el colisionador que se puede agarrar sea ligeramente mayor que el objeto visual del controlador)Rotation Handle Collider Padding: 0.016 (makes the grabbable collider slightly bigger than handle visual)

Proximidad (configuración para HoloLens 2 estilo)Proximity (Setup for HoloLens 2 style)

Muestre y oculte los identificadores con animación en función de la distancia a las manos.Show and hide the handles with animation based on the distance to the hands. Tiene animación de escalado en dos pasos.It has two-step scaling animation.

Proximity
  • Efecto de proximidad activo: habilitación de la activación del identificador basado en proximidadProximity Effect Active: Enable proximity-based handle activation
  • Controlar la proximidad media: distancia para el escalado del primer pasoHandle Medium Proximity: Distance for the 1st step scaling
  • Control de proximidad: distancia para el escalado del segundo pasoHandle Close Proximity: Distance for the 2nd step scaling
  • Escala lejana: valor de escala predeterminado del recurso de identificador cuando las manos están fuera del intervalo de la interacción del cuadro de límite (distancia definida anteriormente por "Controlar proximidad media".Far Scale: Default scale value of the handle asset when the hands are out of range of the bounding box interaction (distance defined above by 'Handle Medium Proximity'. Use 0 para ocultar el identificador de forma predeterminada)Use 0 to hide handle by default)
  • Escala media: valor de escala del recurso de identificador cuando las manos están dentro del intervalo de la interacción del cuadro de límite (distancia definida anteriormente por "Proximidad de cierre del identificador".Medium Scale: Scale value of the handle asset when the hands are within range of the bounding box interaction (distance defined above by 'Handle Close Proximity'. Use 1 para mostrar el tamaño normal)Use 1 to show normal size)
  • Escala de cierre: valor de escala del recurso de identificador cuando las manos están dentro del intervalo de la interacción de agarre (distancia definida anteriormente por "Proximidad de cierre del controlador".Close Scale: Scale value of the handle asset when the hands are within range of the grab interaction (distance defined above by 'Handle Close Proximity'. Usar 1.x para mostrar un tamaño mayor)Use 1.x to show bigger size)

Hacer que un objeto se puede mover con el controlador de manipulaciónMaking an object movable with manipulation handler

Se puede combinar un cuadro de límite con ManipulationHandler.cs para que el objeto se pueda mover mediante la interacción lejana.A bounding box can be combined with ManipulationHandler.cs to make the object movable using far interaction. El controlador de manipulación admite interacciones de una y dos manos.The manipulation handler supports both one and two-handed interactions. El seguimiento manual se puede usar para interactuar con un objeto de cerca.Hand tracking can be used to interact with an object up close.

Manipulation Handler

Para que los bordes del cuadro de límite se comporten de la misma manera al moverlo mediante la interacción lejana, se recomienda conectar sus eventos para On Manipulation Started On Manipulation Ended (Manipulación iniciada al finalizar), respectivamente, como se muestra en la captura de pantalla ManipulationHandler / BoundingBox.HighlightWires / BoundingBox.UnhighlightWires anterior.In order for the bounding box edges to behave the same way when moving it using ManipulationHandler's far interaction, it is advised to connect its events for On Manipulation Started / On Manipulation Ended to BoundingBox.HighlightWires / BoundingBox.UnhighlightWires respectively, as shown in the screenshot above.

Migración al control de límitesMigrating to bounds control

Las instancias y los requisitos previos existentes que usan el cuadro de límite se pueden actualizar al nuevo control de límites a través de la ventana de migración que forma parte del paquete de herramientas de MRTK. Existing prefabs and instances using bounding box can be upgraded to the new bounds control via the migration window which is part of the MRTK tools package.

Para actualizar instancias individuales del rectángulo de selección, también hay una opción de migración dentro del inspector de propiedades del componente.For upgrading individual instances of bounding box there's also an a migration option inside the property inspector of the component.

Bounds Control Migrate