Contrôle de limites — MRTK2

Contrôle des limites

BoundsControl est le nouveau composant pour le comportement de manipulation, précédemment trouvé dans BoundingBox. Le contrôle des limites apporte un certain nombre d’améliorations et de simplifications dans la configuration et ajoute de nouvelles fonctionnalités. Ce composant remplace le cadre englobant, qui sera déprécié.

Le BoundsControl.cs script fournit des fonctionnalités de base pour transformer des objets dans la réalité mixte. Un contrôle de limites affiche une zone autour de l’hologramme pour indiquer qu’il peut être interagi avec. Les poignées sur les coins et les bords de la zone permettent la mise à l’échelle, la rotation ou la traduction de l’objet. Le contrôle de limites réagit également à l’entrée de l’utilisateur. Sur HoloLens 2, par exemple, le contrôle de limites répond à la proximité des doigts, fournissant un retour visuel pour aider à percevoir la distance par rapport à l’objet. Toutes les interactions et tous les visuels peuvent être facilement personnalisés.

Exemple de scène

Vous trouverez des exemples de configurations de contrôle de limites dans la BoundsControlExamples scène.

Exemple de contrôle de limites

Propriétés de l’inspecteur

Objet cible

Cette propriété spécifie l’objet qui sera transformé par la manipulation du contrôle de limites. Si aucun objet n’est défini, il est défini par défaut sur l’objet propriétaire.

Comportement d’activation

Il existe plusieurs options pour activer l’interface de contrôle des limites.

  • Activer au démarrage : le contrôle Limites devient visible une fois la scène démarrée.
  • Activer par proximité : le contrôle limites devient visible lorsqu’une main articulée est proche de l’objet.
  • Activer par pointeur : le contrôle limites devient visible lorsqu’il est ciblé par un pointeur de rayons de main.
  • Activer par proximité et pointeur : le contrôle limites devient visible lorsqu’il est ciblé par un pointeur de rayons de main ou qu’une main articulée est proche de l’objet.
  • Activer manuellement : le contrôle de limites ne devient pas visible automatiquement. Vous pouvez l’activer manuellement via un script en accédant à la propriété boundsControl.Active.

Remplacement des limites

Définit un collisionneur de boîtes à partir de l’objet pour le calcul des limites.

Remplissage des boîtes

Ajoute un remplissage aux limites de collisionneur utilisées pour calculer les étendues du contrôle. Cela influence non seulement l’interaction, mais aussi les visuels.

Axe aplatit

Indique si le contrôle est aplati dans l’un des axes, ce qui le rend 2 dimensionnel et interdit la manipulation le long de cet axe. Cette fonctionnalité peut être utilisée pour les objets minces tels que les ardoises. Si l’axe aplati est défini sur Aplatir automatiquement , le script sélectionne automatiquement l’axe avec la plus petite étendue comme axe aplati.

Adoucissage

La section lissage permet de configurer le comportement de lissage pour la mise à l’échelle et la rotation du contrôle.

Objets visuels

L’apparence du contrôle de limites peut être configurée en modifiant l’une des configurations visuelles correspondantes. Les configurations visuelles sont des objets scriptables liés ou incorporés et sont décrites plus en détail dans la section objet de configuration.

Objets de configuration

Le contrôle est fourni avec un ensemble d’objets de configuration qui peuvent être stockés en tant qu’objets pouvant faire l’objet d’un script et partagés entre différentes instances ou prefabs. Les configurations peuvent être partagées et liées en tant que fichiers de ressources pouvant faire l’objet d’un script individuel ou de ressources pouvant faire l’objet d’un script imbriqué à l’intérieur de préfabriqués. D’autres configurations peuvent également être définies directement sur le instance sans liaison à une ressource pouvant faire l’objet d’un script externe ou imbriqué.

L’inspecteur de contrôle de limites indique si une configuration est partagée ou insérée dans le cadre de la instance actuelle en affichant un message dans l’inspecteur de propriétés. En outre, les instances partagées ne sont pas modifiables directement dans la fenêtre de propriété de contrôle de limites elle-même, mais la ressource à laquelle elle est liée doit être directement modfiée pour éviter toute modification accidentelle sur les configurations partagées.

Actuellement, le contrôle de limites offre des options d’objets de configuration pour les fonctionnalités suivantes :

Configuration de box

La configuration de la boîte est responsable du rendu d’une boîte pleine avec des limites définies via la taille du collider et le remplissage de la boîte. Les propriétés suivantes peuvent être configurées :

  • Matériau de la boîte : définit le matériau appliqué à la zone rendue lorsqu’aucune interaction n’a lieu. Une zone n’est affichée que si ce matériau est défini.
  • Matériel saisi par la boîte : matériel pour la boîte lorsque l’utilisateur interagit avec le contrôle en saisissant via une interaction proche ou lointaine.
  • Échelle d’affichage de l’axe aplatit : échelle appliquée à l’affichage de zone si l’un des axes est aplatit.

Configuration des handles de mise à l’échelle

Ce tiroir de propriétés permet de modifier le comportement et la visualisation des handles d’échelle du contrôle de limites.

  • Matériau de poignée : matériau appliqué aux poignées.
  • Matériel saisi par poignée : matériau appliqué à la poignée saisie.
  • Prefab handle : préfabriqué facultatif pour la poignée d’échelle. Si non est défini, MRTK utilise un cube par défaut.
  • Taille de la poignée : taille du handle d’échelle.
  • Remplissage du collider : remplissage à ajouter au collider de poignée.
  • Dessiner la attache lors de la manipulation : lorsque l’élément actif dessine une ligne de connexion du point de début de l’interaction à la position actuelle de la main ou du pointeur.
  • Les handles ignorent le collider : si un collider est lié ici, les handles ignorent toute collision avec ce collisionneur.
  • Préfabriqué de poignée d’ardoise : préfabriqué à utiliser pour la poignée lorsque le contrôle est aplatit.
  • Afficher les handles d’échelle : contrôle la visibilité du handle.
  • Comportement de mise à l’échelle : peut être défini sur une mise à l’échelle uniforme ou non uniforme.

Configuration des handles de rotation

Cette configuration définit le comportement du handle de rotation.

  • Matériau de poignée : matériau appliqué aux poignées.
  • Matériel saisi par poignée : matériau appliqué à la poignée saisie.
  • Préfabriqué de poignée : préfabriqué facultatif pour la poignée. Si non est défini, MRTK utilise une sphère par défaut.
  • Taille de la poignée : taille de la poignée.
  • Remplissage du collider : remplissage à ajouter au collider de poignée.
  • Dessiner la attache lors de la manipulation : lorsque l’élément actif dessine une ligne de connexion du point de début de l’interaction à la position actuelle de la main ou du pointeur.
  • Les handles ignorent le collider : si un collider est lié ici, les handles ignorent toute collision avec ce collisionneur.
  • Handle prefab collider type : type de collider à utiliser avec le handle créé.
  • Afficher le handle pour X : contrôle la visibilité du handle pour l’axe X.
  • Afficher le handle pour Y : contrôle la visibilité du handle pour l’axe Y.
  • Afficher le handle pour Z : contrôle la visibilité du handle pour l’axe Z.

Configuration des handles de traduction

Permet d’activer et de configurer des handles de traduction pour le contrôle des limites. Notez que les handles de traduction sont désactivés par défaut.

  • Matériau de poignée : matériau appliqué aux poignées.
  • Matériel saisi par poignée : matériau appliqué à la poignée saisie.
  • Préfabriqué de poignée : préfabriqué facultatif pour la poignée. Si non est défini, MRTK utilise une sphère par défaut.
  • Taille de la poignée : taille de la poignée.
  • Remplissage du collider : remplissage à ajouter au collider de poignée.
  • Dessiner la attache lors de la manipulation : lorsque l’élément actif dessine une ligne de connexion du point de début de l’interaction à la position actuelle de la main ou du pointeur.
  • Les handles ignorent le collider : si un collider est lié ici, les handles ignorent toute collision avec ce collisionneur.
  • Handle prefab collider type : type de collider à utiliser avec le handle créé.
  • Afficher le handle pour X : contrôle la visibilité du handle pour l’axe X.
  • Afficher le handle pour Y : contrôle la visibilité du handle pour l’axe Y.
  • Afficher le handle pour Z : contrôle la visibilité du handle pour l’axe Z.

La configuration des liens active la fonctionnalité wireframe du contrôle de limites. Les propriétés suivantes peuvent être configurées :

  • Matériau filaire : matériau appliqué au maillage filaire.
  • Rayon de bord filaire : épaisseur de la trame filaire.
  • Forme filaire : forme de la trame métallique peut être cubique ou cylindrique.
  • Afficher le wireframe : contrôle la visibilité du wireframe.

Configuration de l’effet de proximité

Afficher et masquer les poignées avec une animation basée sur la distance entre les mains. Il a une animation de mise à l’échelle en deux étapes. Les valeurs par défaut sont définies sur HoloLens 2 comportement de style.

Proximité du contrôle de limites
  • Effet de proximité actif : activer l’activation de handle basée sur la proximité
  • Proximité moyenne de l’objet : distance pour la mise à l’échelle de la première étape
  • Proximité proche de l’objet : distance pour la mise à l’échelle de la 2e étape
  • Échelle lointaine : valeur d’échelle par défaut de la ressource de handle lorsque les mains sont hors de portée de l’interaction de contrôle de limites (distance définie ci-dessus par « Gérer la proximité moyenne ». Utiliser 0 pour masquer le handle par défaut)
  • Échelle moyenne : valeur d’échelle de la ressource de handle lorsque les mains se trouvent dans la plage de l’interaction de contrôle de limites (distance définie ci-dessus par « Gérer la proximité proche ». Utiliser 1 pour afficher la taille normale)
  • Close Scale : valeur de mise à l’échelle de la ressource de handle lorsque les mains se trouvent dans la plage de l’interaction de saisie (distance définie ci-dessus par « Gérer la proximité proche ». Utiliser 1.x pour afficher une plus grande taille)
  • Taux d’augmentation de la distance : évaluer un objet mis à l’échelle de proximité est mis à l’échelle lorsque la main passe de la moyenne à l’extrême.
  • Taux de croissance moyen : évaluer la mise à l’échelle d’un objet mis à l’échelle de proximité lorsque la main passe de moyenne à proche.
  • Fermer le taux de croissance : évaluer la mise à l’échelle d’un objet mis à l’échelle de proximité lorsque la main passe de la proximité au centre de l’objet.

Système de contraintes

Le contrôle de limites prend en charge l’utilisation du gestionnaire de contraintes pour limiter ou modifier le comportement de traduction, de rotation ou de mise à l’échelle lors de l’utilisation de handles de contrôle de limites.

L’inspecteur de propriétés affiche tous les gestionnaires de contraintes disponibles attachés au même objet de jeu dans une liste déroulante avec une option permettant de faire défiler et de mettre en surbrillance le gestionnaire de contraintes sélectionné.

Contraintes de contrôle de limites

Événements

Le contrôle de limites fournit les événements suivants. Cet exemple utilise ces événements pour lire les commentaires audio.

  • Rotation démarrée : déclenchée au démarrage de la rotation.
  • Faire pivoter arrêté : déclenché lorsque la rotation s’arrête.
  • Mise à l’échelle démarrée : se déclenche au démarrage de la mise à l’échelle.
  • Mise à l’échelle arrêtée : se déclenche lorsque la mise à l’échelle s’arrête.
  • Traduction démarrée : se déclenche au démarrage de la traduction.
  • Traduire arrêté : se déclenche lorsque la traduction s’arrête.
Événements de contrôle de limites

Elastics (expérimental)

Les élastiques peuvent être utilisés lors de la manipulation d’objets via le contrôle de limites. Notez que le système élastique est toujours à l’état expérimental. Pour activer elastics, liez un composant de gestionnaire élastique existant ou créez et liez un gestionnaire élastique via le Add Elastics Manager bouton .

Contrôle de limites Elastics

Styles de handle

Par défaut, lorsque vous affectez simplement le BoundsControl.cs script, il affiche le handle du style HoloLens 1ère génération. Pour utiliser HoloLens 2 poignées de style, vous devez attribuer des préfabriqués et des matériaux appropriés.

Styles de poignée de contrôle de limites 2

Vous trouverez ci-dessous les préfabriqués, les matériaux et les valeurs de mise à l’échelle pour les poignées de contrôle des limites de style HoloLens 2. Vous trouverez cet exemple dans la BoundsControlExamples scène.

HandleStyles du contrôle de limites

Handles (configuration pour HoloLens 2 style)

  • Matériau de poignée : BoundingBoxHandleWhite.mat
  • Handle Grabbed Material: BoundingBoxHandleBlueGrabbed.mat
  • Scale Handle Prefab : MRTK_BoundingBox_ScaleHandle.prefab
  • Scale Handle Scale Handle Slate Prefab: MRTK_BoundingBox_ScaleHandle_Slate.prefab
  • Taille de la poignée d’échelle : 0,016 (1,6 cm)
  • Remplissage du collider de la poignée d’échelle : 0,016 (rend le collider pouvant être saisi légèrement plus grand que le visuel de poignée)
  • Prefab de poignée de rotation : MRTK_BoundingBox_RotateHandle.prefab
  • Taille de la poignée de rotation : 0,016
  • Remplissage de la poignée de rotation collider : 0,016 (rend le collider pouvant être saisi légèrement plus grand que le visuel de poignée)

Changements de transformation avec le manipulateur d’objet

Un contrôle de limites peut être utilisé en combinaison avec ObjectManipulator.cs pour permettre certains types de manipulation (par exemple, déplacer l’objet) sans utiliser de handles. Le gestionnaire de manipulation prend en charge les interactions à une et à deux mains. Le suivi de la main peut être utilisé pour interagir avec un objet de près.

Manipulateur d’objet de contrôle de limites

Pour que les bords de contrôle des limites se comportent de la même façon lors du déplacement à l’aide ObjectManipulatorde l’interaction lointaine, il est recommandé de connecter ses événements pour Lors du démarrage de la manipulation / BoundsControl.HighlightWires / BoundsControl.UnhighlightWiresterminée, respectivement, comme illustré dans la capture d’écran ci-dessus.

Comment ajouter et configurer un contrôle de limites à l’aide de Unity Inspector

  1. Ajouter box Collider à un objet
  2. Affecter un BoundsControl script à un objet
  3. Configurer des options, telles que les méthodes « Activation » (voir la section Propriétés de l’inspecteur ci-dessous)
  4. (Facultatif) Affecter des préfabriqués et des matériaux pour un contrôle de limites de style HoloLens 2 (voir la section Gérer les styles ci-dessous)

Notes

Utilisez l’objet cible et le champ Remplacement des limites dans l’inspecteur pour affecter un objet et un collider spécifiques à l’objet avec plusieurs composants enfants.

Contrôle de limites

Comment ajouter et configurer un contrôle de limites dans le code

  1. Instancier le cube GameObject

    GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
    
  2. Affecter BoundsControl un script à un objet avec collider, à l’aide de AddComponent<>()

    private BoundsControl boundsControl;
    boundsControl = cube.AddComponent<BoundsControl>();
    
  3. Configurez les options directement sur le contrôle ou via l’une des configurations pouvant faire l’objet d’un script (voir Propriétés de l’inspecteur et section Configurations ci-dessous)

    // Change activation method
    boundsControl.BoundsControlActivation = BoundsControlActivationType.ActivateByProximityAndPointer;
    // Make the scale handles large
    boundsControl.ScaleHandlesConfig.HandleSize = 0.1f;
    // Hide rotation handles for x axis
    boundsControl.RotationHandlesConfig.ShowRotationHandleForX = false;
    
  4. (Facultatif) Attribuez des préfabriqués et des matériaux pour un contrôle de limites de style HoloLens 2. Cela nécessite toujours des affectations par l’inspecteur, car les matériaux et les préfabriqués doivent être chargés dynamiquement.

Notes

L’utilisation du dossier « Ressources » d’Unity ou de Shader.Find pour le chargement dynamique des nuanceurs n’est pas recommandée, car les permutations du nuanceur peuvent être manquantes au moment de l’exécution.

BoxDisplayConfiguration boxConfiguration = boundsControl.BoxDisplayConfig;
boxConfiguration.BoxMaterial = [Assign BoundingBox.mat]
boxConfiguration.BoxGrabbedMaterial = [Assign BoundingBoxGrabbed.mat]
ScaleHandlesConfiguration scaleHandleConfiguration = boundsControl.ScaleHandlesConfig;
scaleHandleConfiguration.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
scaleHandleConfiguration.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
scaleHandleConfiguration.HandlePrefab = [Assign MRTK_BoundingBox_ScaleHandle.prefab]
scaleHandleConfiguration.HandleSlatePrefab = [Assign MRTK_BoundingBox_ScaleHandle_Slate.prefab]
scaleHandleConfiguration.HandleSize = 0.016f;
scaleHandleConfiguration.ColliderPadding = 0.016f;
RotationHandlesConfiguration rotationHandleConfiguration = boundsControl.RotationHandlesConfig;
rotationHandleConfiguration.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
rotationHandleConfiguration.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
rotationHandleConfiguration.HandlePrefab = [Assign MRTK_BoundingBox_RotateHandle.prefab]
rotationHandleConfiguration.HandleSize = 0.016f;
rotationHandleConfiguration.ColliderPadding = 0.016f;

Exemple : Définir l’échelle de contrôle minimale et maximale des limites à l’aide de MinMaxScaleConstraint

Pour définir l’échelle minimale et maximale, attachez un MinMaxScaleConstraint à votre contrôle. Comme le contrôle de limites attache et active automatiquement le gestionnaire de contraintes, MinMaxScaleConstraint est automatiquement appliqué aux modifications de transformation une fois qu’il est attaché et configuré.

Vous pouvez également utiliser MinMaxScaleConstraint pour définir l’échelle minimale et maximale pour ObjectManipulator.

GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
bcontrol = cube.AddComponent<BoundsControl>();
// Important: BoundsControl creates a constraint manager on start if one does not exist.
// There's no need to manually attach a constraint manager.
MinMaxScaleConstraint scaleConstraint = bcontrol.gameObject.AddComponent<MinMaxScaleConstraint>();
scaleConstraint.ScaleMinimum = 1f;
scaleConstraint.ScaleMaximum = 2f;

Exemple : Ajouter un contrôle de limites autour d’un objet de jeu

Pour ajouter un contrôle de limites autour d’un objet, ajoutez-y simplement un BoundsControl composant :

private void PutABoundsControlAroundIt(GameObject target)
{
   target.AddComponent<BoundsControl>();
}

Migration à partir d’un cadre englobant

Les préfabriqués et instances existants à l’aide du cadre englobant peuvent être mis à niveau vers le nouveau contrôle de limites via la fenêtre de migration qui fait partie du package d’outils MRTK.

Pour mettre à niveau des instances individuelles de cadre englobant, il existe également une option de migration à l’intérieur de l’inspecteur de propriétés du composant.

Migration du contrôle de limites

Voir aussi