Restricciones: MRTK3

ConstraintManager permite aplicar un conjunto de componentes de restricción a una transformación. De forma predeterminada, el administrador de restricciones recopila todos los componentes de restricción adjuntos automáticamente y los aplica al objeto de destino. Sin embargo, los usuarios también pueden optar por configurar la lista de restricciones aplicadas manualmente para permitir que solo se use un subconjunto de restricciones adjuntas.

Nota

Actualmente, el MRTK3 ofrece un subconjunto limitado de las restricciones del MRTK 2.x. En este momento, estamos investigando una refactorización del sistema de restricciones para unificar el flujo de trabajo del desarrollador mediante solucionadores y elásticos. ¡Permanezca atento!

Actualmente, los siguientes elementos de experiencia de usuario del MRTK admiten restricciones:

El administrador de restricciones puede funcionar en los dos modos que se detallan a continuación:

  • Selección automática de restricciones
  • Selección manual de restricciones

Selección de restricciones

Selección automática de restricciones

Modo de selección automática

El modo automático predeterminado muestra todos los componentes de restricción adjuntos. Puede ir directamente al componente en el inspector, mediante los botones Ir al componente, o agregar una nueva restricción desde la lista desplegable.

Selección manual de restricciones

Modo de selección manual

Si el administrador de restricciones se establece en el modo manual, solo se procesarán y aplicarán a la transformación las restricciones vinculadas en la lista de restricciones. Al habilitar el modo manual por primera vez, el administrador rellenará automáticamente la lista con todas las restricciones asociadas actualmente.

Nota

Al seleccionar la acción Quitar entrada la restricción solo se quitará de la lista de selección manual. Sin embargo, el componente seguirá estando presente en el elemento GameObject.

Orden de ejecución

El orden de ejecución de cada restricción se puede definir en la opción Orden de ejecución, ubicada en la propia restricción. Este orden se reflejará en la lista que se muestra en el administrador de restricciones. Algunas restricciones se comportarán de forma diferente cuando se coloquen en diferentes órdenes. Por tanto, tenga en cuenta las prioridades de cada restricción y ajuste su orden de forma procedente.

Restricciones de transformación

Es posible usar restricciones para limitar la manipulación de ciertas maneras. Por ejemplo, algunas aplicaciones pueden requerir rotación y que el objeto permanezca vertical. En este caso, se puede agregar un elemento RotationAxisConstraint al objeto, que se usará para limitar la rotación al giro del eje Y. El MRTK proporciona varias restricciones. A continuación, se describen todas ellas.

También es posible definir nuevas restricciones y usarlas para crear un comportamiento de manipulación único que pueda ser necesario para ciertas aplicaciones. Para ello, cree un script que herede de la clase TransformConstraint e implemente la propiedad abstracta ConstraintType y el método abstracto ApplyConstraint. La nueva restricción debería aparecer en la lista desplegable y registrarse automáticamente en el administrador de restricciones cuando se agregue al objeto.

Todas las restricciones que proporciona el MRTK comparten las siguientes propiedades:

La propiedad Hand Type le permite especificar si la restricción se usa en la manipulación con una mano, dos manos o en ambos casos. Dado que esta propiedad es una marca, es posible seleccionar ambas opciones.

  • One-handed: Si se selecciona esta opción, la restricción se usará durante la manipulación con una sola mano.
  • Two-handed: Si se selecciona esta opción, la restricción se usará durante la manipulación con dos manos.

La propiedad ProximityType le permite especificar si la restricción se aplica sobre la manipulación cercana, lejana o en ambos casos. Dado que esta propiedad es una marca, es posible seleccionar ambas opciones.

  • Near: Si se selecciona esta opción, la restricción se usará durante la manipulación cercana.
  • Far: Si se selecciona esta opción, la restricción se usará durante la manipulación lejana.

FaceUserConstraint

Esta restricción limita la rotación de un objeto de forma que este siempre se sitúa de cara al usuario. La opción Face Away controla si se usa el eje Z positivo o negativo.

Demostración de FaceUserConstraint

FixedDistanceConstraint

Esta restricción corrige la distancia entre el objeto manipulado y otra transformación de objeto al iniciar la manipulación. Esto es útil para el comportamiento, como la fijación de la distancia desde el objeto manipulado a la transformación de cabeza. El campo Transformación de restricción tiene como valor predeterminado la transformación de cámara y es la otra transformación a la que el objeto manipulado tendrá una distancia fija.

Demostración de FixedDistanceConstraint

MaintainApparentSizeConstraint

Cuando esta restricción se adjunta a un objeto, independientemente de la distancia que tenga el objeto del usuario, mantendrá el mismo tamaño aparente para el usuario (es decir, tomará la misma proporción del campo de vista del usuario). Esto se puede usar para asegurarse de que una pizarra o un panel de texto permanece legible durante la manipulación.

Demostración de MaintainApparentSizeConstraint

MoveAxisConstraint

Esta restricción se puede usar para corregir a lo largo del cual se puede mover un objeto manipulado. Esto puede ser útil para manipular objetos sobre la superficie de un plano o a lo largo de una línea.
El campo Restricción de movimiento especifica los ejes en los que se va a evitar el movimiento. De forma predeterminada, estos ejes serán globales en lugar de locales, pero esto se puede cambiar a continuación. Dado que esta propiedad es una marca, se puede seleccionar cualquier número de opciones.

Demostración de MoveAxisConstraint

MinMaxScaleConstraint

Esta restricción limita la escala de un objeto y resulta útil para impedir que los usuarios escalen objetos a tamaños demasiado pequeños o grandes como para poder usarlos. Esta funciona tanto con el escalado basado en manipuladores (con la implementación BoundsControl) como con el escalado directo mediante dos manos (con la implementación ObjectManipulator). La opción Relative to initial state le permite definir si los valores de escala Minimum y Maximum scale específicos son valores absolutos o si se multiplican en la escala inicial del objeto.

Demostración de MinMaxScaleConstraint

RotationAxisConstraint

Esta restricción se puede usar para corregir los ejes que puede girar un objeto manipulado. Esto puede ser útil para mantener un objeto manipulado en posición vertical, pero seguir permitiendo rotaciones del eje Y, por ejemplo.
El campo Restricción en rotación especifica los ejes que se van a evitar la rotación. De forma predeterminada, estos ejes serán globales en lugar de locales, pero esto se puede cambiar a continuación. Dado que esta propiedad es una marca, se puede seleccionar cualquier número de opciones.

Demostración de RotationAxisConstraint