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

Auto Selection mode

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

Manual Selection mode

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.

Demonstration of FaceUserConstraint

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.

Demonstration of MinMaxScaleConstraint