Contraintes — MRTK3

ConstraintManager vous permet d’appliquer un ensemble de composants de contrainte à une transformation. Par défaut, le gestionnaire de contraintes collecte automatiquement tous les composants de contrainte attachés et les applique à l’objet cible. Toutefois, les utilisateurs peuvent également choisir de configurer la liste des contraintes appliquées manuellement, afin de n’autoriser qu’un sous-ensemble de contraintes attachées à être utilisé.

Notes

MRTK3 offre actuellement un sous-ensemble limité des contraintes de MRTK 2.x. Nous étudions actuellement un refactorisation du système de contraintes pour unifier le workflow du développeur avec des résolveurs et des éléments élastiques. Restez connecté !

Actuellement, les éléments d’expérience utilisateur MRTK suivants prennent en charge les contraintes :

Le gestionnaire de contraintes peut fonctionner en deux modes :

  • Sélection de contrainte automatique
  • Sélection de contrainte manuelle

Sélection de contrainte

Sélection de contrainte automatique

Auto Selection mode

Le mode automatique par défaut répertorie tous les composants de contrainte attachés. Vous pouvez accéder directement à un composant dans l’inspecteur à l’aide du bouton Atteindre le composant, ou ajouter une nouvelle contrainte à partir de la liste déroulante.

Sélection de contrainte manuelle

Manual Selection mode

Si le gestionnaire de contraintes est défini sur le mode manuel, seules les contraintes liées dans la liste des contraintes sont traitées et appliquées à la transformation. Lors de l’activation du mode manuel pour la première fois, le gestionnaire remplit automatiquement la liste avec toutes les contraintes actuellement attachées.

Notes

L’action Supprimer l’entrée ne supprime la contrainte que de la liste de sélection manuelle. Le composant restera présent sur le GameObject.

Ordre d’exécution

L’ordre d’exécution de chaque contrainte peut être défini dans l’option Ordre d’exécution sur la contrainte elle-même. L’ordre sera reflété dans la liste affichée dans le gestionnaire de contraintes. Certaines contraintes se comportant différemment quand elles sont combinées dans des ordres différents, gardez à l’esprit les priorités de chaque contrainte et ajustez leur ordre en conséquence.

Contraintes de transformation

Vous pouvez utiliser des contraintes pour limiter la manipulation d’une certaine façon. Par exemple, certaines applications peuvent nécessiter une rotation et que l’objet reste droit. Dans ce cas, une RotationAxisConstraint peut être ajoutée à l’objet et utilisée pour limiter la rotation à l’axe y. MRTK fournit plusieurs contraintes qui sont toutes décrites ci-dessous.

Il est également possible de définir de nouvelles contraintes et de les utiliser pour créer un comportement de manipulation unique qui peut être nécessaire pour certaines applications. Pour ce faire, créez un script qui hérite de TransformConstraint et implémente la propriété abstraite ConstraintType et la méthode abstraite ApplyConstraint. Votre nouvelle contrainte devrait apparaître dans la liste déroulante et être inscrite automatiquement dans le Gestionnaire de contraintes lors de son ajout à l’objet.

Toutes les contraintes fournies par MRTK partagent les propriétés suivantes :

Type de main spécifie si la contrainte est utilisée pour une manipulation à une mains, à deux mains ou pour les deux types de manipulation. Étant donné que cette propriété est un indicateur, les deux options peuvent être sélectionnées.

  • Une main : la contrainte sera utilisée lors d’une manipulation à une main si elle est sélectionnée.
  • Deux mains : la contrainte sera utilisée lors d’une manipulation à deux main si elle est sélectionnée.

ProximityType spécifie si la contrainte est utilisée pour les types de manipulation proche, à distance ou les deux. Étant donné que cette propriété est un indicateur, les deux options peuvent être sélectionnées.

  • Proche : la contrainte sera utilisée lors d’une manipulation proche si elle est sélectionnée.
  • Lointaine : la contrainte sera utilisée lors d’une manipulation lointaine si elle est sélectionnée.

FaceUserConstraint

Cette contrainte limite la rotation d’un objet afin qu’il soit toujours face à l’utilisateur. L’option Visage détourné contrôle si l’axe Z positif ou négatif est utilisé.

Demonstration of FaceUserConstraint

MinMaxScaleConstraint

Cette contrainte limite l’échelle d’un objet, ce qui est utile pour empêcher les utilisateurs de mettre à l’échelle des objets à des tailles anormalement petites ou grandes. Elle fonctionne tant pour la mise à l’échelle basée sur une poignée (avec BoundsControl) que pour la mise à l’échelle directe à deux mains (avec ObjectManipulator). L’option Par rapport à l’état initial définit si les valeurs d’échelle Minimale et Maximale spécifiques sont des valeurs absolues ou si elles sont multipliées sur l’échelle initiale de l’objet.

Demonstration of MinMaxScaleConstraint