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

Mode sélection automatique

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

Mode sélection manuelle

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é.

Démonstration de FaceUserConstraint

FixedDistanceConstraint

Cette contrainte corrige la distance entre l’objet manipulé et une autre transformation d’objet au début de la manipulation. Cela est utile pour des comportements tels que la fixation de la distance entre l’objet manipulé et la transformation de la tête. Le champ de transformation de contrainte est défini par défaut sur la transformation de caméra et est l’autre transformation à laquelle l’objet manipulé aura une distance fixe.

Démonstration de FixedDistanceConstraint

MaintainApparentSizeConstraint

Lorsque cette contrainte est attachée à un objet, quelle que soit la distance entre l’objet et l’utilisateur, elle conserve la même taille apparente pour l’utilisateur (c’est-à-dire qu’elle occupe la même proportion du champ de vision de l’utilisateur). Cela peut être utilisé pour garantir qu’une ardoise ou un panneau de texte reste lisible lors de la manipulation.

Démonstration de MaintainApparentSizeConstraint

MoveAxisConstraint

Cette contrainte peut être utilisée pour déterminer le long des axes sur lesquels un objet manipulé peut être déplacé. Cela peut être utile pour manipuler des objets sur la surface d’un plan ou le long d’une ligne.
Le champ Contrainte sur le mouvement spécifie les axes sur lesquels empêcher le mouvement. Par défaut, ces axes seront globaux plutôt que locaux, mais cela peut être modifié ci-dessous. Étant donné que cette propriété est un indicateur, vous pouvez sélectionner n’importe quel nombre d’options.

Démonstration de MoveAxisConstraint

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.

Démonstration de MinMaxScaleConstraint

RotationAxisConstraint

Cette contrainte peut être utilisée pour déterminer quels axes un objet manipulé peut faire l’objet d’une rotation. Cela peut être utile pour maintenir un objet manipulé à la verticale, tout en autorisant les rotations de l’axe Y, par exemple.
Le champ Contrainte sur rotation spécifie les axes sur lesquels empêcher la rotation. Par défaut, ces axes seront globaux plutôt que locaux, mais cela peut être modifié ci-dessous. Étant donné que cette propriété est un indicateur, vous pouvez sélectionner n’importe quel nombre d’options.

Démonstration de RotationAxisConstraint