Exercice - Manipuler des objets 3D avec un contrôle de limites

Effectué

Le script ObjectManipulator permet de déplacer un objet, de modifier sa taille et de le faire pivoter à l’aide d’une ou deux mains. Ce script prend en charge le modèle d’entrée de manipulation directe, car il permet à l’utilisateur de toucher des hologrammes directement avec ses mains. Ici, utilisez le script ObjectManipulator pour activer les interactions de la main afin de pouvoir déplacer, mettre à l’échelle et faire pivoter l’Explorateur Rover.

  1. En outre, vous allez configurer l’Explorateur Rover afin de pouvoir placer les pièces du rover sur ce dernier pour en faire un assemblage de rover complet. Dans le volet Hierarchy, développez l’objet RoverExplorer >RoverParts et sélectionnez tous ses objets de pièce de rover enfants et l’objet RoverAssembly, puis, dans le volet Inspector, utilisez le bouton Add Component pour ajouter les composants suivants à tous les objets sélectionnés :

    • Le composant Object Manipulator (Script)
    • Le composant Part Assembly Controller (Script)

    Screenshot of RoverAssembly with all rover part objects selected and components added.

  2. Les objets de pièce de rover et l’objet RoverAssembly étant toujours sélectionnés, dans le volet Inspector, configurez le composant Object Manipulator (Script) comme suit :

    • Sous Paramètres interagissants de base, recherchez l’événement On Clicked (). Sélectionnez l’icône + pour ajouter un nouvel événement. Configurez l’événement comme suit :

      a. Affectez l’objet RoverAssembly en tant qu’écouteur de l’événement On Clicked () en le faisant glisser depuis la fenêtre Hiérarchie vers le champ Aucun (Objet).

      b. Dans la liste déroulante Sans fonction, sélectionnez TapToPlace, et StartPlacement() pour appeler cette méthode lorsque l’événement est déclenché.

    • Dans la liste déroulante Type de manipulation autorisé, décochez la case Mettre à l’échelle afin que seules les options Déplacer et Faire pivoter soient activées :

    Screenshot of Unity with Two Handed Manipulation Type configured.

  3. Sélectionnez uniquement l’objet RoverAssembly et supprimez le composant Interagissant avec état qu’il présente, le cas échéant. Sélectionnez les trois points tout à droite du composant, puis sélectionnez Supprimer le composant.

  4. Dans le volet Projet, accédez au dossier Packages, Ressources standard MRTK, Audio et HoloLens2 pour localiser les clips audio :

    Screenshot of Unity Project window with Audio folder selected.

  5. Dans le volet Hierarchy, resélectionnez tous les objets de pièce de rover, puis dans le volet Inspector, sélectionnez Add Component pour ajouter le composant Audio Sources (Sources audio) et configurez-le comme suit :

    • Affectez le clip audio MRTK_Scale_Start au champ AudioClip.
    • Décochez la case Play On Awake (Lire en cas d’activité)
    • Définissez Spatial Blend sur 1.

    Screenshot of Unity with all rover parts selected and Audio Source component added and configured.

  6. Dans le volet Hierarchy, développez l’objet RoverAssembly > RoverModel_PlacementHints_XRay >Parts_PlacementHints pour révéler tous les objets de conseil de placement, puis sélectionnez la première pièce de rover, RoverParts >Camera_Part et configurez le composant Part Assembly Controller (Script) de la façon suivante :

    • Assignez l’objet Camera_PlacementHint au champ Location To Place (Emplacement).

    Screenshot of Unity with Camera_Part PartAssemblyController component configured.

  7. Répétez l’étape 5 pour chacun des objets de pièce de rover restants et l’objet RoverAssembly afin de configurer le composant Part Assembly Controller (Script) comme suit :

    • Pour Generator_Part, assignez l’objet Generator_PlacementHint au champ Location To Place (Emplacement pour le positionnement).
    • Pour Lights_Part, assignez l’objet Lights_PlacementHint au champ Location To Place (Emplacement pour le positionnement).
    • Pour UHFAntenna_Part, assignez l’objet UHFAntenna_PlacementHint au champ Location To Place (Emplacement pour le positionnement).
    • Pour Spectrometer_Part, assignez l’objet Spectrometer_PlacementHint au champ Location To Place.
    • Pour RoverAssembly, assignez l’objet lui-même, autrement dit, le même objet RoverAssembly, au champ Location To Place (Emplacement pour le positionnement).
  8. Dans le volet Hiérarchie, sélectionnez l’objet de bouton Réinitialiser dans RoverExplorer, Boutons, puis, dans le volet Inspecteur, configurez l’événement OnClick () PressableButton de la façon suivante :

    • Affectez l’objet RoverAssembly au champ None (Object) .
    • Dans la liste déroulante No Function, sélectionnez PartAssemblyController>ResetPlacement () pour définir cette fonction en tant qu’action à exécuter quand l’événement est déclenché.

    Screenshot of Unity with Reset button object OnClick event configured.

  9. Si vous entrez maintenant en mode Game, vous pouvez utiliser l’interaction proche ou éloignée pour placer les pièces du rover sur le Rover. Une fois que la pièce est proche de l’indicateur de placement correspondant, elle s’imbrique en place et devient partie intégrante du Rover. Pour réinitialiser les placements, vous pouvez appuyer sur le bouton Reset :

    Screenshot of Unity Play mode split view with Reset button being pressed.

Ajouter un contrôle de limites

  1. Dans la fenêtre Hiérarchie, sélectionnez l’objet RoverExplorer puis, dans la fenêtre de Inspecteur, utilisez le bouton Ajouter un composant pour ajouter le composant BoundsControl. Décochez la case en regard du composant pour le désactiver par défaut :

    Screenshot of Unity with RoverExplorer object selected and components added and disabled.

  2. Dans la fenêtre Projet, accédez au dossier Packages, Manipulation spatiale MRTK, BoundsControl et Préfabriqués, cliquez et faites glisser le préfabriquéBoundingBoxWithHandles sur le champ Préfabriqué Bounds Visuals du composant Bounds Control.

    Screenshot of Unity with RoverExplorer object selected and the Bounds Visuals Prefab field configured.

  3. Dans le volet Hiérarchie, développez l’objet >Buttons-GridLayout (Boutons) de menu pour faire apparaître les trois boutons, renommez le troisième BoundsControl_Enable, puis dans la fenêtre Hiérarchie, configurez le GameObject BoundsControl_Enable de la façon suivante :

    • Sélectionnez l’objet Frontplate, AnimatedContent, Icône, Étiquette et remplacez le composant TextMeshPro par Activer. Vérifiez que l’objet Étiquette est activé dans la hiérarchie
    • Configurez l’événement PressableButton.OnClicked() en affectant l’objet RoverExplorer au champ Aucun (Objet) et en sélectionnant BoundsControl, bool activé dans la liste déroulante Sans fonction (vérifiez que la case de l’argument est cochée)
    • Sélectionner la petite icône + pour ajouter un autre événement
    • Assignez l’objet RoverExplorer au champ None (Object) .
    • Dans la liste déroulante Sans fonction, sélectionnez ObjectManipulator, bool activé pour mettre à jour cette valeur de propriété lorsque l’événement est déclenché et vérifiez que la case de l’argument est cochée
    • Sélectionner la petite icône + pour ajouter un autre événement
    • Assignez l’objet RoverExplorer au champ None (Object) .
    • Dans la liste déroulante Sans fonction, sélectionnez BoundsControl,bool HandlesActive pour mettre à jour cette valeur de propriété quand l’événement est déclenché et vérifiez que la case de l’argument est cochée
    • Sélectionnez l’objet Frontplate, AnimatedContent, UIButtonFontIcon et UIButtonFontIcon, puis remplacez l’icône par l’icône des quatre flèches du composant Sélecteur d’icône de police. Vous la trouverez dans la liste des icônes, ou définissez **Nom de l’icône actuelle** sur « Icône 40 »

    Screenshot of Unity with BoundsControl_Enable button object selected and Button Config Helper component configured.

  4. Dupliquez le bouton BoundsControl_Enable et renommez-le BoundsControl_Disable, puis dans le volet Inspecteur, configurez le composant Assistant de configuration de bouton (Script) comme suit :

    • Sélectionnez l’objet Frontplate, AnimatedContent, Icône, Étiquette et remplacez le composant TextMeshPro par Désactiver
    • Configurez l’événement PressableButton.OnClicked() en vous assurant que toutes les cases à cocher sous les événements sont décochées

    Screenshot of Unity with BoundsControl_Disable button object selected and Button Config Helper component configured.

  5. Si vous entrez maintenant en mode Game et sélectionnez Enable (Activer) pour activer le contrôle des limites, vous pouvez utiliser l’interaction proche ou éloignée pour déplacer, faire pivoter et mettre à l’échelle le contrôle des limites et sélectionner Disable (Désactiver) pour le désactiver :

    Screenshot of Unity Play mode split view with Bounds Control being manipulated.