Compartir a través de


Cuadro de límite: MRTK2

Rectángulo de selección

Nota

El cuadro de límite está en desuso y se reemplaza por su control de límites sucesor. Usa una de las opciones de migración para actualizar los objetos de juego existentes.

El BoundingBox.cs script proporciona funcionalidad básica para transformar objetos en realidad mixta. Un cuadro de límite mostrará un cubo alrededor del holograma para indicar que se puede interactuar con él. Los identificadores de las esquinas y los bordes del cubo permiten escalar o girar el objeto. El cuadro de límite también reacciona a la entrada del usuario. En HoloLens 2, por ejemplo, el rectángulo de selección responde a la proximidad del dedo, proporcionando comentarios visuales para ayudar a percibir la distancia desde el objeto. Todas las interacciones y objetos visuales se pueden personalizar fácilmente.

Para obtener más información, consulta Rectángulo de límite y Barra de aplicaciones en el Centro de desarrollo de Windows.

Escena de ejemplo

Puede encontrar ejemplos de configuraciones de rectángulo de selección en la BoundingBoxExamples escena.

Ejemplos de cuadros de límite

Cómo agregar y configurar un rectángulo de selección mediante El inspector de Unity

  1. Adición de Box Collider a un objeto
  2. Asignación de BoundingBox script a un objeto
  3. Configurar opciones, como los métodos de activación (consulte la sección Propiedades del inspector a continuación)
  4. (Opcional) Asignar objetos prefabricados y materiales para un cuadro de límite de estilo HoloLens 2 (consulte la sección Controlar estilos a continuación)

Nota

Use el campo Objeto de destino y Invalidación de límites en el inspector para asignar un objeto y colisionador específicos en el objeto con varios componentes secundarios.

Rectángulo de selección 1

Cómo agregar y configurar un rectángulo de selección en el código

  1. Creación de instancias del cubo GameObject

    GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
    
  2. Asignar BoundingBox script a un objeto con colisionador mediante AddComponent<>()

    private BoundingBox bbox;
    bbox = cube.AddComponent<BoundingBox>();
    
  3. Configurar opciones (consulte la sección Propiedades del inspector a continuación)

    // Make the scale handles large
    bbox.ScaleHandleSize = 0.1f;
    // Hide rotation handles
    bbox.ShowRotationHandleForX = false;
    bbox.ShowRotationHandleForY = false;
    bbox.ShowRotationHandleForZ = false;
    
  4. (Opcional) Asigne objetos prefabricados y materiales para un rectángulo de selección de estilo HoloLens 2. Esto todavía requiere asignaciones a través del inspector, ya que los materiales y objetos prefabricados deben cargarse dinámicamente.

Nota

No se recomienda usar la carpeta "Resources" de Unity o Shader.Find para cargar dinámicamente sombreadores, ya que es posible que falten permutaciones de sombreador en tiempo de ejecución.

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: Establecimiento de escala de cuadros de límite mínimo y máximo mediante MinMaxScaleConstraint

Para establecer la escala mínima y máxima, use .MinMaxScaleConstraint También puede usar MinMaxScaleConstraint para establecer la escala mínima y máxima para 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 cuadro de límite alrededor de un objeto de juego

Para agregar un cuadro de límite alrededor de un objeto, basta con agregarle un BoundingBox componente:

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

Propiedades del inspector

Objeto de destino

Esta propiedad especifica qué objeto se transformará mediante la manipulación del rectángulo delimitador. Si no se establece ningún objeto, el cuadro de límite tiene como valor predeterminado el objeto propietario.

Invalidación de límites

Establece un colisionador de cuadros del objeto para el cálculo de límites.

Comportamiento de activación

Hay varias opciones para activar la interfaz de rectángulo de selección.

  • Activar al inicio: el cuadro de límite se vuelve visible una vez iniciada la escena.
  • Activar por proximidad: el cuadro de límite se vuelve visible cuando una mano articulada está cerca del objeto.
  • Activar por puntero: el cuadro de límite se vuelve visible cuando se dirige a un puntero de rayos de mano.
  • Activar manualmente: el cuadro de límite no se vuelve visible automáticamente. Para activarlo manualmente a través de un script, acceda a la propiedad boundingBox.Active.

Escalado mínimo

Escala mínima permitida. Esta propiedad está en desuso y es preferible agregar un MinMaxScaleConstraint script. Si se agrega este script, la escala mínima se tomará de él en lugar del cuadro de límite.

Escalado máximo

Escala máxima permitida. Esta propiedad está en desuso y es preferible agregar un MinMaxScaleConstraint script. Si se agrega este script, la escala máxima se tomará de él en lugar del cuadro de límite.

Pantalla de cuadro

Varias opciones de visualización del cuadro de límite.

Si el eje de aplanado se establece en Aplanar automáticamente, el script no permitirá la manipulación a lo largo del eje con la extensión más pequeña. Esto da como resultado un rectángulo de límite 2D, que normalmente se usa para objetos finos.

Asas

Puede asignar el material y el objeto prefabricado para invalidar el estilo del controlador. Si no se asigna ningún identificador, se mostrarán en el estilo predeterminado.

Eventos

El cuadro de límite proporciona los siguientes eventos. En este ejemplo se usan estos eventos para reproducir comentarios de audio.

  • Rotación iniciada: se desencadena cuando se inicia la rotación.
  • Rotación finalizada: se desencadena cuando finaliza la rotación.
  • Escalado iniciado: se activa cuando se inicia el escalado.
  • Escala finalizada: se activa cuando finaliza el escalado.
Eventos

Controlar estilos

De forma predeterminada, cuando acabas de asignar el BoundingBox.cs script, mostrará el identificador del estilo holoLens 1.ª generación. Para usar controladores de estilo HoloLens 2, debe asignar los objetos prefabricados y los materiales adecuados.

Estilos de identificador de cuadro de límite

A continuación se muestran los objetos prefabricados, los materiales y los valores de escalado para los identificadores de cuadro de límite de estilo HoloLens 2. Puede encontrar este ejemplo en la BoundingBoxExamples escena.

HandStyles 2

Identificadores (configuración para HoloLens 2 estilo)

  • Material de controlador: BoundingBoxHandleWhite.mat
  • Material agarrado de mango: BoundingBoxHandleBlueGrabbed.mat
  • Control de escalado prefabricado: MRTK_BoundingBox_ScaleHandle.prefab
  • Objeto prefabricado de controlador de escalado: MRTK_BoundingBox_ScaleHandle_Slate.prefab
  • Tamaño del controlador de escala: 0,016 (1,6 cm)
  • Espaciado del colisionador del controlador de escala: 0,016 (hace que el colisionador agarrable sea ligeramente mayor que el objeto visual del controlador)
  • Control de rotación prefabricado: MRTK_BoundingBox_RotateHandle.prefab
  • Tamaño del controlador de rotación: 0,016
  • Relleno del colisionador del controlador de rotación: 0,016 (hace que el colisionador agarrable sea ligeramente mayor que el objeto visual del controlador)

Proximidad (configuración para estilo HoloLens 2)

Mostrar y ocultar los controladores con animación en función de la distancia a las manos. Tiene animación de escalado en dos pasos.

Proximidad
  • Efecto de proximidad activo: habilitación de la activación del controlador basado en proximidad
  • Controlar proximidad media: distancia para el escalado del primer paso
  • Controlar proximidad cercana: distancia para el escalado del segundo paso
  • Escalado lejano: valor de escala predeterminado del recurso de identificador cuando las manos están fuera del intervalo de la interacción del rectángulo de selección (distancia definida anteriormente por "Controlar proximidad media". Use 0 para ocultar el identificador de forma predeterminada)
  • Escala media: valor de escala del recurso de controlador cuando las manos están dentro del intervalo de la interacción del rectángulo delimitador (distancia definida anteriormente por "Controlar proximidad cercana". Use 1 para mostrar el tamaño normal)
  • Cerrar escala: valor de escala del recurso de controlador cuando las manos están dentro del intervalo de la interacción de agarre (distancia definida anteriormente por "Controlar proximidad cercana". Use 1.x para mostrar un tamaño mayor)

Hacer que un objeto se pueda mover con el controlador de manipulación

Un rectángulo delimitador se puede combinar con ManipulationHandler.cs para que el objeto se pueda mover con mucha interacción. El controlador de manipulación admite interacciones de una y dos manos. El seguimiento de manos se puede usar para interactuar con un objeto de cerca.

Controlador de manipulación

Para que los bordes del rectángulo delimitador se comporten de la misma manera al moverlo mediante ManipulationHandlerla interacción lejana, se recomienda conectar sus eventos para On Manipulation Started / On Manipulation Ended To Manipulation Ended to BoundingBox.HighlightWires / BoundingBox.UnhighlightWires respectivamente, como se muestra en la captura de pantalla anterior.

Migración al control de límites

Los objetos prefabricados y las instancias existentes mediante el rectángulo de selección 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.

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.

Migración de controles de límites