Cadre englobant — MRTK2
Notes
Le cadre englobant est déprécié 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 coins et les bords du cube permettent la mise à l’échelle ou la rotation de l’objet. Le cadre englobant réagit également aux entrées utilisateur. Sur HoloLens 2, par exemple, le cadre englobant répond à la proximité des doigts, en fournissant des commentaires visuels pour aider à percevoir la distance par rapport à l’objet. Toutes les interactions et visuels peuvent être facilement personnalisés.
Pour plus d’informations, consultez Zone englobante et Barre de l’application dans le Centre de développement Windows.
Exemple de scène
Vous trouverez des exemples de configurations de zone englobante dans la BoundingBoxExamples
scène.
Comment ajouter et configurer un cadre englobant à l’aide d’Unity Inspector
- Ajouter Box Collider à 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)
Notes
Utilisez le champ Objet cible et Remplacement des limites dans l’inspecteur pour affecter un objet et un collisionneur spécifiques dans 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 collisionneur, à 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) Attribuez 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.
Notes
L’utilisation du dossier « Resources » d’Unity ou de Shader.Find pour le chargement dynamique des nuanceurs n’est pas recommandée, car des permutations de nuanceur peuvent manquer 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 une échelle de zone englobante minimale et maximale à 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, il vous suffit d’y ajouter 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 de l’objet pour le calcul des limites.
Comportement d’activation
Il existe plusieurs options pour activer l’interface de zone englobante.
- 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 à rayons mains.
- 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 est extraite de celui-ci 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 zone
Différentes options de visualisation de zone englobante.
Si l’axe aplati est défini sur Aplatissement automatique, 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 s’affichent 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é au démarrage de la rotation.
- Rotation terminée : déclenché à 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 lors de la fin de la mise à l’échelle.
Gérer les styles
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 affecter 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 pour HoloLens 2 style)
- Handle Material: 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 de la poignée d’échelle : 0,016 (rend le collisionneur pouvant être saisi légèrement plus grand que le visuel de la poignée)
- Préfab de poignée de rotation : MRTK_BoundingBox_RotateHandle.prefab
- Taille du handle de rotation : 0,016
- Remplissage de l’impacteur de la poignée de rotation : 0,016 (rend le collisionneur pouvant être saisi légèrement plus grand que le visuel de la poignée)
Proximité (Configuration du style HoloLens 2)
Affichez et masquez les poignées avec une animation en fonction de la distance entre les mains. Il a une animation de mise à l’échelle en deux étapes.
- Effet de proximité actif : activer l’activation du handle basé 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 de mise à l’échelle par défaut de la ressource 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 : mise à l’é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é rapprochée ». Utiliser 1 pour afficher la taille normale)
- Fermer l’échelle : valeur d’é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)
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 distante. Le gestionnaire de manipulation prend en charge les interactions à une et deux mains.
Le suivi des mains peut être utilisé pour interagir avec un objet de près.
Pour que les bords de la zone englobante se comportent de la même façon lors de son déplacement à l’aide ManipulationHandler
de l’interaction de loin, il est recommandé de connecter ses événements pour On Manipulation Started / On Manipulation Terminée à BoundingBox.HighlightWires
/ BoundingBox.UnhighlightWires
, respectivement, comme illustré dans la capture d’écran ci-dessus.
Migration vers le contrôle de limites
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 zone englobante, il existe également une option de migration à l’intérieur de l’inspecteur de propriétés du composant.