5. Création de contenu dynamique avec des solveurs5. Creating dynamic content using Solvers

Dans ce tutoriel, vous allez explorer différentes façons de placer dynamiquement des hologrammes à l’aide des outils de placement fournis dans le MRTK, appelés « solveurs », pour résoudre des scénarios de placement spatial complexes.In this tutorial, you will explore ways to dynamically place holograms using the MRTK's available placement tools, known as Solvers, to solve complex spatial placement scenarios. Dans MRTK, les solveurs sont un système de scripts et de comportements utilisés pour permettre aux objets de suivre l’utilisateur (vous) ou d’autres objets de jeu dans la scène.In the MRTK, Solvers are a system of scripts and behaviors used to allow objects to follow you, the user, or other game objects in the scene. Ils peuvent aussi être utilisés pour l’alignement sur certaines positions, rendant votre application plus intuitive.They can also be used to snap to certain positions, making your app more intuitive.

ObjectifsObjectives

  • Introduire les solveurs du MRTKIntroduce the MRTK's Solvers
  • Apprendre à utiliser des solveurs pour diriger l’utilisateur vers des objetsLearn how to use Solvers to direct the user to objects
  • Apprendre à utiliser des solveurs pour repositionner des objetsLearn how to use Solvers to reposition objects

Emplacement des solveurs dans le MRTKLocation of Solvers in the MRTK

Les solveurs du MRTK se trouvent dans le dossier du SDK MRTK.The MRTK's Solvers are located in the MRTK SDK folder. Pour voir les solveurs disponibles dans votre projet, dans la fenêtre Project, accédez à Assets > MRTK > SDK > Features > Utilities > Solvers :To see the available Solvers in your project, in the Project window, navigate to Assets > MRTK > SDK > Features > Utilities > Solvers:

Fenêtre de projet Unity avec le dossier SOlvers sélectionné

Dans ce tutoriel, nous allons passer en revue l’implémentation du solveur Directional Indicator et Tap To Place.In this tutorial, we will review the implementation of the Directional Indicator Solver and the Tap To Place Solver. Pour en savoir plus sur l’ensemble des solveurs disponibles dans MRTK, consultez le guide Solveurs dans le portail de la documentation MRTK.To learn more about the full range of Solvers available in the MRTK, you can refer to the Solvers guide in the MRTK Documentation Portal.

Notes

Le solveur Directional Indicator ne se trouve pas dans les dossiers des solveurs référencés ci-dessus, mais dans les dossiers Assets > MRTK > SDK > Experimental > Features > Utilities, car il s’agit d’une fonctionnalité expérimentale.The Directional Indicator Solver is not located in the Solvers folders referenced above, but in the Assets > MRTK > SDK > Experimental > Features > Utilities folders, because it is an experimental feature.

Utilisation du solveur Directional Indicator pour diriger l’utilisateur vers des objetsUsing the Directional Indicator Solver to direct the user to objects

Dans la fenêtre Project, accédez au dossier à la Assets > MRTK.Tutorials.GettingStarted > Prefabs, cliquez et faites glisser le préfabriqué Chevron dans la fenêtre Hierarchy et définissez sa Position de transformation sur X = 0, Y = 0, Z = 2 pour le positionner à proximité de l’objet RoverExplorer :In the Project window, navigate to the Assets > MRTK.Tutorials.GettingStarted > Prefabs folder, click-and-drag the Chevron prefab into the Hierarchy window, and set it's Transform Position to X = 0, Y = 0, Z = 2 to position it near the RoverExplorer object:

Unity avec le préfabriqué nouvellement ajouté Chevron sélectionné

Conseil

Si vous constatez que l’appareil photo ou d’autres icônes de votre scène masquent les objets ou gênent, vous pouvez les masquer en basculant les Gizmos sur la position désactivé, comme illustré dans l’image ci-dessus.If you find that the camera or any other icons in your scene are hiding the objects or are distracting, you can hide these by toggling the Gizmos to the off position, as shown in the image above. Pour en savoir plus sur le menu Gizmos et sur la façon dont vous pouvez l’utiliser pour optimiser votre vue Scene, consultez la page consacrée au menu Gizmos dans la documentation Unity.To learn more about the Gizmos menu and how you can use it to optimize your scene view, you can refer to Unity's Gizmos menu documentation.

Renommez l’objet Indicator de Chevron qui vient d’être ajouté puis, dans la fenêtre Inspector, utilisez le bouton Ajouter un composant pour ajouter les composants DirectionalIndicator :Rename the newly added Chevron object Indicator, then in the Inspector window, use the Add Component button to add the DirectionalIndicator:

Unity avec le composant de solveur DirectionalIndicator ajouté

Notes

Quand vous ajoutez un solveur, dans ce cas le composant DirectionalIndicator, le composant SolverHandler est ajouté automatiquement car les solveurs en ont besoin.When you add a Solver, in this case, the DirectionalIndicator component, the SolverHandler component is automatically added because Solvers require it.

Notes

Directional Indicator Controller (Script) ne fait pas partie du MRTK, mais il a été inclus avec les ressources du tutoriel.The Directional Indicator Controller (Script) is not part of the MRTK but was included with the tutorial assets.

Configurez les composants DirectionalIndicator et SolverHandler comme suit :Configure the DirectionalIndicator and SolverHandler components as follows:

  • Vérifiez que la propriété Tracked Target Type du composant SolverHandler est définis sur Head.Verify that the SolverHandler component's Tracked Target Type is set to Head
  • Affectez le RoverExplorer à la Directional Target du composant DirectionalIndicator en le faisant glisser de la fenêtre Hierarchy vers le champ None (Transform) .Assign the RoverExplorer to the DirectionalIndicator component's Directional Target by dragging it from the Hierarchy window into the None (Transform) field
  • Changez la valeur de View Offset en 0,2Change the View Offset to 0.2

Unity avec le composant de solveur DirectionalIndicator configuré

Appuyez sur le bouton de lecture pour passer en mode Game, appuyez sur le bouton droit de la souris et maintenez-le enfoncé tout en déplaçant votre souris vers la droite ou la gauche pour faire pivoter la direction de votre regard, et notez les points suivants :Press the Play button to enter Game mode, press-and-hold the right mouse button while moving your mouse to the left or right to rotate your gaze direction, and notice the following:

  • Quand vous détachez votre regard de l’objet RoverExplorer, l’objet Indicator apparaît et pointe vers l’objet RoverExplorerWhen you look away from the RoverExplorer object, the Indicator object will appear and point towards the RoverExplorer object

Vue partagée du mode Play d’Unity avec le solveur DirectionalIndicator en cours d’utilisation

Notes

Si vous ne voyez pas le rayon de la caméra dans votre fenêtre Scene, vérifiez que votre menu Gizmos est activé, comme illustré dans l’image ci-dessus.If you don't see the camera ray in your Scene window, make sure your Gizmos menu is enabled, as shown in the image above.

Conseil

Pour découvrir comment utiliser la simulation d’entrée dans l’éditeur, consultez le guide Utilisation de la simulation d’entrée avec les mains dans l’éditeur pour tester une scène dans le portail de la documentation MRTK.To learn how to use the in-editor input simulation, you can refer to the Using the In-Editor Hand Input Simulation to test a scene guide in the MRTK Documentation Portal.

Conseil

Si votre ordinateur dispose d’un microphone, vous pouvez facilement basculer l’état actif du volet Diagnostics qui apparaît dans la fenêtre Game avec la commande vocale « toggle diagnostics ».If your computer has a microphone, you can easily toggle the active state of the Diagnostics panel that appears in the Game window by using the speech command "toggle diagnostics." Vous pouvez aussi le désactiver dans MRTK Configuration Profile > Diagnostics > Enable Diagnostics System.Alternatively, you can disable it in the MRTK Configuration Profile > Diagnostics > Enable Diagnostics System. D’une façon générale, il est cependant recommandé de conserver Diagnostics System actif pendant le développement.However, it is generally recommended to keep the Diagnostics System active during development.

Utilisation du solveur Tap to Place pour repositionner des objetsUsing the Tap to Place Solver to reposition objects

Dans la fenêtre Hierarchy, sélectionnez l’objet RoverExplorer > RoverAssembly puis, dans la fenêtre Inspector, utilisez le bouton Add Component pour ajouter le composant Tap To Place (Script) et configurez-le comme suit :In the Hierarchy window, select the RoverExplorer > RoverAssembly object, then in the Inspector window, use the Add Component button to add the Tap To Place (Script) component, and configure it as follows:

  • Vérifiez que la propriété Tracked Target Type du composant SolverHandler est définis sur Head.Verify that the SolverHandler component's Tracked Target Type is set to Head
  • Cochez la case Keep Orientation Vertical.Check the Keep Orientation Vertical checkbox
  • Dans la liste déroulante Magnetic Surfaces > Element 0, décochez toutes les options sauf Spatial Awareness.From the Magnetic Surfaces > Element 0 dropdown, uncheck all options expect Spatial Awareness

Unity avec le composant de solveur TapToPlace ajouté et configuré

Notes

Le paramètre Magnetic Surfaces détermine les objets que le composant Tap To Place (Script) peut détecter lors du placement d’un objet.The Magnetic Surfaces setting determines which objects the Tap To Place (Script) component can detect when placing an object. Si vous changez le paramètre pour activer seulement Spatial Awareness, le composant Tap To Place (Script) pourra placer le Rover seulement sur les objets de la couche Unity nommée Spatial Awareness qui est par défaut le maillage de la reconnaissance spatiale généré par HoloLens.By changing the setting to only Spatial Awareness, the Tap To Place (Script) component will only be able to place the Rover on objects on the Unity Layer named Spatial Awareness, which by default is the Spatial Awareness Mesh generated by the HoloLens.

Pour en savoir plus sur les couches, reportez-vous à la documentation Couches d’Unity.To learn more about Layers, you can refer to Unity's Layers documentation.

Conseil

Si vous voulez voir le maillage de la reconnaissance spatiale lors du test de la fonctionnalité Tap to Place sur votre HoloLens, vous pouvez définir temporairement la propriété Display Option du Spatial Mesh Observer sur Visible.If you want to see the Spatial Awareness Mesh when testing the Tap To Place functionality on your HoloLens, you can temporarily set the Spatial Mesh Observer's Display Option to Visible. Pour vous rappeler comment changer l’option d’affichage, reportez-vous aux instructions de Changer l’option d’affichage de la reconnaissance spatiale.For a reminder on how to change the Display Option, you can refer to the Changing the Spatial Awareness Display Option instructions.

Avec l’objet RoverAssembly toujours sélectionné dans la fenêtre Hierarchy, dans la fenêtre Inspector, recherchez l’événement On Placing Started () puis cliquez sur l’icône + pour ajouter un nouvel événement :With the RoverAssembly object still selected in the Hierarchy window, in the Inspector window, locate the On Placing Started () event and click the + icon to add a new event:

Unity avec l’événement TapToPlace OnPlacingStarted ajouté

Configurez l’événement comme suit :Configure the event as follows:

  • Affectez l’objet RoverAssembly en tant qu’écouteur pour l’événement On Placing Started () en le faisant glisser de la fenêtre Hierarchy dans le champ None (Object)Assign the RoverAssembly object as a listener for the On Placing Started () event by dragging it from the Hierarchy window into the None (Object) field
  • Dans la liste déroulante No Function, sélectionnez TapToPlace > float SurfaceNormalOffset pour mettre à jour la valeur de la propriété SurfaceNormalOffset quand l’événement est déclenché.From the No Function dropdown, select TapToPlace > float SurfaceNormalOffset to update the SurfaceNormalOffset property value when the event is triggered
  • Vérifiez que l’argument est défini sur 0Verify that the argument is set to 0

Unity avec l’événement TapToPlace OnPlacingStarted configuré

Dans la fenêtre Hierarchy, cliquez avec le bouton droit sur une zone vide, sélectionnez 3D Object > Cube pour créer un objet temporaire représentant le sol, puis configurez le composant Transform comme suit :In the Hierarchy window, right-click on an empty spot and select 3D Object > Cube, to create a temporary object representing the ground, and configure the Transform component as follows:

  • Position : X = 0, Y = -1,65, Z = 6Position: X = 0, Y = -1.65, Z = 6
  • Rotation : X = 0, Y = 0, Z = 0Rotation: X = 0, Y = 0, Z = 0
  • Scale : X = 10, Y = 0,2, Z = 10Scale: X = 10, Y = 0.2, Z = 10

Unity avec l’objet de cube de sol temporaire ajouté et positionné

Le cube temporaire étant toujours sélectionné dans la fenêtre Hierarchy, dans la fenêtre Inspector, utilisez la liste déroulante Couches pour changer le paramètre Layer du cube de façon à inclure seulement la couche Spatial Awareness :With the temporary Cube still selected in the Hierarchy window, in the Inspector window, use the Layers dropdown to change the Cube's Layer setting only to include the Spatial Awareness layer:

Unity avec l’objet de cube de sol temporaire, la couche étant définie sur Spatial Awareness

Appuyez sur le bouton Play pour passer en mode Game. Ensuite, maintenez enfoncé le bouton droit de la souris tout en déplaçant la souris vers le bas jusqu’à ce que le regard atteigne l’objet RoverAssembly :Press the Play button to enter Game mode, then press-and-hold the right mouse button while moving your mouse down until the gaze hit's the RoverAssembly object:

Vue partagée du mode Play d’Unity avec le suivi atteignant l’objet RoverAssembly

Cliquez avec le bouton gauche de la souris pour démarrer le processus de Tap to Place :Click the left mouse button to start the tap-to-place process:

Vue partagée du mode Play d’Unity avec le placement de TapToPlace commencé

Appuyez sur le bouton droit de la souris et maintenez-le enfoncé tout en déplaçant votre souris vers la droite ou la gauche pour faire pivoter la direction de votre regard. Quand le placement vous convient, cliquez avec le bouton gauche de la souris :Press-and-hold the right mouse button while moving your mouse to the left or right to rotate your gaze direction, when you are happy with the placement, click the left mouse button:

Vue partagée du mode Play d’Unity avec le placement de TapToPlace terminé

Une fois que vous avez fini de tester la fonctionnalité en mode Game, cliquez avec le bouton droit sur l’objet Cube, puis sélectionnez Delete pour le supprimer de la scène :Once you are done testing the feature in the Game mode, right-click on the Cube object and select Delete to remove it from the scene:

Unity avec le cube de sol temporaire sélectionné et le menu contextuel Delete

FélicitationsCongratulations

Dans ce tutoriel, vous avez appris à utiliser le solveur Directional Indicator de MRTK pour qu’un élément de l’interface utilisateur dirige intuitivement l’utilisateur vers des objets.In this tutorial, you learned how to use the MRTK's Directional Indicator Solver to have a UI element intuitively direct the user to objects. Vous avez aussi appris à utiliser le solveur Tap To Place pour repositionner facilement des objets.You also learned how to use the Tap To Place Solver to reposition objects easily.

Pour en savoir plus sur ces solveurs et sur d’autres solveurs fournis avec le MRTK, consultez le guide Solveurs dans le portail de la documentation MRTK.To learn more about these and other solvers included with the MRTK, you can refer to the Solvers guide in the MRTK Documentation Portal.

Tutoriel suivant : 6. Création d’interfaces utilisateurNext Tutorial: 6. Creating user interfaces