BoundsControl — MRTK3

Bounds control

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

Dans MRTK 2.x, BoundsControl a été principalement généré par le runtime à l’aide de scriptableObjects de configuration. Dans MRTK3, la configuration et la personnalisation de BoundsControl ont été considérablement simplifiées. Les visuels et handles de limites sont simplement un préfabriqué personnalisable instancié par BoundsControl au moment de l’exécution. Les développeurs peuvent ajuster et personnaliser le préfabriqué des visuels, ou même créer de nouvelles limites visuelles à partir de zéro. Nous fournissons des implémentations de visuels de limites standard, en suivant le nouveau langage de conception Mixed Reality.

Les nouveaux visuels offrent des commentaires visuels rationalisés qui illustrent l’intention et la manipulation de l’objet avec un bruit visuel minimal intrusif.

Programme d’installation

Ajoutez simplement BoundsControl à un objet existant et remplissez la BoundsVisualsPrefab référence avec les visuels bounds que vous souhaitez utiliser. Nous fournissons quelques éléments visuels prédéfini différents pour vous permettre d’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 inutilisable ou petite.

Pour utiliser l’intention et les effets de focus des visuels de limites, vous devez avoir une StatefulInteractable sur l’objet. Si l’interagissant n’est pas détecté 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 StatefulInteractable pointage/focus aux états auxquels les visuels liés répondent.

Éléments visuels liés aux préfabriqués

Nous proposons plusieurs visuels de limites prédéfini à utiliser avec BoundsControl. Les développeurs sont encouragés à créer des variantes de préfabriqué 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 englobants offrent une conception visuelle simplifiée avec moins de distractions pour l’utilisateur. Seuls les handles pertinents le long des bords des limites sont visibles. Les visuels liés contractent, développent et modifient la couleur/é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 englobant.

Occluded handles

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. Bien que ce préfabriqué effectue le travail, le même effet peut être obtenu avec l’un des autres visuels liés en sélectionnant HandleType.None. Nous avons constaté que les visuels de limites séquenables sont un élément de commentaires visuels satisfaisant et délicieux pour de nombreux contextes différents, pas seulement pour la manipulation basée sur le handle.

No handles

Style hérité

Ces visuels liés affichent tous les poignées et bords de la zone. Cela correspond plus étroitement au langage de conception hérité et au comportement précédent vu dans MRTK 2.x ; Toutefois, cette conception peut être plus distraire pour les utilisateurs en raison d’un bruit visuel inutile. En outre, la présence des poignées devant l’objet (et derrière) peut causer des problèmes avec la manipulation indirecte de 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.

Traditional handles

Conception des interactions

Dans l’itération actuelle, nous offrons une interaction d’activation/désactivation simple. 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 libérant), les poignées peuvent être activées et désactivées. La tolérance de distance pour cette vérification peut être ajustée avec DragToggleThreshold, et ce comportement d’activation lui-même peut être activé/désactivé avec la ToggleHandlesOnClick propriété.

Bounds control toggle

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

Calcul des limites automatiques

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

L’influence BoundsCalculationMethod sur la façon dont l’algorithme calcule les limites. Si la forme visuelle de l’objet placé 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 renderer ou de collider, ou une combinaison des deux.

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

Aplanissement

Flattened BoundsControl

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

Options de manipulation

Le comportement de manipulation de BoundsControl peut être ajusté de plusieurs façons. L’option RotateAnchor contrôle le point de tableau croisé dynamique autour duquel BoundsControl est pivoté lors de l’utilisation des affordances de rotation. Les points croisés dynamiques de certains objets sont éloignés de leur centre visuel, ce qui peut provoquer un malaise et une imprécision lors de la manipulation avec les poignées de rotation. La spécification BoundsCenter du RotateAnchor contrôle 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 l’un ou l’autre UniformNon Uniform. En mode Uniform, tous les axes de l’objet sont mis à l’échelle ensemble, 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.