Control De límites: MRTK2

Control de límites

BoundsControl es el nuevo componente para el comportamiento de manipulación, que se encontró anteriormente en BoundingBox. El control de límites realiza una serie de mejoras y simplificaciones en la configuración y agrega nuevas características. Este componente es un reemplazo del rectángulo de selección, que quedará en desuso.

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

Escena de ejemplo

Puede encontrar ejemplos de configuraciones de control de límites en la BoundsControlExamples escena.

Ejemplo de control Bounds

Propiedades del inspector

Objeto de destino

Esta propiedad especifica qué objeto se transformará mediante la manipulación del control de límites. Si no se establece ningún objeto, el valor predeterminado es el objeto propietario.

Comportamiento de activación

Hay varias opciones para activar la interfaz de control de límites.

  • Activar al iniciar: el control Bounds se vuelve visible una vez iniciada la escena.
  • Activar por proximidad: el control de límites se vuelve visible cuando una mano articulada está cerca del objeto.
  • Activar por puntero: el control de límites se vuelve visible cuando está dirigido por un puntero de rayo de mano.
  • Activar por proximidad y puntero: el control de límites se vuelve visible cuando está dirigido por un puntero de rayos de mano o una mano articulada está cerca del objeto.
  • Activar manualmente: el control de límites no se vuelve visible automáticamente. Para activarlo manualmente a través de un script, acceda a la propiedad boundsControl.Active.

Invalidación de límites

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

Relleno de cuadros

Agrega un relleno a los límites del colisionador utilizados para calcular las extensiones del control. Esto influirá no solo en la interacción, sino que también afectará a los objetos visuales.

Eje de acoplado

Indica si el control está acoplado en uno de los ejes, lo que lo convierte en 2 dimensiones y permite la manipulación a lo largo de ese eje. Esta característica se puede usar para objetos finos como pizarras. Si el eje acoplado se establece en Acoplar automático , el script seleccionará automáticamente el eje con la extensión más pequeña como eje plano.

Suavizado

La sección de suavizado permite configurar el comportamiento de suavizado para la escala y rotación del control.

Objetos visuales

La apariencia del control de límites se puede configurar modificando una de las configuraciones de objetos visuales correspondientes. Las configuraciones visuales son objetos vinculados o insertados que se pueden incluir en scripts y se describen con más detalle en la sección de objetos de configuración.

Objetos de configuración

El control incluye un conjunto de objetos de configuración que se pueden almacenar como objetos que se pueden crear scripts y compartir entre diferentes instancias o objetos prefabricados. Las configuraciones se pueden compartir y vincular como archivos de recursos que se pueden crear scripts individuales o como recursos anidados que se pueden crear scripts dentro de objetos prefabricados. También se pueden definir configuraciones adicionales directamente en la instancia sin vincular a un recurso externo o anidado que se pueda crear scripts.

El inspector de control de límites indicará si una configuración se comparte o se inserta como parte de la instancia actual mostrando un mensaje en el inspector de propiedades. Además, las instancias compartidas no se podrán editar directamente en la propia ventana de propiedades de control de límites, sino que el recurso al que está vinculada tiene que modificarse directamente para evitar cambios accidentales en las configuraciones compartidas.

Actualmente, el control de límites ofrece opciones de objetos de configuración para las siguientes características:

Configuración de box

La configuración del cuadro es responsable de representar un cuadro sólido con límites definidos a través del tamaño del colisionador y el relleno de cuadros. Se pueden configurar las siguientes propiedades:

  • Material de caja: define el material aplicado al cuadro representado cuando no tiene lugar ninguna interacción. Solo se representará un cuadro si se establece este material.
  • Material agarrado por caja: material para la caja cuando el usuario interactúa con el control agarrando a través de la interacción cercana o lejana.
  • Escala de presentación del eje plano: una escala que se aplica a la pantalla del cuadro si uno de los ejes está acoplado.

Configuración de controladores de escalado

Este cajón de propiedades permite modificar el comportamiento y la visualización de los identificadores de escala del control de límites.

  • Material de asa: material aplicado a los mangos.
  • Mango agarrado material: material aplicado al mango agarrado.
  • Identificador prefabricado: prefabricado opcional para el identificador de escala. Si no se establece MRTK, usará un cubo como valor predeterminado.
  • Tamaño del controlador: tamaño del identificador de escala.
  • Relleno del colisionador: relleno para agregar al colisionador del controlador.
  • Dibujar tether al manipular: cuando activo dibujará una línea de tether desde el punto de inicio de la interacción hasta la posición actual del puntero o la mano.
  • Los controladores omiten el colisionador: si un colisionador se vincula aquí, los controladores omitirán cualquier colisión con este colisionador.
  • Control de prefabricado de pizarra: prefabricado que se va a usar para el controlador cuando el control está acoplado.
  • Mostrar identificadores de escala: controla la visibilidad del identificador.
  • Comportamiento de escala: se puede establecer en escalado uniforme o no uniforme.

Rotación controla la configuración

Esta configuración define el comportamiento del controlador de rotación.

  • Material de asa: material aplicado a los mangos.
  • Mango agarrado material: material aplicado al mango agarrado.
  • Identificador prefabricado: prefabricado opcional para el identificador. Si no se establece MRTK, usará una esfera como predeterminada.
  • Tamaño del identificador: tamaño del identificador.
  • Relleno del colisionador: relleno para agregar al colisionador del controlador.
  • Dibujar tether al manipular: cuando activo dibujará una línea de tether desde el punto de inicio de la interacción hasta la posición actual del puntero o la mano.
  • Los controladores omiten el colisionador: si un colisionador se vincula aquí, los controladores omitirán cualquier colisión con este colisionador.
  • Controlar el tipo de colisionador prefabricado: tipo de colisionador que se va a usar con el identificador creado.
  • Mostrar identificador para X: controla la visibilidad del controlador para el eje X.
  • Mostrar identificador para Y: controla la visibilidad del controlador para el eje Y.
  • Mostrar identificador para Z: controla la visibilidad del controlador para el eje Z.

La traducción controla la configuración

Permite habilitar y configurar identificadores de traducción para el control de límites. Tenga en cuenta que los identificadores de traducción están deshabilitados por valor predeterminado.

  • Material de asa: material aplicado a los mangos.
  • Mango agarrado material: material aplicado al mango agarrado.
  • Identificador prefabricado: prefabricado opcional para el identificador. Si no se establece MRTK, usará una esfera como predeterminada.
  • Tamaño del identificador: tamaño del identificador.
  • Relleno del colisionador: relleno para agregar al colisionador del controlador.
  • Dibujar el tether al manipular: cuando activo dibujará una línea de tether desde el punto de inicio de la interacción hasta la posición de puntero o mano actual.
  • Los controladores omiten el colisionador: si un colisionador se vincula aquí, los controladores omitirán cualquier colisión con este colisionador.
  • Controlar el tipo de colisionador prefabricado: tipo de colisionador que se va a usar con el identificador creado.
  • Mostrar identificador para X: controla la visibilidad del controlador para el eje X.
  • Mostrar identificador para Y: controla la visibilidad del controlador para el eje Y.
  • Mostrar identificador para Z: controla la visibilidad del controlador para el eje Z.

La configuración de vínculos habilita la característica wireframe del control de límites. Se pueden configurar las siguientes propiedades:

  • Material de wireframe: el material aplicado a la malla de trama de alambre.
  • Radio de borde del wireframe: grosor del wireframe.
  • Forma de trama: forma del wireframe puede ser cúbica o cilíndrica.
  • Mostrar wireframe: controla la visibilidad del wireframe.

Configuración del efecto de proximidad

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. Los valores predeterminados se establecen en HoloLens 2 comportamiento de estilo.

Límites de control Proximidad
  • Efecto de proximidad activo: habilitación de la activación del controlador basado en proximidad
  • Proximidad media del objeto: distancia para el escalado del primer paso
  • Proximidad de cierre de objeto: distancia para el escalado del segundo paso
  • Escala lejana: valor de escala predeterminado del recurso de controlador cuando las manos están fuera del intervalo de la interacción del control de límites (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 control de límites (distancia definida anteriormente por "Controlar proximidad cercana". Use 1 para mostrar el tamaño normal)
  • Cerrar escala: valor de escala del recurso de identificador cuando las manos están dentro del intervalo de la interacción de la toma (distancia definida anteriormente por "Controlar proximidad cercana". Use 1.x para mostrar un tamaño mayor)
  • Tasa de crecimiento lejano: tasa de escalado de proximidad cuando la mano se mueve de media a lejos.
  • Velocidad de crecimiento medio: tasa de escalado de proximidad cuando la mano se mueve de media a cercana.
  • Close Grow Rate (Tasa de crecimiento de cierre): se escala un objeto con escala de proximidad cuando la mano se mueve de proximidad cercana al centro de objetos.

Sistema de restricciones

El control Bounds admite el uso del administrador de restricciones para limitar o modificar el comportamiento de traducción, rotación o escalado mientras se usan identificadores de control de límites.

El inspector de propiedades mostrará todos los administradores de restricciones disponibles adjuntos al mismo objeto de juego en una lista desplegable con una opción para desplazarse y resaltar el administrador de restricciones seleccionado.

Restricciones de control de límites

Eventos

El control Bounds 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.
  • Girar detenido: se desencadena cuando se detiene la rotación.
  • Escalado iniciado: se activa cuando se inicia el escalado.
  • Escala detenida: se activa cuando se detiene el escalado.
  • Traducción iniciada: se desencadena cuando se inicia la traducción.
  • Traducir detenido: se activa cuando se detiene la traducción.
Eventos de control de límites

Elastics (Experimental)

Los elásticos se pueden usar al manipular objetos a través del control de límites. Tenga en cuenta que el sistema elástico sigue en estado experimental. Para habilitar los elásticos, vincule un componente de administrador elástico existente o cree y vincule un nuevo administrador elástico a través del Add Elastics Manager botón .

Controles de límites Elásticos

Controlar estilos

De forma predeterminada, cuando acabas de asignar el BoundsControl.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 control de límites 2

A continuación se muestran los objetos prefabricados, los materiales y los valores de escalado de los identificadores de control de estilo HoloLens 2. Puede encontrar este ejemplo en la BoundsControlExamples escena.

Bounds control HandleStyles

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)

Cambios de transformación con manipulador de objetos

Se puede usar un control de límites en combinación con ObjectManipulator.cs para permitir determinados tipos de manipulación (por ejemplo, mover el objeto) sin usar identificadores. 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.

Manipulador de objetos de control de límites

Para que los bordes de control de límites se comporten de la misma manera al moverlo mediante ObjectManipulatorla interacción lejana, se recomienda conectar sus eventos para On Manipulation Started / On Manipulation Ended On Manipulation Ended to BoundsControl.HighlightWires / BoundsControl.UnhighlightWires respectivamente, como se muestra en la captura de pantalla anterior.

Cómo agregar y configurar un control de límites mediante El inspector de Unity

  1. Adición de Box Collider a un objeto
  2. Asignación de BoundsControl 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 control de límites 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.

Bounds Control

Cómo agregar y configurar un control de límites en el código

  1. Creación de instancias del cubo GameObject

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

    private BoundsControl boundsControl;
    boundsControl = cube.AddComponent<BoundsControl>();
    
  3. Configure las opciones directamente en el control o a través de una de las configuraciones que se pueden crear scripts (consulte la sección Propiedades y configuraciones del inspector a continuación).

    // 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. (Opcional) Asigne objetos prefabricados y materiales para un control de límites 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.

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;

Ejemplo: Establecimiento de la escala de control de límites mínimo y máximo mediante MinMaxScaleConstraint

Para establecer la escala mínima y máxima, adjunte un MinMaxScaleConstraint elemento al control. A medida que el control de límites se asocia y activa automáticamente el administrador de restricciones, MinMaxScaleConstraint se aplicará automáticamente a los cambios de transformación una vez conectado y configurado.

También puede usar MinMaxScaleConstraint para establecer la escala mínima y máxima para 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;

Ejemplo: Agregar control de límites alrededor de un objeto de juego

Para agregar un control de límites alrededor de un objeto, basta con agregarle un BoundsControl componente:

private void PutABoundsControlAroundIt(GameObject target)
{
   target.AddComponent<BoundsControl>();
}

Migración desde Bounding Box

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 cuadro de límite, también hay una opción de migración dentro del inspector de propiedades del componente.

Migración de controles de límites

Consulte también