Cadre englobant — MRTK2

Rectangle englobant

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.

Exemples de zone englobante

Comment ajouter et configurer un cadre englobant à l’aide d’Unity Inspector

  1. Ajouter Box Collider à un objet
  2. Affecter un BoundingBox 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 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.

Cadre englobant 1

Comment ajouter et configurer un cadre englobant dans le code

  1. Instancier le cube GameObject

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

    private BoundingBox bbox;
    bbox = cube.AddComponent<BoundingBox>();
    
  3. 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;
    
  4. (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.
Événements

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.

Styles de poignées de zone englobante

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.

HandStyles 2

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.

Proximité
  • 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.

Gestionnaire de manipulation

Pour que les bords de la zone englobante se comportent de la même façon lors de son déplacement à l’aide ManipulationHandlerde 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.

Limites de migration du contrôle