Cadre englobant — MRTK2
Remarque
Le cadre englobant est déconseillé et remplacé par son contrôle de limites successeur. Utilisez l’une des options de migration pour mettre à niveau des objets de jeu existants.
Le BoundingBox.cs
script fournit des fonctionnalités de base pour transformer des objets en réalité mixte. Un cadre englobant affiche un cube autour de l’hologramme pour indiquer qu’il peut être interagi avec. Les poignées sur les angles et les bords du cube permettent la mise à l’échelle ou la rotation de l’objet. Le cadre englobant réagit également à l’entrée utilisateur. Sur HoloLens 2, par exemple, le cadre englobant 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.
Pour plus d’informations, consultez Cadre englobant et Barre d’application dans le Centre de développement Windows.
Exemple de scène
Vous trouverez des exemples de configurations de cadre englobant dans la BoundingBoxExamples
scène.

Comment ajouter et configurer un cadre englobant à l’aide de Unity Inspector
- Ajouter un collisionneur de boîtes à un objet
- Affecter un
BoundingBox
script à un objet - Configurer des options, telles que les méthodes « Activation » (voir la section Propriétés de l’inspecteur ci-dessous)
- (Facultatif) Affecter des préfabriqués et des matériaux pour un cadre englobant de style HoloLens 2 (voir la section Gérer les styles ci-dessous)
Remarque
Utilisez le champ Objet cible et remplacement des limites dans l’inspecteur pour affecter un objet et un collider spécifiques à l’objet avec plusieurs composants enfants.
Comment ajouter et configurer un cadre englobant dans le code
Instancier le cube GameObject
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
Affecter
BoundingBox
un script à un objet avec collider, à l’aide de AddComponent<>()private BoundingBox bbox; bbox = cube.AddComponent<BoundingBox>();
Configurer les options (voir la section Propriétés de l’inspecteur ci-dessous)
// Make the scale handles large bbox.ScaleHandleSize = 0.1f; // Hide rotation handles bbox.ShowRotationHandleForX = false; bbox.ShowRotationHandleForY = false; bbox.ShowRotationHandleForZ = false;
(Facultatif) Affectez des préfabriqués et des matériaux pour un cadre englobant de style HoloLens 2. Cela nécessite toujours des affectations par l’intermédiaire de l’inspecteur, car les matériaux et les préfabriqués doivent être chargés dynamiquement.
Remarque
L’utilisation du dossier « Resources » d’Unity ou de Shader.Find pour le chargement dynamique des nuanceurs n’est pas recommandée, car les permutations de nuanceurs peuvent être manquantes au moment de l’exécution.
bbox.BoxMaterial = [Assign BoundingBox.mat]
bbox.BoxGrabbedMaterial = [Assign BoundingBoxGrabbed.mat]
bbox.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
bbox.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
bbox.ScaleHandlePrefab = [Assign MRTK_BoundingBox_ScaleHandle.prefab]
bbox.ScaleHandleSlatePrefab = [Assign MRTK_BoundingBox_ScaleHandle_Slate.prefab]
bbox.ScaleHandleSize = 0.016f;
bbox.ScaleHandleColliderPadding = 0.016f;
bbox.RotationHandleSlatePrefab = [Assign MRTK_BoundingBox_RotateHandle.prefab]
bbox.RotationHandleSize = 0.016f;
bbox.RotateHandleColliderPadding = 0.016f;
Exemple : Définir l’échelle minimale et maximale du cadre englobant à l’aide de MinMaxScaleConstraint
Pour définir l’échelle minimale et maximale, utilisez .MinMaxScaleConstraint
Vous pouvez également utiliser MinMaxScaleConstraint pour définir l’échelle minimale et maximale pour ManipulationHandler
.
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
bbox = cube.AddComponent<BoundingBox>();
// Important: BoundingBox creates a scale handler on start if one does not exist
// do not use AddComponent, as that will create a duplicate handler that will not be used
MinMaxScaleConstraint scaleConstraint = bbox.gameObject.GetComponent<MinMaxScaleConstraint>();
scaleConstraint.ScaleMinimum = 1f;
scaleConstraint.ScaleMaximum = 2f;
Exemple : Ajouter un cadre englobant autour d’un objet de jeu
Pour ajouter un cadre englobant autour d’un objet, ajoutez-y simplement un BoundingBox
composant :
private void PutABoxAroundIt(GameObject target)
{
target.AddComponent<BoundingBox>();
}
Propriétés de l’inspecteur
Objet cible
Cette propriété spécifie l’objet qui sera transformé par la manipulation du cadre englobant. Si aucun objet n’est défini, le cadre englobant est défini par défaut sur l’objet propriétaire.
Remplacement des limites
Définit un collisionneur de boîtes à partir de l’objet pour le calcul des limites.
Comportement d’activation
Il existe plusieurs options pour activer l’interface du cadre englobant.
- Activer au démarrage : le cadre englobant devient visible une fois la scène démarrée.
- Activer par proximité : le cadre englobant devient visible lorsqu’une main articulée est proche de l’objet.
- Activer par pointeur : le cadre englobant devient visible lorsqu’il est ciblé par un pointeur de rayons de main.
- Activer manuellement : le cadre englobant ne devient pas visible automatiquement. Vous pouvez l’activer manuellement via un script en accédant à la propriété boundingBox.Active.
Mise à l’échelle minimale
Échelle minimale autorisée. Cette propriété est déconseillée et il est préférable d’ajouter un MinMaxScaleConstraint
script. Si ce script est ajouté, l’échelle minimale en est extraite au lieu du cadre englobant.
Mise à l’échelle maximale
Échelle maximale autorisée. Cette propriété est déconseillée et il est préférable d’ajouter un MinMaxScaleConstraint
script. Si ce script est ajouté, l’échelle maximale est extraite de celui-ci au lieu du cadre englobant.
Affichage de la boîte
Différentes options de visualisation du cadre englobant.
Si l’axe de l’aplatissement est défini sur Aplatir automatiquement, le script interdit la manipulation le long de l’axe avec la plus petite étendue. Il en résulte un cadre englobant 2D, qui est généralement utilisé pour les objets minces.
Poignées
Vous pouvez affecter le matériau et le préfabriqué pour remplacer le style de poignée. Si aucun handle n’est affecté, ils sont affichés dans le style par défaut.
Événements
Le cadre englobant 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.
- Rotation terminée : déclenchée à la fin de la rotation.
- Mise à l’échelle démarrée : se déclenche au démarrage de la mise à l’échelle.
- Mise à l’échelle terminée : se déclenche à la fin de la mise à l’échelle.

Styles de handle
Par défaut, lorsque vous attribuez simplement le BoundingBox.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.
Vous trouverez ci-dessous les préfabriqués, les matériaux et les valeurs de mise à l’échelle des poignées de cadre englobant de style HoloLens 2. Vous trouverez cet exemple dans la BoundingBoxExamples
scène.

Handles (Configuration du style HoloLens 2)
- Matériel de poignée : BoundingBoxHandleWhite.mat
- Handle Grabbed Material : BoundingBoxHandleBlueGrabbed.mat
- Scale Handle Prefab : MRTK_BoundingBox_ScaleHandle.prefab
- 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 collisionneur pouvant être saisi légèrement plus grand que le visuel de poignée)
- Préfabriqué de poignée de rotation : MRTK_BoundingBox_RotateHandle.prefab
- Taille du handle de rotation : 0,016
- Remplissage du collider de poignée de rotation : 0,016 (rend le collisionneur pouvant être saisi légèrement plus grand que le visuel de poignée)
Proximité (configuration du style HoloLens 2)
Afficher et masquer les poignées avec une animation en fonction de la distance entre les mains. Il dispose d’une animation de mise à l’échelle en deux étapes.

- Effet de proximité actif : activer l’activation de handle basée sur la proximité
- Gérer la proximité moyenne : distance pour la mise à l’échelle de la 1ère étape
- Gérer la proximité proche : distance pour la mise à l’échelle de la 2e étape
- Échelle éloignée : valeur d’échelle par défaut de la ressource de handle lorsque les mains sont hors de portée de l’interaction du cadre englobant (distance définie ci-dessus par « Gérer la proximité moyenne ». Utiliser 0 pour masquer le handle par défaut)
- Moyenne échelle : valeur d’échelle de la ressource de handle lorsque les mains se trouvent dans la plage de l’interaction du cadre englobant (distance définie ci-dessus par « Gérer la proximité proche ». Utiliser 1 pour afficher la taille normale)
- Échelle de fermeture : mise à l’échelle de la valeur 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)
Rendre un objet mobile avec le gestionnaire de manipulation
Un cadre englobant peut être combiné avec ManipulationHandler.cs
pour rendre l’objet mobile à l’aide d’une interaction lointaine. Le gestionnaire de manipulation prend en charge les interactions à une et à deux mains.
Le suivi manuel peut être utilisé pour interagir avec un objet de près.

Pour que les bords du cadre englobant se comportent de la même façon que lors du déplacement à l’aide ManipulationHandler
de l’interaction de loin, il est recommandé de connecter leurs événements respectivement à On Manipulation Started / On Manipulation EndedBoundingBox.HighlightWires
/ BoundingBox.UnhighlightWires
, comme illustré dans la capture d’écran ci-dessus.
Migration vers le contrôle de limites
Les préfabriqués et instances existants utilisant le 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.
