Cuadro de límite: MRTK2
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.
Cómo agregar y configurar un rectángulo de selección mediante El inspector de Unity
- Adición de Box Collider a un objeto
- Asignación de
BoundingBox
script a un objeto - Configurar opciones, como los métodos de activación (consulte la sección Propiedades del inspector a continuación)
- (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.
Cómo agregar y configurar un rectángulo de selección en el código
Creación de instancias del cubo GameObject
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
Asignar
BoundingBox
script a un objeto con colisionador mediante AddComponent<>()private BoundingBox bbox; bbox = cube.AddComponent<BoundingBox>();
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;
(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.
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.
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.
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.
- 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.
Para que los bordes del rectángulo delimitador se comporten de la misma manera al moverlo mediante ManipulationHandler
la 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.