Partager via


Cadre englobant — MRTK2

Cadre englobant

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.

Exemples de cadre englobant

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

  1. Ajouter un collisionneur de boîtes à 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)

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.

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 collider, à 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) 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.
Événements

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.

Styles de poignée de cadre englobant

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 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.

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

Gestionnaire de manipulation

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

Migration des contrôles de limites