BoundsControl — MRTK3

Contrôle de limites

BoundsControl fournit un cadre englobant dimensionné automatiquement, ainsi que des affordances de manipulation pour la rotation et la mise à l’échelle.

Dans MRTK 2.x, BoundsControl a été principalement généré par le runtime via l’utilisation de la configuration ScriptableObjects. Dans MRTK3, la configuration et la personnalisation de BoundsControl ont été considérablement simplifiées. Les visuels et les handles de limites sont simplement un préfabriqué personnalisable que BoundsControl instancie au moment de l’exécution. Les développeurs peuvent ajuster et personnaliser le préfabriqué des visuels, ou même créer de nouveaux visuels de limites à partir de zéro. Nous fournissons des implémentations de visuels de limites standard, en suivant la nouvelle Mixed Reality Design Language.

Les nouveaux visuels offrent un retour visuel simplifié qui illustre l’intention de l’utilisateur et la manipulation de l’objet avec un bruit visuel peu envahissant.

Programme d’installation

Ajoutez simplement BoundsControl à un objet existant et remplissez la BoundsVisualsPrefab référence avec les visuels de limites que vous souhaitez utiliser. Nous fournissons quelques visuels de limites prédéfinis différents que vous pouvez utiliser.

Important

Nous recommandons vivement aux développeurs d’ajouter MinMaxScaleConstraint pour empêcher l’utilisateur de mettre à l’échelle l’objet vers une taille inutilisablement petite ou grande.

Pour utiliser les effets d’intention et de focus des visuels de limites, vous devez avoir un StatefulInteractable sur l’objet . Si l’interaction n’est pas détectée automatiquement, vous pouvez spécifier la connexion dans l’inspecteur BoundsControl.

Notes

Nous recommandons aux développeurs d’utiliser ObjectManipulator avec BoundsControl pour offrir aux utilisateurs une manipulation directe en plus de la manipulation basée sur l’affordance. ObjectManipulator peut servir de pour les StatefulInteractable états de pointage/focus auxquels les visuels de limites répondent.

Préfabriqués visuels de limites

Nous proposons plusieurs visuels de limites prédéfinis à utiliser avec BoundsControl. Les développeurs sont encouragés à créer des variantes préfabriquées de ces visuels et à les personnaliser en fonction de leurs besoins. Les animations de handle et les états sont alimentés par StateVisualizer, ce qui permet aux développeurs de personnaliser davantage l’apparence des affordances.

Gérer le style d’occlusion

Ces visuels de limites offrent une conception visuelle simplifiée avec moins de distractions pour l’utilisateur. Seuls les handles appropriés le long des bords des limites sont visibles. Les visuels de limites contractent, développent et modifient la couleur/l’épaisseur en fonction de l’intention de l’utilisateur et de la progression de la sélection. Nous vous recommandons vivement d’utiliser ce style visuel de limites.

Poignées obclées

Intention seule

Dans certains contextes, les handles peuvent être indésirables, et les développeurs peuvent vouloir utiliser les visuels de limites seuls comme un indicateur délicieux de l’intention de l’utilisateur. Pendant que ce prefab effectue le travail, le même effet peut être obtenu avec l’un des autres visuels de limites en sélectionnant HandleType.None. Nous avons constaté que les visuels de limites de file d’attente sont un élément de retour visuel satisfaisant et délicieux pour de nombreux contextes différents, pas seulement pour la manipulation basée sur le handle.

Aucun handle

Style hérité

Ces visuels de limites affichent tous les handles et bords de la zone. Cela correspond plus étroitement au langage de conception hérité et au comportement précédent observé dans MRTK 2.x ; Toutefois, cette conception peut être plus distrayante pour les utilisateurs en raison d’un bruit visuel inutile. En outre, la présence des poignées qui se trouvent devant l’objet (et derrière) peut entraîner des problèmes avec la manipulation indirecte du pincement du regard. Nous vous déconseillons d’utiliser ce style pour les nouvelles applications, en particulier celles qui tirent parti du ciblage du regard.

Handles traditionnels

Conception des interactions

Dans l’itération actuelle, nous proposons une simple interaction d’activation/désactivation. En cliquant sur les limites sur place (en d’autres termes, en sélectionnant l’objet, en ne le déplaçant pas et en le relâchant), les poignées peuvent être activées et désactivées. La tolérance de distance pour cette case activée peut être ajustée avec DragToggleThreshold, et ce comportement d’activation lui-même peut être activé/désactivé avec la ToggleHandlesOnClick propriété .

Bouton bascule du contrôle de limites

Les handles peuvent être activés ou désactivés manuellement à partir du code à tout moment en définissant HandlesActive.

Calcul automatique des limites

BoundsControl tente de calculer automatiquement les limites de l’objet associé. Si une forme de limite spécifique est souhaitée, case activée l’option OverrideBounds et spécifiez directement l’objet de limites. Le système de calcul des limites calcule uniquement les limites de l’objet de remplacement spécifié.

influence BoundsCalculationMethod la façon dont l’algorithme calcule les limites. Si la forme visuelle de l’objet entre parenthèses ne correspond pas nécessairement au collider, ou si l’inverse est vrai, les développeurs peuvent ajuster la méthode de calcul pour préférer utiliser des limites de convertisseur ou de collider, ou une combinaison des deux.

Quelle que soit la méthode de calcul, l’option Padding rembourse uniformément les limites en unités mondiales. Lorsque les limites sont aplatisses, l’axe aplatit n’est pas rembourré.

Aplanissement

BoundsControl aplati

BoundsControl peut également être utilisé pour manipuler du contenu 2D. Si FlattenMode a la Autovaleur , l’objet BoundsControl s’aplatit en une limite rectangulaire 2D si l’objet est suffisamment plat le long d’un axe. Si l’objet n’est pas assez plat, mais que vous souhaitez toujours des affordances de limites rectangulaires, FlattenMode.Always aplatira toujours boundsControl le long de l’axe le plus skinniest. À l’inverse, FlattenMode.Never empêche boundsControl de s’aplatir, même lorsque l’objet est très mince.

Options de manipulation

Le comportement de manipulation de BoundsControl peut être ajusté de plusieurs façons. L’option RotateAnchor contrôle le point de pivot autour duquel boundsControl est pivoté lors de l’utilisation des affordances de rotation. Les points croisés dynamiques de certains objets sont loin de leur centre visuel, ce qui peut causer de l’inconfort et de l’imprécision lors de la manipulation avec les poignées de rotation. BoundsCenter La spécification de pour RotateAnchor entraîne la rotation de BoundsControl autour du centre géométrique des limites calculées plutôt que de l’origine réelle de l’objet.

Le comportement de mise à l’échelle peut être défini sur Uniform ou Non Uniform. En mode Uniforme, tous les axes de l’objet sont mis à l’échelle ensemble, tout en conservant les proportions et l’apparence. La mise à l’échelle non uniforme permet à chaque axe de l’objet d’être mis à l’échelle indépendamment.