Réalité mixte - Azure - Cours 308 : Notifications inter-appareilsMR and Azure 308: Cross-device notifications


Notes

Les tutoriels Mixed Reality Academy ont été conçus pour les appareils HoloLens (1re génération) et les casques immersifs de réalité mixte.The Mixed Reality Academy tutorials were designed with HoloLens (1st gen) and Mixed Reality Immersive Headsets in mind. Nous estimons qu’il est important de laisser ces tutoriels à la disposition des développeurs qui recherchent encore des conseils pour développer des applications sur ces appareils.As such, we feel it is important to leave these tutorials in place for developers who are still looking for guidance in developing for those devices. Notez que ces tutoriels ne sont pas mis à jour avec les derniers ensembles d’outils ou interactions utilisés pour HoloLens 2.These tutorials will not be updated with the latest toolsets or interactions being used for HoloLens 2. Ils sont fournis dans le but de fonctionner sur les appareils pris en charge.They will be maintained to continue working on the supported devices. Une nouvelle série de didacticiels sera publiée à l’avenir qui vous montrera comment développer pour HoloLens 2.There will be a new series of tutorials that will be posted in the future that will demonstrate how to develop for HoloLens 2. Cet avis sera mis à jour avec un lien vers ces didacticiels lors de leur publication.This notice will be updated with a link to those tutorials when they are posted.


produit final-début

Dans ce cours, vous allez apprendre à ajouter des fonctionnalités de Notification Hubs à une application de réalité mixte à l’aide d’Azure Notification Hubs, de tables Azure et d’Azure Functions.In this course, you will learn how to add Notification Hubs capabilities to a mixed reality application using Azure Notification Hubs, Azure Tables, and Azure Functions.

Azure notification hubs est un service Microsoft, qui permet aux développeurs d’envoyer des notifications push ciblées et personnalisées à n’importe quelle plateforme, toutes alimentées dans le Cloud.Azure Notification Hubs is a Microsoft service, which allows developers to send targeted and personalized push notifications to any platform, all powered within the cloud. Cela permet aux développeurs de communiquer efficacement avec les utilisateurs finaux, ou même de communiquer entre différentes applications, en fonction du scénario.This can effectively allow developers to communicate with end users, or even communicate between various applications, depending on the scenario. Pour plus d’informations, consultez la page notification hubs Azure .For more information, visit the Azure Notification Hubs page.

Azure Functions est un service Microsoft, qui permet aux développeurs d’exécuter de petits morceaux de code, « functions », dans Azure.Azure Functions is a Microsoft service, which allows developers to run small pieces of code, 'functions', in Azure. Cela permet de déléguer le travail au Cloud, plutôt qu’à votre application locale, ce qui peut avoir de nombreux avantages.This provides a way to delegate work to the cloud, rather than your local application, which can have many benefits. Azure Functions prend en charge plusieurs langages de développement, notamment C # , F # , Node.js, Java et php.Azure Functions supports several development languages, including C#, F#, Node.js, Java, and PHP. Pour plus d’informations, consultez la page Azure Functions .For more information, visit the Azure Functions page.

Azure tables est un service Cloud Microsoft qui permet aux développeurs de stocker des données non SQL structurées dans le Cloud, ce qui les rend facilement accessibles partout.Azure Tables is a Microsoft cloud service, which allows developers to store structured non-SQL data in the cloud, making it easily accessible anywhere. Le service dispose d’une conception sans schéma, ce qui permet l’évolution des tables en fonction des besoins et est donc très flexible.The service boasts a schemaless design, allowing for the evolution of tables as needed, and thus is very flexible. Pour plus d’informations, consultez la page tables AzureFor more information, visit the Azure Tables page

Une fois ce cours terminé, vous disposerez d’une application de casque et d’une application de PC de bureau, qui sera en mesure d’effectuer les opérations suivantes :Having completed this course, you will have a mixed reality immersive headset application, and a Desktop PC application, which will be able to do the following:

  1. L’application PC Desktop permet à l’utilisateur de déplacer un objet dans l’espace 2D (X et Y) à l’aide de la souris.The Desktop PC app will allow the user to move an object in 2D space (X and Y), using the mouse.

  2. Le déplacement d’objets dans l’application PC est envoyé au Cloud à l’aide de JSON, qui se présente sous la forme d’une chaîne contenant un ID d’objet, un type et des informations de transformation (coordonnées X et Y).The movement of objects within the PC app will be sent to the cloud using JSON, which will be in the form of a string, containing an object ID, type, and transform information (X and Y coordinates).

  3. L’application de réalité mixte, qui a une scène identique à celle de l’application de bureau, recevra des notifications concernant le déplacement d’objets à partir du service Notification Hubs (qui vient d’être mis à jour par l’application du PC de bureau).The mixed reality app, which has an identical scene to the desktop app, will receive notifications regarding object movement, from the Notification Hubs service (which has just been updated by the Desktop PC app).

  4. Lors de la réception d’une notification, qui contient les informations relatives à l’ID d’objet, au type et à la transformation, l’application de réalité mixte applique les informations reçues à sa propre scène.Upon receiving a notification, which will contain the object ID, type, and transform information, the mixed reality app will apply the received information to its own scene.

Dans votre application, c’est à vous de savoir comment vous allez intégrer les résultats à votre conception.In your application, it is up to you as to how you will integrate the results with your design. Ce cours est conçu pour vous apprendre à intégrer un service Azure à votre projet Unity.This course is designed to teach you how to integrate an Azure Service with your Unity Project. C’est votre travail d’utiliser les connaissances que vous avez acquises dans ce cours pour améliorer votre application de réalité mixte.It is your job to use the knowledge you gain from this course to enhance your mixed reality application. Ce cours est un didacticiel autonome qui n’implique pas directement d’autres laboratoires de réalité mixte.This course is a self-contained tutorial, which does not directly involve any other Mixed Reality Labs.

Prise en charge des appareilsDevice support

CoursCourse HoloLensHoloLens Casques immersifsImmersive headsets
Réalité mixte - Azure - Cours 308 : Notifications inter-appareilsMR and Azure 308: Cross-device notifications ✔️✔️ ✔️✔️

Notes

Bien que ce cours se concentre principalement sur les casques de Windows Mixed Reality (VR), vous pouvez également appliquer ce que vous allez apprendre dans ce cours à Microsoft HoloLens.While this course primarily focuses on Windows Mixed Reality immersive (VR) headsets, you can also apply what you learn in this course to Microsoft HoloLens. À mesure que vous suivez le cours, vous verrez des remarques sur les modifications que vous devrez peut-être utiliser pour prendre en charge HoloLens.As you follow along with the course, you will see notes on any changes you might need to employ to support HoloLens. Lorsque vous utilisez HoloLens, vous remarquerez peut-être un écho pendant la capture vocale.When using HoloLens, you may notice some echo during voice capture.

PrérequisPrerequisites

Notes

Ce didacticiel est conçu pour les développeurs qui ont une expérience de base avec Unity et C#.This tutorial is designed for developers who have basic experience with Unity and C#. Sachez également que les conditions préalables et les instructions écrites dans ce document représentent les éléments qui ont été testés et vérifiés au moment de l’écriture (mai 2018).Please also be aware that the prerequisites and written instructions within this document represent what has been tested and verified at the time of writing (May 2018). Vous êtes libre d’utiliser le logiciel le plus récent, tel qu’indiqué dans l’article installer les outils , bien qu’il ne soit pas supposé que les informations de ce cours correspondent parfaitement à ce que vous trouverez dans les logiciels plus récents que ceux répertoriés ci-dessous.You are free to use the latest software, as listed within the install the tools article, though it should not be assumed that the information in this course will perfectly match what you'll find in newer software than what's listed below.

Nous vous recommandons d’utiliser le matériel et les logiciels suivants pour ce cours :We recommend the following hardware and software for this course:

Avant de commencerBefore you start

  • Pour éviter de rencontrer des problèmes lors de la création de ce projet, il est fortement recommandé de créer le projet mentionné dans ce didacticiel dans un dossier racine ou dans un dossier racine (les chemins de dossiers longs peuvent entraîner des problèmes au moment de la génération).To avoid encountering issues building this project, it is strongly suggested that you create the project mentioned in this tutorial in a root or near-root folder (long folder paths can cause issues at build-time).
  • Vous devez être le propriétaire de votre portail des développeurs Microsoft et du portail d’inscription des applications. sinon, vous n’êtes pas autorisé à accéder à l’application dans le Chapitre 2.You must be the owner of your Microsoft Developer Portal and your Application Registration Portal, otherwise you will not have permission to access the app in Chapter 2.

Chapitre 1-créer une application sur le portail des développeurs MicrosoftChapter 1 - Create an application on the Microsoft Developer Portal

Pour utiliser le service Azure notification hubs , vous devez créer une application sur le portail des développeurs Microsoft, car votre application doit être inscrite, afin de pouvoir envoyer et recevoir des notifications.To use the Azure Notification Hubs Service, you will need to create an Application on the Microsoft Developer Portal, as your application will need to be registered, so that it can send and receive notifications.

  1. Connectez-vous au portail des développeurs Microsoft.Log in to the Microsoft Developer Portal.

    Vous devrez vous connecter à votre compte Microsoft.You will need to log in to your Microsoft Account.

  2. Dans le tableau de bord, cliquez sur créer une application.From the Dashboard, click Create a new app.

    créer une application

  3. Une fenêtre contextuelle s’affiche, dans laquelle vous devez réserver un nom pour votre nouvelle application.A popup will appear, wherein you need to reserve a name for your new app. Dans la zone de texte, insérez un nom approprié ; Si le nom choisi est disponible, un cycle s’affiche à droite de la zone de texte.In the textbox, insert an appropriate name; if the chosen name is available, a tick will appear to the right of the textbox. Une fois que vous avez un nom disponible inséré, cliquez sur le bouton réserver un nom de produit en bas à gauche de la fenêtre contextuelle.Once you have an available name inserted, click the Reserve product name button to the bottom left of the popup.

    inverser un nom

  4. Une fois l’application créée, vous êtes prêt à passer au chapitre suivant.With the app now created, you are ready to move to the next Chapter.

Chapitre 2-récupération des informations d’identification de vos nouvelles applicationsChapter 2 - Retrieve your new apps credentials

Connectez-vous au portail d’inscription des applications, où votre nouvelle application sera listée et récupérez les informations d’identification qui seront utilisées pour configurer le Service notification hubs dans le portail Azure.Log into the Application Registration Portal, where your new app will be listed, and retrieve the credentials which will be used to setup the Notification Hubs Service within the Azure Portal.

  1. Accédez au portail d’inscription des applications.Navigate to the Application Registration Portal.

    portail d’inscription des applications

    Avertissement

    Vous devrez utiliser votre compte Microsoft pour vous connecter.You will need to use your Microsoft Account to Login.
    Il doit s’agir du compte Microsoft que vous avez utilisé dans le chapitreprécédent, avec le portail des développeurs du Windows Store.This must be the Microsoft Account which you used in the previous Chapter, with the Windows Store Developer portal.

  2. Votre application se trouve dans la section mes applications .You will find your app under the My applications section. Une fois que vous l’avez trouvé, cliquez dessus pour afficher une nouvelle page qui contient le nom de l’application et l' inscription.Once you have found it, click on it and you will be taken to a new page which has the app name plus Registration.

    votre application nouvellement inscrite

  3. Faites défiler la page d’inscription pour trouver la section secrets de votre application et le SID du package pour votre application.Scroll down the registration page to find your Application Secrets section and the Package SID for your app. Copiez-les pour les utiliser avec la configuration du service Azure notification hubs dans le chapitre suivant.Copy both for use with setting up the Azure Notification Hubs Service in the next Chapter.

    secrets d’application

Chapitre 3-configurer le portail Azure : créer Notification Hubs serviceChapter 3 - Setup Azure Portal: create Notification Hubs Service

Une fois les informations d’identification de vos applications récupérées, vous devez accéder au portail Azure, où vous allez créer un service Azure Notification Hubs.With your apps credentials retrieved, you will need to go to the Azure Portal, where you will create an Azure Notification Hubs Service.

  1. Connectez-vous au portail Azure.Log into the Azure Portal.

    Notes

    Si vous n’avez pas encore de compte Azure, vous devez en créer un.If you do not already have an Azure account, you will need to create one. Si vous suivez ce didacticiel dans une situation de classe ou de laboratoire, demandez à votre formateur ou à l’un des prostructors de vous aider à configurer votre nouveau compte.If you are following this tutorial in a classroom or lab situation, ask your instructor or one of the proctors for help setting up your new account.

  2. Une fois que vous êtes connecté, cliquez sur nouveau dans l’angle supérieur gauche et recherchez notification Hub, puis cliquez sur *entrée _.Once you are logged in, click on New in the top left corner, and search for Notification Hub, and click *Enter _.

    Rechercher le hub de notification

    Notes

    Le mot New peut avoir été remplacé par _ * créer une ressource * *, dans les portails plus récents.The word New may have been replaced with _*Create a resource**, in newer portals.

  3. La nouvelle page fournit une description du service notification hubs .The new page will provide a description of the Notification Hubs service. En bas à gauche de cette invite, sélectionnez le bouton créer pour créer une association avec ce service.At the bottom left of this prompt, select the Create button, to create an association with this service.

    créer une instance notification hubs

  4. Une fois que vous avez cliqué sur *créer _ :Once you have clicked on *Create _:

    1. Insérez le nom de votre choix pour cette instance de service.Insert your desired name for this service instance.

    2. Fournissez un _ namespace* que vous pourrez associer à cette application.Provide a _ namespace* which you will be able to associate with this app.

    3. Sélectionnez un emplacement.Select a Location.

    4. Choisissez un groupe de ressources ou créez-en un.Choose a Resource Group or create a new one. Un groupe de ressources permet de surveiller, de contrôler l’accès, de configurer et de gérer la facturation d’un regroupement de ressources Azure.A resource group provides a way to monitor, control access, provision and manage billing for a collection of Azure assets. Il est recommandé de conserver tous les services Azure associés à un seul projet (par exemple, ces laboratoires) sous un groupe de ressources commun).It is recommended to keep all the Azure services associated with a single project (e.g. such as these labs) under a common resource group).

      Si vous souhaitez en savoir plus sur les groupes de ressources Azure, cliquez sur le lien suivant pour gérer un groupe de ressources.If you wish to read more about Azure Resource Groups, please follow this link on how to manage a Resource Group.

    5. Sélectionnez un abonnement approprié.Select an appropriate Subscription.

    6. Vous devrez également confirmer que vous avez compris les conditions générales appliquées à ce service.You will also need to confirm that you have understood the Terms and Conditions applied to this Service.

    7. Sélectionnez Create (Créer).Select Create.

      renseigner les détails du service

  5. Une fois que vous avez cliqué sur créer, vous devez attendre que le service soit créé, cette opération peut prendre une minute.Once you have clicked on Create, you will have to wait for the service to be created, this might take a minute.

  6. Une notification s’affichera dans le portail une fois l’instance de service créée.A notification will appear in the portal once the Service instance is created.

    notification

  7. Cliquez sur le bouton atteindre la ressource dans la notification pour explorer votre nouvelle instance de service.Click the Go to resource button in the notification to explore your new Service instance. Vous êtes dirigé vers votre nouvelle instance de service notification Hub .You will be taken to your new Notification Hub service instance.

    accéder à la ressource

  8. Dans la page vue d’ensemble, à mi-chemin de la page, cliquez sur Windows (WNS).From the overview page, halfway down the page, click Windows (WNS). Le panneau à droite change pour afficher deux champs de texte, qui nécessitent votre SID de package et votre clé de sécurité, à partir de l’application que vous avez configurée précédemment.The panel on the right will change to show two text fields, which require your Package SID and Security Key, from the app you set up previously.

    service hubs nouvellement créé

  9. Une fois que vous avez copié les détails dans les champs appropriés, cliquez sur Enregistrer pour recevoir une notification lorsque le hub de notification a été correctement mis à jour.Once you have copied the details into the correct fields, click Save, and you will receive a notification when the Notification Hub has been successfully updated.

    copier les détails de sécurité

Chapitre 4-configurer le portail Azure : créer un service de tableChapter 4 - Setup Azure Portal: create Table Service

Après avoir créé votre instance de service Notification Hubs, revenez à votre portail Azure, où vous allez créer un service de tables Azure en créant une ressource de stockage.After creating your Notification Hubs Service instance, navigate back to your Azure Portal, where you will create an Azure Tables Service by creating a Storage Resource.

  1. Si vous n’êtes pas déjà connecté, connectez-vous au portail Azure.If not already signed in, log into the Azure Portal.

  2. Une fois connecté, cliquez sur nouveau dans l’angle supérieur gauche et recherchez compte de stockage, puis cliquez sur entrée.Once logged in, click on New in the top left corner, and search for Storage account, and click Enter.

    Notes

    Le mot *New_ peut avoir été remplacé par * Create a Resource**, dans les portails plus récents.The word *New may have been replaced with _* Create a resource**, in newer portals.

  3. Sélectionnez compte de stockage-BLOB, fichier, table, file d’attente dans la liste.Select Storage account - blob, file, table, queue from the list.

    Rechercher le compte de stockage

  4. La nouvelle page fournit une description du service de compte de stockage .The new page will provide a description of the Storage account service. En bas à gauche de cette invite, sélectionnez le bouton créer pour créer une instance de ce service.At the bottom left of this prompt, select the Create button, to create an instance of this service.

    créer une instance de stockage

  5. Une fois que vous avez cliqué sur créer, un panneau s’affiche :Once you have clicked on Create, a panel will appear:

    1. Insérez le nom souhaité pour cette instance de service (doit être tout en minuscules).Insert your desired Name for this service instance (must be all lowercase).

    2. Pour modèle de déploiement, cliquez sur Resource Manager.For Deployment model, click Resource manager.

    3. Pour type de compte, à l’aide du menu déroulant, sélectionnez stockage (v1 à usage général).For Account kind, using the dropdown menu, select Storage (general purpose v1).

    4. Sélectionnez un emplacement approprié.Select an appropriate Location.

    5. Dans la liste déroulante réplication , sélectionnez stockage avec accès géo-redondant (RA-GRS).For the Replication dropdown menu, select Read-access-geo-redundant storage (RA-GRS).

    6. Pour les performances, cliquez sur standard.For Performance, click Standard.

    7. Dans la section transfert sécurisé requis , sélectionnez désactivé.Within the Secure transfer required section, select Disabled.

    8. Dans le menu déroulant abonnement , sélectionnez un abonnement approprié.From the Subscription dropdown menu, select an appropriate subscription.

    9. Choisissez un groupe de ressources ou créez-en un.Choose a Resource Group or create a new one. Un groupe de ressources permet de surveiller, de contrôler l’accès, de configurer et de gérer la facturation d’un regroupement de ressources Azure.A resource group provides a way to monitor, control access, provision and manage billing for a collection of Azure assets. Il est recommandé de conserver tous les services Azure associés à un seul projet (par exemple, ces laboratoires) sous un groupe de ressources commun).It is recommended to keep all the Azure services associated with a single project (e.g. such as these labs) under a common resource group).

      Si vous souhaitez en savoir plus sur les groupes de ressources Azure, cliquez sur le lien suivant pour gérer un groupe de ressources.If you wish to read more about Azure Resource Groups, please follow this link on how to manage a Resource Group.

    10. Laissez les réseaux virtuels désactivés s’il s’agit d’une option pour vous.Leave Virtual networks as Disabled if this is an option for you.

    11. Cliquez sur Créer.Click Create.

      renseigner les détails du stockage

  6. Une fois que vous avez cliqué sur créer, vous devez attendre que le service soit créé, cette opération peut prendre une minute.Once you have clicked on Create, you will have to wait for the service to be created, this might take a minute.

  7. Une notification s’affichera dans le portail une fois l’instance de service créée.A notification will appear in the portal once the Service instance is created. Cliquez sur les notifications pour explorer votre nouvelle instance de service.Click on the notifications to explore your new Service instance.

    nouvelle notification de stockage

  8. Cliquez sur le bouton atteindre la ressource dans la notification pour explorer votre nouvelle instance de service.Click the Go to resource button in the notification to explore your new Service instance. Vous êtes dirigé vers la page vue d’ensemble de votre nouvelle instance de service de stockage.You will be taken to your new Storage Service instance overview page.

    accéder à la ressource

  9. Dans la page vue d’ensemble, sur le côté droit, cliquez sur tables.From the overview page, to the right-hand side, click Tables.

  10. Le panneau à droite change pour afficher les informations sur le service de table , où vous devez ajouter une nouvelle table.The panel on the right will change to show the Table service information, wherein you need to add a new table. Pour ce faire, cliquez sur le + bouton de table dans l’angle supérieur gauche.Do this by clicking the + Table button to the top-left corner.

    Tables ouvertes

  11. Une nouvelle page s’affiche, dans laquelle vous devez entrer un nom de table.A new page will be shown, wherein you need to enter a Table name. Il s’agit du nom que vous allez utiliser pour faire référence aux données de votre application dans les chapitres ultérieurs.This is the name you will use to refer to the data in your application in later Chapters. Insérez un nom approprié, puis cliquez sur OK.Insert an appropriate name and click OK.

    créer une nouvelle table

  12. Une fois la nouvelle table créée, vous pouvez la voir dans la page service de table (en bas).Once the new table has been created, you will be able to see it within the Table service page (at the bottom).

    nouvelle table créée

Chapitre 5-remplissage du tableau Azure dans Visual StudioChapter 5 - Completing the Azure Table in Visual Studio

Maintenant que votre compte de stockage de service de table a été configuré, il est temps d’y ajouter des données qui seront utilisées pour stocker et récupérer des informations.Now that your Table service storage account has been setup, it is time to add data to it, which will be used to store and retrieve information. La modification de vos tables peut être effectuée par le biais de Visual Studio.The editing of your Tables can be done through Visual Studio.

  1. Ouvrez Visual Studio.Open Visual Studio.

  2. Dans le menu, cliquez sur Afficher le > Cloud Explorer.From the menu, click View > Cloud Explorer.

    ouvrir Cloud Explorer

  3. Le Cloud Explorer s’ouvre en tant qu’élément ancré (patienter, car le chargement peut prendre du temps).The Cloud Explorer will open as a docked item (be patient, as loading may take time).

    Notes

    Si l’abonnement que vous avez utilisé pour créer vos comptes de stockage n’est pas visible, vérifiez que vous disposez des éléments suivants :If the Subscription you used to create your Storage Accounts is not visible, ensure that you have:

    • Connectez-vous au même compte que celui que vous avez utilisé pour le portail Azure.Logged in to the same account as the one you used for the Azure Portal.

    • Sélectionnez votre abonnement dans la page de gestion des comptes (vous devrez peut-être appliquer un filtre à partir de vos paramètres de compte) :Selected your Subscription from the Account Management Page (you may need to apply a filter from your account settings):

      Rechercher un abonnement

  4. Vos services Cloud Azure s’affichent.Your Azure cloud services will be shown. Recherchez les comptes de stockage et cliquez sur la flèche à gauche de celle-ci pour développer vos comptes.Find Storage Accounts and click the arrow to the left of that to expand your accounts.

    ouvrir les comptes de stockage

  5. Une fois développé, le compte de stockage que vous venez de créer doit être disponible.Once expanded, your newly created Storage account should be available. Cliquez sur la flèche à gauche de votre stockage, puis une fois celle-ci développée, recherchez des tables , puis cliquez sur la flèche en regard de celle-ci pour afficher la table que vous avez créée dans le dernier chapitre.Click the arrow to the left of your storage, and then once that is expanded, find Tables and click the arrow next to that, to reveal the Table you created in the last Chapter. Double-cliquez sur votre table.Double click your Table.

    ouvrir la table d’objets de scène

  6. Votre table s’ouvre au centre de votre fenêtre Visual Studio.Your table will be opened in the center of your Visual Studio window. Cliquez sur l’icône de table avec + (plus).Click the table icon with the + (plus) on it.

    Ajouter une nouvelle table

  7. Une fenêtre s’affiche pour vous inviter à Ajouter une entité.A window will appear prompting for you to Add Entity. Vous allez créer trois entités au total, chacune avec plusieurs propriétés.You will create three entities in total, each with several properties. Vous remarquerez que PartitionKey et RowKey sont déjà fournis, car ils sont utilisés par la table pour rechercher vos données.You will notice that PartitionKey and RowKey are already provided, as these are used by the table to find your data.

    clé de partition et de ligne

  8. Mettez à jour la valeur de PartitionKey et RowKey comme suit (n’oubliez pas d’effectuer cette opération pour chaque propriété de ligne que vous ajoutez, même si vous incrémentez le RowKey à chaque fois) :Update the Value of the PartitionKey and RowKey as follows (remember to do this for each row property you add, though increment the RowKey each time):

    Ajouter les valeurs correctes

  9. Cliquez sur Ajouter une propriété pour ajouter des lignes de données supplémentaires.Click Add property to add extra rows of data. Faites correspondre votre première table vide à la table ci-dessous.Make your first empty table match the below table.

  10. Cliquez sur OK lorsque vous avez terminé.Click OK when you are finished.

    Cliquez sur OK lorsque vous avez terminé

    Avertissement

    Vérifiez que vous avez modifié le type des entrées X, Y et Z, puis doublez-les.Ensure that you have changed the Type of the X, Y, and Z, entries to Double.

  11. Vous remarquerez que votre table contient désormais une ligne de données.You will notice your table now has a row of data. Cliquez à + nouveau sur l’icône (plus) pour ajouter une autre entité.Click the + (plus) icon again to add another entity.

    première ligne

  12. Créez une propriété supplémentaire, puis définissez les valeurs de la nouvelle entité pour qu’elles correspondent à celles indiquées ci-dessous.Create an additional property, and then set the values of the new entity to match those shown below.

    Ajouter un cube

  13. Répétez la dernière étape pour ajouter une autre entité.Repeat the last step to add another entity. Définissez les valeurs de cette entité sur celles indiquées ci-dessous.Set the values for this entity to those shown below.

    Ajouter un cylindre

  14. Votre table doit maintenant ressembler à celle ci-dessous.Your table should now look like the one below.

    table terminée

  15. Vous avez terminé ce chapitre.You have completed this Chapter. Veillez à enregistrer.Make sure to save.

Chapitre 6-créer un Function App AzureChapter 6 - Create an Azure Function App

Créez un Function App Azure, qui sera appelé par l’application de bureau pour mettre à jour le service de table et envoyer une notification par le biais du Hub de notification.Create an Azure Function App, which will be called by the Desktop application to update the Table service and send a notification through the Notification Hub.

Tout d’abord, vous devez créer un fichier qui permettra à votre fonction Azure de charger les bibliothèques dont vous avez besoin.First, you need to create a file that will allow your Azure Function to load the libraries you need.

  1. Ouvrez le bloc-notes (appuyez sur la touche Windows et tapez Notepad).Open Notepad (press Windows Key and type notepad).

    ouvrir le bloc-notes

  2. Avec le bloc-notes ouvert, insérez la structure JSON ci-dessous.With Notepad open, insert the JSON structure below into it. Une fois que vous avez terminé, enregistrez-le sur votre bureau en tant que project.jssur.Once you have done that, save it on your desktop as project.json. Il est important que l’attribution de noms soit correcte : Assurez-vous qu’elle n' a pas d’extension de fichier. txt .It is important that the naming is correct: ensure it does NOT have a .txt file extension. Ce fichier définit les bibliothèques que votre fonction utilisera, si vous avez utilisé NuGet, vous serez familier.This file defines the libraries your function will use, if you have used NuGet it will look familiar.

    {
    "frameworks": {
        "net46":{
        "dependencies": {
            "WindowsAzure.Storage": "7.0.0",
            "Microsoft.Azure.NotificationHubs" : "1.0.9",
            "Microsoft.Azure.WebJobs.Extensions.NotificationHubs" :"1.1.0"
        }
        }
    }
    }
    
  3. Connectez-vous au portail Azure.Log in to the Azure Portal.

  4. Une fois que vous êtes connecté, cliquez sur nouveau dans l’angle supérieur gauche et recherchez Function App, appuyez sur entrée.Once you are logged in, click on New in the top left corner, and search for Function App, press Enter.

    Rechercher une application de fonction

    Notes

    Le mot nouveau peut avoir été remplacé par créer une ressource, dans les portails plus récents.The word New may have been replaced with Create a resource, in newer portals.

  5. La nouvelle page fournit une description du service Function App .The new page will provide a description of the Function App service. En bas à gauche de cette invite, sélectionnez le bouton créer pour créer une association avec ce service.At the bottom left of this prompt, select the Create button, to create an association with this service.

    instance de l’application de fonction

  6. Une fois que vous avez cliqué sur créer, renseignez les éléments suivants :Once you have clicked on Create, fill in the following:

    1. Pour nom de l’application, insérez le nom de votre choix pour cette instance de service.For App name, insert your desired name for this service instance.

    2. Sélectionnez un Abonnement.Select a Subscription.

    3. Sélectionnez le niveau tarifaire approprié, s’il s’agit de la première fois que vous créez un Service Function App, vous devez disposer d’un niveau gratuit.Select the pricing tier appropriate for you, if this is the first time creating a Function App Service, a free tier should be available to you.

    4. Choisissez un groupe de ressources ou créez-en un.Choose a Resource Group or create a new one. Un groupe de ressources permet de surveiller, de contrôler l’accès, de configurer et de gérer la facturation d’un regroupement de ressources Azure.A resource group provides a way to monitor, control access, provision and manage billing for a collection of Azure assets. Il est recommandé de conserver tous les services Azure associés à un seul projet (par exemple, ces laboratoires) sous un groupe de ressources commun).It is recommended to keep all the Azure services associated with a single project (e.g. such as these labs) under a common resource group).

      Si vous souhaitez en savoir plus sur les groupes de ressources Azure, cliquez sur le lien suivant pour gérer un groupe de ressources.If you wish to read more about Azure Resource Groups, please follow this link on how to manage a Resource Group.

    5. Pour système d’exploitation, cliquez sur Windows, car il s’agit de la plateforme prévue.For OS, click Windows, as that is the intended platform.

    6. Sélectionnez un plan d’hébergement (ce didacticiel utilise un plan de consommation.Select a Hosting Plan (this tutorial is using a Consumption Plan.

    7. Sélectionnez un emplacement (choisissez le même emplacement que celui du stockage que vous avez créé à l’étape précédente)Select a Location (choose the same location as the storage you have built in the previous step)

    8. Pour la section stockage , vous devez sélectionner le service de stockage que vous avez créé à l’étape précédente.For the Storage section, you must select the Storage Service you created in the previous step.

    9. Vous n’aurez pas besoin de application Insights dans cette application. n' hésitez donc pas à la conserver.You will not need Application Insights in this app, so feel free to leave it Off.

    10. Cliquez sur Créer.Click Create.

      créer une nouvelle instance

  7. Une fois que vous avez cliqué sur créer , vous devez attendre que le service soit créé, cette opération peut prendre une minute.Once you have clicked on Create you will have to wait for the service to be created, this might take a minute.

  8. Une notification s’affichera dans le portail une fois l’instance de service créée.A notification will appear in the portal once the Service instance is created.

    nouvelle notification

  9. Cliquez sur les notifications pour explorer votre nouvelle instance de service.Click on the notifications to explore your new Service instance.

  10. Cliquez sur le bouton atteindre la ressource dans la notification pour explorer votre nouvelle instance de service.Click the Go to resource button in the notification to explore your new Service instance.

    accéder à la ressource

  11. Cliquez sur l' + icône (plus) en regard de fonctions pour créer un nouveau.Click the + (plus) icon next to Functions, to Create new.

    Ajouter une nouvelle fonction

  12. Dans le panneau central, la fenêtre de création de fonction s’affiche.Within the central panel, the Function creation window will appear. Ignorez les informations dans la moitié supérieure du panneau, puis cliquez sur fonction personnalisée, située près du bas (dans la zone bleue, comme ci-dessous).Ignore the information in the upper half of the panel, and click Custom function, which is located near the bottom (in the blue area, as below).

    fonction personnalisée

  13. La nouvelle page de la fenêtre affiche différents types de fonction.The new page within the window will show various function types. Faites défiler la liste pour afficher les types violets, puis cliquez sur élément http put .Scroll down to view the purple types, and click HTTP PUT element.

    lien http put

    Important

    Vous devrez peut-être faire défiler la page vers le bas (et cette image risque de ne pas être exactement la même, si les mises à jour du portail Azure ont eu lieu). Toutefois, vous recherchez un élément appelé http put.You may have to scroll further the down the page (and this image may not look exactly the same, if Azure Portal updates have taken place), however, you are looking for an element called HTTP PUT.

  14. La fenêtre http put s’affiche, dans laquelle vous devez configurer la fonction (Voir l’image ci-dessous).The HTTP PUT window will appear, where you need to configure the function (see below for image).

    1. Pour langue, dans le menu déroulant, sélectionnez C # .For Language, using the dropdown menu, select C#.

    2. Pour nom, entrez un nom approprié.For Name, input an appropriate name.

    3. Dans le menu déroulant niveau d’authentification , sélectionnez fonction.In the Authentication level dropdown menu, select Function.

    4. Pour la section nom de la table , vous devez utiliser le nom exact que vous avez utilisé pour créer le service de table précédemment (y compris la même casse).For the Table name section, you need to use the exact name you used to create your Table service previously (including the same letter case).

    5. Dans la section connexion au compte de stockage , utilisez le menu déroulant, puis sélectionnez votre compte de stockage.Within the Storage account connection section, use the dropdown menu, and select your storage account from there. Si ce n’est pas le cas, cliquez sur le lien hypertexte à côté du titre de la section pour afficher un autre panneau, où votre compte de stockage doit être listé.If it is not there, click the New hyperlink alongside the section title, to show another panel, where your storage account should be listed.

      nouveau stockage

  15. Cliquez sur créer . vous recevrez une notification indiquant que vos paramètres ont été correctement mis à jour.Click Create and you will receive a notification that your settings have been updated successfully.

    créer une fonction

  16. Après avoir cliqué sur créer, vous êtes redirigé vers l’éditeur de fonction.After clicking Create, you will be redirected to the function editor.

    mettre à jour le code de fonction

  17. Insérez le code suivant dans l’éditeur de fonction (en remplaçant le code dans la fonction) :Insert the following code into the function editor (replacing the code in the function):

    #r "Microsoft.WindowsAzure.Storage"
    
    using System;
    using Microsoft.WindowsAzure.Storage;
    using Microsoft.WindowsAzure.Storage.Table;
    using Microsoft.Azure.NotificationHubs;
    using Newtonsoft.Json;
    
    public static async Task Run(UnityGameObject gameObj, CloudTable table, IAsyncCollector<Notification> notification, TraceWriter log)
    {
        //RowKey of the table object to be changed
        string rowKey = gameObj.RowKey;
    
        //Retrieve the table object by its RowKey
        TableOperation operation = TableOperation.Retrieve<UnityGameObject>("UnityPartitionKey", rowKey); 
    
        TableResult result = table.Execute(operation);
    
        //Create a UnityGameObject so to set its parameters
        UnityGameObject existingGameObj = (UnityGameObject)result.Result; 
    
        existingGameObj.RowKey = rowKey;
        existingGameObj.X = gameObj.X;
        existingGameObj.Y = gameObj.Y;
        existingGameObj.Z = gameObj.Z;
    
        //Replace the table appropriate table Entity with the value of the UnityGameObject
        operation = TableOperation.Replace(existingGameObj); 
    
        table.Execute(operation);
    
        log.Verbose($"Updated object position");
    
        //Serialize the UnityGameObject
        string wnsNotificationPayload = JsonConvert.SerializeObject(existingGameObj);
    
        log.Info($"{wnsNotificationPayload}");
    
        var headers = new Dictionary<string, string>();
    
        headers["X-WNS-Type"] = @"wns/raw";
    
        //Send the raw notification to subscribed devices
        await notification.AddAsync(new WindowsNotification(wnsNotificationPayload, headers)); 
    
        log.Verbose($"Sent notification");
    }
    
    // This UnityGameObject represent a Table Entity
    public class UnityGameObject : TableEntity
    {
        public string Type { get; set; }
        public double X { get; set; }
        public double Y { get; set; }
        public double Z { get; set; }
        public string RowKey { get; set; }
    }
    

    Notes

    À l’aide des bibliothèques incluses, la fonction reçoit le nom et l’emplacement de l’objet qui a été déplacé dans la scène Unity (en tant qu’objet C#, appelé UnityGameObject).Using the included libraries, the function receives the name and location of the object which was moved in the Unity scene (as a C# object, called UnityGameObject). Cet objet est ensuite utilisé pour mettre à jour les paramètres d’objet dans la table créée.This object is then used to update the object parameters within the created table. Après cela, la fonction effectue un appel à votre service de notification Hub créé, qui avertit toutes les applications abonnées.Following this, the function makes a call to your created Notification Hub service, which notifies all subscribed applications.

  18. Avec le code en place, cliquez sur Enregistrer.With the code in place, click Save.

  19. Ensuite, cliquez sur l' < icône (flèche), sur le côté droit de la page.Next, click the < (arrow) icon, on the right-hand side of the page.

    ouvrir le panneau de chargement

  20. Un panneau s’affiche à partir de la droite.A panel will slide in from the right. Dans ce panneau, cliquez sur Télécharger et un Explorateur de fichiers s’affiche.In that panel, click Upload, and a File Browser will appear.

  21. Accédez à, puis cliquez sur le fichier project.js , que vous avez créé précédemment dans le bloc-notes , puis cliquez sur le bouton ouvrir .Navigate to, and click, the project.json file, which you created in Notepad previously, and then click the Open button. Ce fichier définit les bibliothèques que votre fonction utilisera.This file defines the libraries that your function will use.

    Télécharger JSON

  22. Une fois le fichier chargé, il s’affiche dans le volet de droite.When the file has uploaded, it will appear in the panel on the right. Cliquez dessus pour l’ouvrir dans l’éditeur de fonctions .Clicking it will open it within the Function editor. Elle doit ressembler exactement à l’image suivante (sous l’étape 23).It must look exactly the same as the next image (below step 23).

  23. Ensuite, dans le volet de gauche, sous fonctions, cliquez sur le lien intégrer .Then, in the panel on the left, beneath Functions, click the Integrate link.

    fonction d’intégration

  24. Sur la page suivante, dans le coin supérieur droit, cliquez sur éditeur avancé (comme ci-dessous).On the next page, in the top right corner, click Advanced editor (as below).

    ouvrir l’éditeur avancé

  25. Un function.jssur le fichier s’ouvre dans le panneau central, qui doit être remplacé par l’extrait de code suivant.A function.json file will be opened in the center panel, which needs to be replaced with the following code snippet. Cela définit la fonction que vous générez et les paramètres transmis à la fonction.This defines the function you are building and the parameters passed into the function.

    {
    "bindings": [
        {
        "authLevel": "function",
        "type": "httpTrigger",
        "methods": [
            "get",
            "post"
        ],
        "name": "gameObj",
        "direction": "in"
        },
        {
        "type": "table",
        "name": "table",
        "tableName": "SceneObjectsTable",
        "connection": "mrnothubstorage_STORAGE",
        "direction": "in"
        },
        {
        "type": "notificationHub",
        "direction": "out",
        "name": "notification",
        "hubName": "MR_NotHub_ServiceInstance",
        "connection": "MRNotHubNS_DefaultFullSharedAccessSignature_NH",
        "platform": "wns"
        }
    ]
    }
    
  26. Votre éditeur doit maintenant ressembler à l’image ci-dessous :Your editor should now look like the image below:

    Retour à l’éditeur standard

  27. Vous pouvez remarquer que les paramètres d’entrée que vous venez d’insérer ne correspondent pas à votre table et à vos détails de stockage et doivent donc être mis à jour avec vos informations.You may notice the input parameters that you have just inserted might not match your table and storage details and therefore will need to be updated with your information. N' effectuez pas cette opération ici, car elle est décrite ci-dessous.Do not do this here, as it is covered next. Cliquez simplement sur le lien éditeur standard , dans le coin supérieur droit de la page, pour revenir en arrière.Simply click the Standard editor link, in the top-right corner of the page, to go back.

  28. De retour dans l' éditeur standard, cliquez sur stockage table Azure (table), sous entrées.Back in the Standard editor, click Azure Table Storage (table), under Inputs.

    Entrées de table

  29. Vérifiez que les informations suivantes correspondent à vos informations, car elles peuvent être différentes (une image est présente en dessous des étapes suivantes) :Ensure the following match to your information, as they may be different (there is an image below the following steps):

    1. Nom de la table : nom de la table que vous avez créée dans votre service de stockage Azure, tables.Table name: the name of the table you created within your Azure Storage, Tables service.

    2. Connexion au compte de stockage : cliquez sur nouveau, qui apparaît en regard du menu déroulant, et un panneau s’affiche à droite de la fenêtre.Storage account connection: click new, which appears alongside the dropdown menu, and a panel will appear to the right of the window.

      nouveau stockage

      1. Sélectionnez votre compte de stockage, que vous avez créé précédemment pour héberger les applications de fonction.Select your Storage Account, which you created previously to host the Function Apps.

      2. Vous remarquerez que la valeur de la connexion au compte de stockage a été créée.You will notice that the Storage Account connection value has been created.

      3. Veillez à cliquer sur Enregistrer une fois que vous avez terminé.Make sure to press Save once you are done.

    3. La page entrées doit maintenant correspondre aux informations ci-dessous, qui illustrent vos informations.The Inputs page should now match the below, showing your information.

      entrées terminées

  30. Ensuite, cliquez sur Azure notification Hub (notification) -sous sorties.Next, click Azure Notification Hub (notification) - under Outputs. Assurez-vous que les éléments suivants sont mis en correspondance avec vos informations, car ils peuvent être différents (une image est présente en dessous des étapes suivantes) :Ensure the following are matched to your information, as they may be different (there is an image below the following steps):

    1. Nom du Hub de notification: il s’agit du nom de l’instance de service de votre Hub de notification que vous avez créée précédemment.Notification Hub Name: this is the name of your Notification Hub service instance, which you created previously.

    2. Notification hubs la connexion à l’espace de noms : cliquez sur nouveau, qui apparaît en regard du menu déroulant.Notification Hubs namespace connection: click new, which appears alongside the dropdown menu.

      vérifier les sorties

    3. La fenêtre contextuelle de connexion s’affiche (Voir l’image ci-dessous), où vous devez sélectionner l' espace de noms du Hub de notification que vous avez configuré précédemment.The Connection popup will appear (see image below), where you need to select the Namespace of the Notification Hub, which you set up previously.

    4. Sélectionnez le nom de votre Hub de notification dans le menu déroulant du milieu.Select your Notification Hub name from the middle dropdown menu.

    5. Définissez le menu déroulant stratégie sur DefaultFullSharedAccessSignature.Set the Policy dropdown menu to DefaultFullSharedAccessSignature.

    6. Cliquez sur le bouton Sélectionner pour revenir en arrière.Click the Select button to go back.

      mise à jour de sortie

  31. La page sorties doit maintenant correspondre aux informations ci-dessous, mais avec vos informations à la place.The Outputs page should now match the below, but with your information instead. Veillez à cliquer sur Enregistrer.Make sure to press Save.

Avertissement

Ne modifiez pas directement le nom du Hub de notification (cette opération doit être effectuée à l’aide de la éditeur avancé, à condition que vous ayez suivi correctement les étapes précédentes.Do not edit the Notification Hub name directly (this should all be done using the Advanced Editor, provided you followed the previous steps correctly.

sorties terminées

  1. À ce stade, vous devez tester la fonction pour vous assurer qu’elle fonctionne.At this point, you should test the function, to ensure it is working. Pour ce faire :To do this:

    1. Accédez à la page de fonction une fois de plus :Navigate to the function page once more:

      sorties terminées

    2. De retour dans la page de fonction, cliquez sur l’onglet test situé à l’extrême droite de la page pour ouvrir le panneau test :Back on the function page, click the Test tab on the far right side of the page, to open the Test blade:

      sorties terminées

    3. Dans la zone de texte requête Body du panneau, collez le code ci-dessous :Within the Request body textbox of the blade, paste the below code:

      {  
          "Type":null,
          "X":3,
          "Y":0,
          "Z":1,
          "PartitionKey":null,
          "RowKey":"Obj2",
          "Timestamp":"0001-01-01T00:00:00+00:00",
          "ETag":null
      }
      
    4. Une fois le code de test en place, cliquez sur le bouton exécuter en bas à droite pour exécuter le test.With the test code in place, click the Run button at the bottom right, and the test will be run. Les journaux de sortie du test s’affichent dans la zone de la console, sous le code de votre fonction.The output logs of the test will appear in the console area, below your function code.

      sorties terminées

    Avertissement

    Si le test ci-dessus échoue, vous devez vérifier exactement que vous avez suivi les étapes ci-dessus, en particulier les paramètres dans le panneau intégrer.If the above test fails, you will need to double check that you have followed the above steps exactly, particularly the settings within the integrate panel.

Chapitre 7-configurer un projet Unity de bureauChapter 7 - Set up Desktop Unity Project

Important

L’application de bureau que vous créez maintenant ne fonctionne pas dans l’éditeur Unity.The Desktop application which you are now creating, will not work in the Unity Editor. Elle doit être exécutée en dehors de l’éditeur, après la génération de l’application, à l’aide de Visual Studio (ou de l’application déployée).It needs to be run outside of the Editor, following the Building of the application, using Visual Studio (or the deployed application).

Voici une configuration standard pour le développement avec Unity et la réalité mixte, et en tant que tel, est un bon modèle pour d’autres projets.The following is a typical set up for developing with Unity and mixed reality, and as such, is a good template for other projects.

Configurez et testez votre casque immersif en réalité mixte.Set up and test your mixed reality immersive headset.

Notes

Vous n’aurez pas besoin de contrôleurs de mouvement pour ce cours.You will not require Motion Controllers for this course. Si vous avez besoin de la prise en charge de la configuration du casque immersif, suivez ce lien pour savoir comment configurer Windows Mixed Reality.If you need support setting up the immersive headset, please follow this link on how to set up Windows Mixed Reality.

  1. Ouvrez Unity et cliquez sur nouveau.Open Unity and click New.

    nouveau projet Unity

  2. Vous devez fournir un nom de projet Unity, insérer UnityDesktopNotifHub.You need to provide a Unity Project name, insert UnityDesktopNotifHub. Assurez-vous que le type de projet est défini sur 3D.Make sure the project type is set to 3D. Définissez l' emplacement approprié pour vous (n’oubliez pas que les répertoires racine sont mieux adaptés).Set the Location to somewhere appropriate for you (remember, closer to root directories is better). Ensuite, cliquez sur créer un projet.Then, click Create project.

    créer un projet

  3. Si Unity est ouvert, il est conseillé de vérifier que l' éditeur de script par défaut est défini sur Visual Studio.With Unity open, it is worth checking the default Script Editor is set to Visual Studio. Accédez à modifier > les Préférences , puis à partir de la nouvelle fenêtre, accédez à outils externes.Go to Edit > Preferences and then from the new window, navigate to External Tools. Remplacez l' éditeur de script externe par Visual Studio 2017.Change External Script Editor to Visual Studio 2017. Fermez la fenêtre Préférences .Close the Preferences window.

    définir les outils VS externes

  4. Ensuite, accédez à fichier > paramètres de build et sélectionnez plateforme Windows universelle, puis cliquez sur le bouton changer de plateforme pour appliquer votre sélection.Next, go to File > Build Settings and select Universal Windows Platform, then click on the Switch Platform button to apply your selection.

    changer de plateformes

  5. Tout en conservant les paramètres de génération de fichiers, assurez-vous > que :While still in File > Build Settings, make sure that:

    1. L' appareil cible est défini sur n’importe quel appareilTarget Device is set to Any Device

      Cette application sera destinée à votre bureau. doit donc être n’importe quel appareilThis Application will be for your desktop, so must be Any Device

    2. Le type de build est D3DBuild Type is set to D3D

    3. Le SDK est configuré sur le dernier installéSDK is set to Latest installed

    4. Version de Visual Studio définie sur le dernier installéVisual Studio Version is set to Latest installed

    5. La génération et l’exécution sont définies sur l' ordinateur localBuild and Run is set to Local Machine

    6. Dans ce cas, il convient d’enregistrer la scène et de l’ajouter à la Build.While here, it is worth saving the scene, and adding it to the build.

      1. Pour ce faire, sélectionnez Ajouter des scènes ouvertes.Do this by selecting Add Open Scenes. Une fenêtre d’enregistrement s’affiche.A save window will appear.

        Ajouter des scènes ouvertes

      2. Créez un dossier pour cela, ainsi que toute nouvelle scène, puis sélectionnez le bouton nouveau dossier pour créer un nouveau dossier, puis nommez-le scenes.Create a new folder for this, and any future, scene, then select the New folder button, to create a new folder, name it Scenes.

        nouveau dossier scenes

      3. Ouvrez le dossier scenes nouvellement créé, puis dans le champ nom de fichier : texte, tapez _ NH Desktop _ Scene, puis cliquez sur Enregistrer.Open your newly created Scenes folder, and then in the File name: text field, type NH_Desktop_Scene, then press Save.

        nouvelle NH_Desktop_Scene

    7. Les paramètres restants, dans paramètres de build, doivent être laissés par défaut pour le moment.The remaining settings, in Build Settings, should be left as default for now.

  6. Dans la même fenêtre, cliquez sur le bouton paramètres du lecteur pour ouvrir le panneau correspondant dans l’espace où se trouve l' inspecteur .In the same window click on the Player Settings button, this will open the related panel in the space where the Inspector is located.

  7. Dans ce volet, quelques paramètres doivent être vérifiés :In this panel, a few settings need to be verified:

    1. Sous l’onglet autres paramètres :In the Other Settings tab:

      1. La version du runtime de script doit être expérimentale (équivalent .net 4,6)Scripting Runtime Version should be Experimental (.NET 4.6 Equivalent)

      2. Le backend de script doit être .netScripting Backend should be .NET

      3. Le niveau de compatibilité de l’API doit être .net 4,6API Compatibility Level should be .NET 4.6

        version .net 4,6

    2. Dans l’onglet paramètres de publication , sous fonctionnalités, activez la case à cocher :Within the Publishing Settings tab, under Capabilities, check:

      • InternetClientInternetClient

        client Internet Tick

  8. De retour dans les paramètres de build les # projets Unit C ne sont plus grisés ; cochez la case en regard de cette option.Back in Build Settings Unity C# Projects is no longer greyed out; tick the checkbox next to this.

  9. Fermez la fenêtre Build Settings.Close the Build Settings window.

  10. Enregistrez votre scène et votre fichier projet > enregistrer la scène/fichier > enregistrer le projet.Save your Scene and Project File > Save Scene / File > Save Project.

    Important

    Si vous souhaitez ignorer le composant Unity Set up pour ce projet (application de bureau) et continuer directement dans le code, n’hésitez pas à Télécharger ce fichier. pour Unity, à l’importer dans votre projet en tant que package personnalisé, puis à continuer à partir du chapitre 9.If you wish to skip the Unity Set up component for this project (Desktop App), and continue straight into code, feel free to download this .unitypackage, import it into your project as a Custom Package, and then continue from Chapter 9. Vous devrez toujours ajouter les composants script.You will still need to add the script components.

Chapitre 8-importation des dll dans UnityChapter 8 - Importing the DLLs in Unity

Vous allez utiliser le stockage Azure pour Unity (qui utilise lui-même le kit de développement logiciel (SDK) .net pour Azure).You will be using Azure Storage for Unity (which itself leverages the .Net SDK for Azure). Pour plus d’informations, consultez ce lien sur le stockage Azure pour Unity.For more information follow this link about Azure Storage for Unity.

Il existe actuellement un problème connu dans Unity qui nécessite que les plug-ins soient reconfigurés après l’importation.There is currently a known issue in Unity which requires plugins to be reconfigured after import. Ces étapes (4-7 dans cette section) ne sont plus nécessaires une fois que le bogue a été résolu.These steps (4 - 7 in this section) will no longer be required after the bug has been resolved.

Pour importer le kit de développement logiciel (SDK) dans votre propre projet, assurez-vous d’avoir téléchargé la dernière version de pour Unity à partir de github.To import the SDK into your own project, make sure you have downloaded the latest .unitypackage from GitHub. Ensuite, procédez comme suit :Then, do the following:

  1. Ajoutez le fichier . pour Unity à Unity à l’aide de l’option de menu > > package personnalisé du package d’importation de ressources .Add the .unitypackage to Unity by using the Assets > Import Package > Custom Package menu option.

  2. Dans la zone importer le package Unity qui s’affiche, vous pouvez sélectionner tous les éléments sous * *plug-in * > stockage * * *.In the Import Unity Package box that pops up, you can select everything under **Plugin > *Storage***. Décochez tout le reste, car il n’est pas nécessaire pour ce cours.Uncheck everything else, as it is not needed for this course.

    importer dans le package

  3. Cliquez sur le bouton *Importer _ pour ajouter les éléments à votre projet.Click the *Import _ button to add the items to your project.

  4. Accédez au dossier _ Storage* sous plug-ins dans la vue de projet et sélectionnez les plug-ins suivants uniquement:Go to the _ Storage* folder under Plugins in the Project view and select the following plugins only:

    • Microsoft.Data.EdmMicrosoft.Data.Edm
    • Microsoft.Data.ODataMicrosoft.Data.OData
    • Microsoft.WindowsAzure.StorageMicrosoft.WindowsAzure.Storage
    • Newtonsoft.JsonNewtonsoft.Json
    • System.SpatialSystem.Spatial

décocher une plateforme

  1. Une fois ces plug-ins spécifiques sélectionnés, décochez toutes les plateformes et décochez WSAPlayer , puis cliquez sur appliquer.With these specific plugins selected, uncheck Any Platform and uncheck WSAPlayer then click Apply.

    appliquer des dll de plateforme

    Notes

    Nous marqueons ces plug-ins particuliers à utiliser uniquement dans l’éditeur Unity.We are marking these particular plugins to only be used in the Unity Editor. Cela est dû au fait qu’il existe différentes versions des mêmes plug-ins dans le dossier WSA qui seront utilisées après l’exportation du projet à partir d’Unity.This is because there are different versions of the same plugins in the WSA folder that will be used after the project is exported from Unity.

  2. Dans le dossier de plug-in de stockage , sélectionnez uniquement :In the Storage plugin folder, select only:

    • Microsoft.Data.Services.ClientMicrosoft.Data.Services.Client

      définir ne pas traiter pour les dll

  3. Cochez la case ne pas traiter sous paramètres de plateforme , puis cliquez sur *appliquer _.Check the Don't Process box under Platform Settings and click *Apply _.

    ne pas appliquer de traitement

    Notes

    Nous marquant ce plug-in « ne pas traiter », car l’assembly Unity Patcher a des difficultés à traiter ce plug-in.We are marking this plugin "Don't process", because the Unity assembly patcher has difficulty processing this plugin. Le plug-in fonctionne toujours même s’il n’est pas traité.The plugin will still work even though it is not processed.

Chapitre 9-créer la classe TableToScene dans le projet Unity de bureauChapter 9 - Create the TableToScene class in the Desktop Unity project

Vous devez maintenant créer les scripts contenant le code pour exécuter cette application.You now need to create the scripts containing the code to run this application.

Le premier script que vous devez créer est _ * TableToScene * *, qui est responsable des opérations suivantes :The first script you need to create is _*TableToScene**, which is responsible for:

  • Lecture des entités dans la table Azure.Reading entities within the Azure Table.
  • À l’aide des données de la table, déterminez les objets à générer et leur position.Using the Table data, determine which objects to spawn, and in which position.

Le deuxième script que vous devez créer est CloudScene, qui est responsable des opérations suivantes :The second script you need to create is CloudScene, which is responsible for:

  • Inscription de l’événement de clic gauche pour permettre à l’utilisateur de faire glisser des objets autour de la scène.Registering the left-click event, to allow the user to drag objects around the scene.
  • Sérialisation des données d’objet à partir de cette scène Unity et envoi de celles-ci au Function App Azure.Serializing the object data from this Unity scene, and sending it to the Azure Function App.

Pour créer cette classe :To create this class:

  1. Cliquez avec le bouton droit sur le dossier Asset situé dans le panneau projet, puis créez le > dossier.Right-click in the Asset Folder located in the Project Panel, Create > Folder. Nommez le dossier scripts.Name the folder Scripts.

    créer un dossier de scripts

    créer un dossier de scripts 2

  2. Double-cliquez sur le dossier que vous venez de créer pour l’ouvrir.Double click on the folder just created, to open it.

  3. Cliquez avec le bouton droit dans le dossier scripts , puis cliquez sur créer un > script C#.Right-click inside the Scripts folder, click Create > C# Script. Nommez le script TableToScene.Name the script TableToScene.

    nouveau script c#  TableToScene renommernew c# script TableToScene rename

  4. Double-cliquez sur le script pour l’ouvrir dans Visual Studio 2017.Double-click on the script to open it in Visual Studio 2017.

  5. Ajoutez les espaces de noms suivants :Add the following namespaces:

    using Microsoft.WindowsAzure.Storage;
    using Microsoft.WindowsAzure.Storage.Auth;
    using Microsoft.WindowsAzure.Storage.Table;
    using UnityEngine;
    
  6. Dans la classe, insérez les variables suivantes :Within the class, insert the following variables:

        /// <summary>    
        /// allows this class to behave like a singleton
        /// </summary>    
        public static TableToScene instance;
    
        /// <summary>    
        /// Insert here you Azure Storage name     
        /// </summary>    
        private string accountName = " -- Insert your Azure Storage name -- ";
    
        /// <summary>    
        /// Insert here you Azure Storage key    
        /// </summary>    
        private string accountKey = " -- Insert your Azure Storage key -- ";
    

    Notes

    Remplacez la valeur AccountName par le nom de votre service de stockage Azure et la valeur accountKey par la valeur de clé trouvée dans le service de stockage Azure, dans le portail Azure (Voir l’image ci-dessous).Substitute the accountName value with your Azure Storage Service name and accountKey value with the key value found in the Azure Storage Service, in the Azure Portal (See Image below).

    extraire la clé de compte

  7. Ajoutez maintenant les méthodes Start () et éveillé () pour initialiser la classe.Now add the Start() and Awake() methods to initialize the class.

        /// <summary>
        /// Triggers before initialization
        /// </summary>
        void Awake()
        {
            // static instance of this class
            instance = this;
        }
    
        /// <summary>
        /// Use this for initialization
        /// </summary>
        void Start()
        {  
            // Call method to populate the scene with new objects as 
            // pecified in the Azure Table
            PopulateSceneFromTableAsync();
        }
    
  8. Dans la classe TableToScene , ajoutez la méthode qui permet de récupérer les valeurs de la table Azure et de les utiliser pour générer les primitives appropriées dans la scène.Within the TableToScene class, add the method that will retrieve the values from the Azure Table and use them to spawn the appropriate primitives in the scene.

        /// <summary>    
        /// Populate the scene with new objects as specified in the Azure Table    
        /// </summary>    
        private async void PopulateSceneFromTableAsync()
        {
            // Obtain credentials for the Azure Storage
            StorageCredentials creds = new StorageCredentials(accountName, accountKey);
    
            // Storage account
            CloudStorageAccount account = new CloudStorageAccount(creds, useHttps: true);
    
            // Storage client
            CloudTableClient client = account.CreateCloudTableClient(); 
    
            // Table reference
            CloudTable table = client.GetTableReference("SceneObjectsTable");
    
            TableContinuationToken token = null;
    
            // Query the table for every existing Entity
            do
            {
                // Queries the whole table by breaking it into segments
                // (would happen only if the table had huge number of Entities)
                TableQuerySegment<AzureTableEntity> queryResult = await table.ExecuteQuerySegmentedAsync(new TableQuery<AzureTableEntity>(), token); 
    
                foreach (AzureTableEntity entity in queryResult.Results)
                {
                    GameObject newSceneGameObject = null;
                    Color newColor;
    
                    // check for the Entity Type and spawn in the scene the appropriate Primitive
                    switch (entity.Type)
                    {
                        case "Cube":
                            // Create a Cube in the scene
                            newSceneGameObject = GameObject.CreatePrimitive(PrimitiveType.Cube);
                            newColor = Color.blue;
                            break;
    
                        case "Sphere":
                            // Create a Sphere in the scene
                            newSceneGameObject = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                            newColor = Color.red;
                            break;
    
                        case "Cylinder":
                            // Create a Cylinder in the scene
                            newSceneGameObject = GameObject.CreatePrimitive(PrimitiveType.Cylinder);
                            newColor = Color.yellow;
                            break;
                        default:
                            newColor = Color.white;
                            break;
                    }
    
                    newSceneGameObject.name = entity.RowKey;
    
                    newSceneGameObject.GetComponent<MeshRenderer>().material = new Material(Shader.Find("Diffuse"))
                    {
                        color = newColor
                    };
    
                    //check for the Entity X,Y,Z and move the Primitive at those coordinates
                    newSceneGameObject.transform.position = new Vector3((float)entity.X, (float)entity.Y, (float)entity.Z);
                }
    
                // if the token is null, it means there are no more segments left to query
                token = queryResult.ContinuationToken;
            }
    
            while (token != null);
        }
    
  9. En dehors de la classe TableToScene , vous devez définir la classe utilisée par l’application pour sérialiser et désérialiser les entités de table.Outside the TableToScene class, you need to define the class used by the application to serialize and deserialize the Table Entities.

        /// <summary>
        /// This objects is used to serialize and deserialize the Azure Table Entity
        /// </summary>
        [System.Serializable]
        public class AzureTableEntity : TableEntity
        {
            public AzureTableEntity(string partitionKey, string rowKey)
                : base(partitionKey, rowKey) { }
    
            public AzureTableEntity() { }
            public string Type { get; set; }
            public double X { get; set; }
            public double Y { get; set; }
            public double Z { get; set; }
        }
    
  10. Veillez à Enregistrer avant de revenir à l’éditeur Unity.Make sure you Save before going back to the Unity Editor.

  11. Cliquez sur la caméra principale dans le volet de la hiérarchie , afin que ses propriétés s’affichent dans l' inspecteur.Click the Main Camera from the Hierarchy panel, so that its properties appear in the Inspector.

  12. Le dossier scripts étant ouvert, sélectionnez le fichier de script TableToScene et faites-le glisser sur l' appareil photo principal.With the Scripts folder open, select the script TableToScene file and drag it onto the Main Camera. Le résultat doit se présenter comme suit :The result should be as below:

    Ajouter un script à l’appareil photo principal

Chapitre 10-créer la classe CloudScene dans le projet Unity de bureauChapter 10 - Create the CloudScene class in the Desktop Unity Project

Le deuxième script que vous devez créer est CloudScene, qui est responsable des opérations suivantes :The second script you need to create is CloudScene, which is responsible for:

  • Inscription de l’événement de clic gauche pour permettre à l’utilisateur de faire glisser des objets autour de la scène.Registering the left-click event, to allow the user to drag objects around the scene.

  • Sérialisation des données d’objet à partir de cette scène Unity et envoi de celles-ci au Function App Azure.Serializing the object data from this Unity scene, and sending it to the Azure Function App.

Pour créer le deuxième script :To create the second script:

  1. Cliquez avec le bouton droit dans le dossier scripts , cliquez sur créer, puis sur # script C.Right-click inside the Scripts folder, click Create, C# Script. Nommez le script CloudSceneName the script CloudScene

    nouveau script c#-  Renommer CloudScenenew c# script rename CloudScene

  2. Ajoutez les espaces de noms suivants :Add the following namespaces:

    using Newtonsoft.Json;
    using System.Collections;
    using System.Text;
    using System.Threading.Tasks;
    using UnityEngine;
    using UnityEngine.Networking;
    
  3. Insérez les variables suivantes :Insert the following variables:

        /// <summary>
        /// Allows this class to behave like a singleton
        /// </summary>
        public static CloudScene instance;
    
        /// <summary>
        /// Insert here you Azure Function Url
        /// </summary>
        private string azureFunctionEndpoint = "--Insert here you Azure Function Endpoint--";
    
        /// <summary>
        /// Flag for object being moved
        /// </summary>
        private bool gameObjHasMoved;
    
        /// <summary>
        /// Transform of the object being dragged by the mouse
        /// </summary>
        private Transform gameObjHeld;
    
        /// <summary>
        /// Class hosted in the TableToScene script
        /// </summary>
        private AzureTableEntity azureTableEntity;
    
  4. Remplacez la valeur azureFunctionEndpoint par votre URL Azure Function App trouvée dans le Service Azure Function App, dans le portail Azure, comme indiqué dans l’image ci-dessous :Substitute the azureFunctionEndpoint value with your Azure Function App URL found in the Azure Function App Service, in the Azure Portal, as shown in the image below:

    Obtient l’URL de la fonction

  5. Ajoutez maintenant les méthodes Start () et éveillé () pour initialiser la classe.Now add the Start() and Awake() methods to initialize the class.

        /// <summary>
        /// Triggers before initialization
        /// </summary>
        void Awake()
        {
            // static instance of this class
            instance = this;
        }
    
        /// <summary>
        /// Use this for initialization
        /// </summary>
        void Start()
        {
            // initialise an AzureTableEntity
            azureTableEntity = new AzureTableEntity();
        }
    
  6. Dans la méthode Update () , ajoutez le code suivant qui détecte l’entrée de la souris et glissent, ce qui déplace à son tour GameObjects dans la scène.Within the Update() method, add the following code that will detect the mouse input and drag, which will in turn move GameObjects in the scene. Si l’utilisateur a glissé et supprimé un objet, il passe le nom et les coordonnées de l’objet à la méthode UpdateCloudScene (), qui appelle le service Azure Function App, qui met à jour la table Azure et déclenche la notification.If the user has dragged and dropped an object, it will pass the name and coordinates of the object to the method UpdateCloudScene(), which will call the Azure Function App service, which will update the Azure table and trigger the notification.

        /// <summary>
        /// Update is called once per frame
        /// </summary>
        void Update()
        {
            //Enable Drag if button is held down
            if (Input.GetMouseButton(0))
            {
                // Get the mouse position
                Vector3 mousePosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10);
    
                Vector3 objPos = Camera.main.ScreenToWorldPoint(mousePosition);
    
                Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    
                RaycastHit hit;
    
                // Raycast from the current mouse position to the object overlapped by the mouse
                if (Physics.Raycast(ray, out hit))
                {
                    // update the position of the object "hit" by the mouse
                    hit.transform.position = objPos;
    
                    gameObjHasMoved = true;
    
                    gameObjHeld = hit.transform;
                }
            }
    
            // check if the left button mouse is released while holding an object
            if (Input.GetMouseButtonUp(0) && gameObjHasMoved)
            {
                gameObjHasMoved = false;
    
                // Call the Azure Function that will update the appropriate Entity in the Azure Table
                // and send a Notification to all subscribed Apps
                Debug.Log("Calling Azure Function");
    
                StartCoroutine(UpdateCloudScene(gameObjHeld.name, gameObjHeld.position.x, gameObjHeld.position.y, gameObjHeld.position.z));
            }
        }
    
  7. Ajoutez maintenant la méthode UpdateCloudScene () , comme indiqué ci-dessous :Now add the UpdateCloudScene() method, as below:

        private IEnumerator UpdateCloudScene(string objName, double xPos, double yPos, double zPos)
        {
            WWWForm form = new WWWForm();
    
            // set the properties of the AzureTableEntity
            azureTableEntity.RowKey = objName;
    
            azureTableEntity.X = xPos;
    
            azureTableEntity.Y = yPos;
    
            azureTableEntity.Z = zPos;
    
            // Serialize the AzureTableEntity object to be sent to Azure
            string jsonObject = JsonConvert.SerializeObject(azureTableEntity);
    
            using (UnityWebRequest www = UnityWebRequest.Post(azureFunctionEndpoint, jsonObject))
            {
                byte[] jsonToSend = new System.Text.UTF8Encoding().GetBytes(jsonObject);
    
                www.uploadHandler = new UploadHandlerRaw(jsonToSend);
    
                www.uploadHandler.contentType = "application/json";
    
                www.downloadHandler = new DownloadHandlerBuffer();
    
                www.SetRequestHeader("Content-Type", "application/json");
    
                yield return www.SendWebRequest();
    
                string response = www.responseCode.ToString();
            }
        }
    
  8. Enregistrer le code et revenir à UnitySave the code and return to Unity

  9. Faites glisser le script CloudScene sur l' appareil photo principal.Drag the CloudScene script onto the Main Camera.

    1. Cliquez sur la caméra principale dans le volet de la hiérarchie , afin que ses propriétés s’affichent dans l' inspecteur.Click the Main Camera from the Hierarchy panel, so that its properties appear in the Inspector.

    2. Le dossier scripts étant ouvert, sélectionnez le script CloudScene et faites-le glisser sur l' appareil photo principal.With the Scripts folder open, select the CloudScene script and drag it onto the Main Camera. Le résultat doit se présenter comme suit :The result should be as below:

      faire glisser le script Cloud sur l’appareil photo principal

Chapitre 11-créer le projet de bureau dans UWPChapter 11 - Build the Desktop Project to UWP

Tout ce qui est nécessaire pour la section Unity de ce projet est maintenant terminé.Everything needed for the Unity section of this project has now been completed.

  1. Accédez à paramètres de build (paramètres de génération de fichier > ).Navigate to Build Settings (File > Build Settings).

  2. Dans la fenêtre paramètres de build , cliquez sur générer.From the Build Settings window, click Build.

    générer le projet

  3. Une fenêtre de l' Explorateur de fichiers s’affiche et vous invite à entrer un emplacement à générer.A File Explorer window will popup, prompting you for a location to Build. Créez un nouveau dossier (en cliquant sur nouveau dossier dans l’angle supérieur gauche), puis nommez-le Builds.Create a new folder (by clicking New Folder in the top-left corner), and name it BUILDS.

    nouveau dossier pour la Build

    1. Ouvrez le nouveau dossier Builds , puis créez un autre dossier (à l’aide d’un nouveau dossier ) et nommez-le NH _ _.Open the new BUILDS folder, and create another folder (using New Folder once more), and name it NH_Desktop_App.

      nom du dossier NH_Desktop_App

    2. Avec l' _ _ application de bureau NH sélectionnée.With the NH_Desktop_App selected. Cliquez sur Sélectionner un dossier.click Select Folder. La génération du projet prendra quelques minutes.The project will take a minute or so to build.

  4. Après la génération, l' Explorateur de fichiers s’affiche et vous indique l’emplacement de votre nouveau projet.Following build, File Explorer will appear showing you the location of your new project. Toutefois, il n’est pas nécessaire de l’ouvrir, car vous devez d’abord créer l’autre projet Unity, dans les chapitres suivants.No need to open it, though, as you need to create the other Unity project first, in the next few Chapters.

Chapitre 12-configurer un projet Unity de réalité mixteChapter 12 - Set up Mixed Reality Unity Project

Ce qui suit est une configuration classique pour le développement avec la réalité mixte, et, par conséquent, est un bon modèle pour d’autres projets.The following is a typical set up for developing with the mixed reality, and as such, is a good template for other projects.

  1. Ouvrez Unity et cliquez sur nouveau.Open Unity and click New.

    nouveau projet Unity

  2. Vous devez maintenant fournir un nom de projet Unity, insérer UnityMRNotifHub.You will now need to provide a Unity Project name, insert UnityMRNotifHub. Assurez-vous que le type de projet est défini sur 3D.Make sure the project type is set to 3D. Définissez l' emplacement approprié pour vous (n’oubliez pas que les répertoires racine sont mieux adaptés).Set the Location to somewhere appropriate for you (remember, closer to root directories is better). Ensuite, cliquez sur créer un projet.Then, click Create project.

    nom UnityMRNotifHub

  3. Si Unity est ouvert, il est conseillé de vérifier que l' éditeur de script par défaut est défini sur Visual Studio.With Unity open, it is worth checking the default Script Editor is set to Visual Studio. Accédez à modifier > les Préférences , puis à partir de la nouvelle fenêtre, accédez à outils externes.Go to Edit > Preferences and then from the new window, navigate to External Tools. Remplacez l' éditeur de script externe par Visual Studio 2017.Change External Script Editor to Visual Studio 2017. Fermez la fenêtre Préférences .Close the Preferences window.

    définir l’éditeur externe sur VS

  4. Ensuite, accédez à fichier > paramètres de build et basculez la plateforme sur plateforme Windows universelle, en cliquant sur le bouton changer de plateforme .Next, go to File > Build Settings and switch the platform to Universal Windows Platform, by clicking on the Switch Platform button.

    basculer les plateformes sur UWP

  5. Accédez à fichier > paramètres de build et assurez-vous que :Go to File > Build Settings and make sure that:

    1. L' appareil cible est défini sur n’importe quel appareilTarget Device is set to Any Device

      Pour Microsoft HoloLens, définissez appareil cible sur HoloLens.For the Microsoft HoloLens, set Target Device to HoloLens.

    2. Le type de build est D3DBuild Type is set to D3D

    3. Le SDK est configuré sur le dernier installéSDK is set to Latest installed

    4. Version de Visual Studio définie sur le dernier installéVisual Studio Version is set to Latest installed

    5. La génération et l’exécution sont définies sur l' ordinateur localBuild and Run is set to Local Machine

    6. Dans ce cas, il convient d’enregistrer la scène et de l’ajouter à la Build.While here, it is worth saving the scene, and adding it to the build.

      1. Pour ce faire, sélectionnez Ajouter des scènes ouvertes.Do this by selecting Add Open Scenes. Une fenêtre d’enregistrement s’affiche.A save window will appear.

        Ajouter des scènes ouvertes

      2. Créez un dossier pour cela, ainsi que toute nouvelle scène, puis sélectionnez le bouton nouveau dossier pour créer un nouveau dossier, puis nommez-le scenes.Create a new folder for this, and any future, scene, then select the New folder button, to create a new folder, name it Scenes.

        nouveau dossier scenes

      3. Ouvrez le dossier scenes nouvellement créé, puis dans le champ nom de fichier : texte, tapez _ NH Mr _ Scene, puis cliquez sur Enregistrer.Open your newly created Scenes folder, and then in the File name: text field, type NH_MR_Scene, then press Save.

        nouvelle scène-NH_MR_Scene

    7. Les paramètres restants, dans paramètres de build, doivent être laissés par défaut pour le moment.The remaining settings, in Build Settings, should be left as default for now.

  6. Dans la même fenêtre, cliquez sur le bouton paramètres du lecteur pour ouvrir le panneau correspondant dans l’espace où se trouve l' inspecteur .In the same window click on the Player Settings button, this will open the related panel in the space where the Inspector is located.

    ouvrir les paramètres du lecteur

  7. Dans ce volet, quelques paramètres doivent être vérifiés :In this panel, a few settings need to be verified:

    1. Sous l’onglet autres paramètres :In the Other Settings tab:

      1. La version du runtime de script doit être expérimentale (équivalent .net 4,6)Scripting Runtime Version should be Experimental (.NET 4.6 Equivalent)

      2. Le backend de script doit être *.net Scripting Backend should be **.NET_* _

      3. _ Le niveau de compatibilité de l’API * doit être .net 4,6_ API Compatibility Level* should be .NET 4.6

        compatibilité des API

    2. Plus bas dans le panneau, dans les paramètres XR (situés sous paramètres de publication), cochez la réalité virtuelle prise en charge, assurez-vous que le Kit de développement logiciel (SDK) Windows Mixed Reality est ajoutéFurther down the panel, in XR Settings (found below Publish Settings), tick Virtual Reality Supported, make sure the Windows Mixed Reality SDK is added

      mettre à jour les paramètres XR

    3. Sous l’onglet paramètres de publication , sous fonctionnalités, conversez-le :Within the Publishing Settings tab, under Capabilities, heck:

      • InternetClientInternetClient

        client Internet Tick

  8. De retour dans les paramètres de build, les projets Unity C# ne sont plus grisés : cochez la case en regard de cette option.Back in Build Settings, Unity C# Projects is no longer greyed out: tick the checkbox next to this.

  9. Une fois ces modifications effectuées, fermez la fenêtre Paramètres de Build.With these changes done, close the Build Settings window.

  10. Enregistrez votre scène et votre fichier projet > enregistrer la scène/fichier > enregistrer le projet.Save your Scene and Project File > Save Scene / File > Save Project.

    Important

    Si vous souhaitez ignorer le composant Unity Set up pour ce projet (application de réalité mixte) et continuer directement dans le code, n’hésitez pas à Télécharger ce fichier. pour Unity, à l’importer dans votre projet en tant que package personnalisé, puis à continuer à partir du chapitre 14.If you wish to skip the Unity Set up component for this project (mixed reality App), and continue straight into code, feel free to download this .unitypackage, import it into your project as a Custom Package, and then continue from Chapter 14. Vous devrez toujours ajouter les composants script.You will still need to add the script components.

Chapitre 13-importation des dll dans le projet Unity de réalité mixteChapter 13 - Importing the DLLs in the Mixed Reality Unity Project

Vous allez utiliser le stockage Azure pour la bibliothèque Unity (qui utilise le kit de développement logiciel (SDK) .net pour Azure).You will be using Azure Storage for Unity library (which uses the .Net SDK for Azure). Pour plus d' informations sur l’utilisation du stockage Azure avec Unity, suivez ce lien.Please follow this link on how to use Azure Storage with Unity. Il existe actuellement un problème connu dans Unity qui nécessite que les plug-ins soient reconfigurés après l’importation.There is currently a known issue in Unity which requires plugins to be reconfigured after import. Ces étapes (4-7 dans cette section) ne sont plus nécessaires une fois que le bogue a été résolu.These steps (4 - 7 in this section) will no longer be required after the bug has been resolved.

Pour importer le kit de développement logiciel (SDK) dans votre propre projet, assurez-vous d’avoir téléchargé la dernière version de . pour Unity.To import the SDK into your own project, make sure you have downloaded the latest .unitypackage. Ensuite, procédez comme suit :Then, do the following:

  1. Ajoutez le fichier. pour Unity que vous avez téléchargé à partir de la version ci -dessus, à Unity à l’aide de l’option de > > menu package personnalisé du package d’importation de ressources.Add the .unitypackage you downloaded from the above, to Unity by using the Assets > Import Package > Custom Package menu option.

  2. Dans la zone importer le package Unity qui s’affiche, vous pouvez tout sélectionner sous stockage du plug-in > .In the Import Unity Package box that pops up, you can select everything under Plugin > Storage.

    importer un package

  3. Cliquez sur le bouton Importer pour ajouter les éléments à votre projet.Click the Import button to add the items to your project.

  4. Accédez au dossier stockage sous plug-ins dans la vue projet et sélectionnez les plug-ins suivants uniquement:Go to the Storage folder under Plugins in the Project view and select the following plugins only:

    • Microsoft.Data.EdmMicrosoft.Data.Edm
    • Microsoft.Data.ODataMicrosoft.Data.OData
    • Microsoft.WindowsAzure.StorageMicrosoft.WindowsAzure.Storage
    • Newtonsoft.JsonNewtonsoft.Json
    • System.SpatialSystem.Spatial

    sélectionner les plug-ins

  5. Une fois ces plug-ins spécifiques sélectionnés, décochez toutes les plateformes et décochez WSAPlayer , puis cliquez sur appliquer.With these specific plugins selected, uncheck Any Platform and uncheck WSAPlayer then click Apply.

    appliquer les modifications de la plateforme

    Notes

    Vous marquez ces plug-ins particuliers à utiliser uniquement dans l’éditeur Unity.You are marking these particular plugins to only be used in the Unity Editor. Cela est dû au fait qu’il existe différentes versions des mêmes plug-ins dans le dossier WSA qui seront utilisées après l’exportation du projet à partir d’Unity.This is because there are different versions of the same plugins in the WSA folder that will be used after the project is exported from Unity.

  6. Dans le dossier de plug-in de stockage , sélectionnez uniquement :In the Storage plugin folder, select only:

    • Microsoft.Data.Services.ClientMicrosoft.Data.Services.Client

      sélectionner le client des services de données

  7. Cochez la case ne pas traiter sous paramètres de plateforme , puis cliquez sur appliquer.Check the Don't Process box under Platform Settings and click Apply.

    ne pas traiter

    Notes

    Vous marquez ce plug-in « ne pas traiter », car l’assembly Unity Patcher a des difficultés à traiter ce plug-in.You are marking this plugin "Don't process" because the Unity assembly patcher has difficulty processing this plugin. Le plug-in fonctionne toujours même s’il n’est pas traité.The plugin will still work even though it isn't processed.

Chapitre 14-création de la classe TableToScene dans le projet Unity de réalité mixteChapter 14 - Creating the TableToScene class in the mixed reality Unity project

La classe TableToScene est identique à celle expliquée dans le chapitre 9.The TableToScene class is identical to the one explained in Chapter 9. Créez la même classe dans le projet Unity de réalité mixte en suivant la même procédure que celle décrite dans le chapitre 9.Create the same class in the mixed reality Unity Project following the same procedure explained in Chapter 9.

Une fois que vous aurez terminé ce chapitre, cette classe sera configurée sur l’appareil photo de vos projets Unity .Once you have completed this Chapter, both of your Unity Projects will have this class set up on the Main Camera.

Chapitre 15-création de la classe NotificationReceiver dans le projet Unity de réalité mixteChapter 15 - Creating the NotificationReceiver class in the Mixed Reality Unity Project

Le deuxième script que vous devez créer est NotificationReceiver, qui est responsable des opérations suivantes :The second script you need to create is NotificationReceiver, which is responsible for:

  • Inscription de l’application auprès du Hub de notification lors de l’initialisation.Registering the app with the Notification Hub at initialization.
  • Écoute des notifications provenant du Hub de notification.Listening to notifications coming from the Notification Hub.
  • Désérialisation des données d’objet à partir des notifications reçues.Deserializing the object data from received notifications.
  • Déplacez le GameObjects dans la scène, en fonction des données désérialisées.Move the GameObjects in the scene, based on the deserialized data.

Pour créer le script NotificationReceiver :To create the NotificationReceiver script:

  1. Cliquez avec le bouton droit dans le dossier scripts , cliquez sur créer, puis sur # script C.Right-click inside the Scripts folder, click Create, C# Script. Nommez le script NotificationReceiver.Name the script NotificationReceiver.

    créer un nouveau nom de script c#  NotificationReceivercreate new c# script name it NotificationReceiver

  2. Double-cliquez sur le script pour l’ouvrir.Double click on the script to open it.

  3. Ajoutez les espaces de noms suivants :Add the following namespaces:

    //using Microsoft.WindowsAzure.Messaging;
    using Newtonsoft.Json;
    using System;
    using System.Collections;
    using UnityEngine;
    
    #if UNITY_WSA_10_0 && !UNITY_EDITOR
    using Windows.Networking.PushNotifications;
    #endif
    
  4. Insérez les variables suivantes :Insert the following variables:

        /// <summary>
        /// allows this class to behave like a singleton
        /// </summary>
        public static NotificationReceiver instance;
    
        /// <summary>
        /// Value set by the notification, new object position
        /// </summary>
        Vector3 newObjPosition;
    
        /// <summary>
        /// Value set by the notification, object name
        /// </summary>
        string gameObjectName;
    
        /// <summary>
        /// Value set by the notification, new object position
        /// </summary>
        bool notifReceived;
    
        /// <summary>
        /// Insert here your Notification Hub Service name 
        /// </summary>
        private string hubName = " -- Insert the name of your service -- ";
    
        /// <summary>
        /// Insert here your Notification Hub Service "Listen endpoint"
        /// </summary>
        private string hubListenEndpoint = "-Insert your Notification Hub Service Listen endpoint-";
    
  5. Remplacez la valeur hubName par le nom de votre service de hub de notification et la valeur de hubListenEndpoint par la valeur de point de terminaison de l’onglet stratégies d’accès, service Azure notification Hub, dans le portail Azure (Voir l’image ci-dessous).Substitute the hubName value with your Notification Hub Service name, and hubListenEndpoint value with the endpoint value found in the Access Policies tab, Azure Notification Hub Service, in the Azure Portal (see image below).

    Insérer un point de terminaison de stratégie notification hubs

  6. Ajoutez maintenant les méthodes Start () et éveillé () pour initialiser la classe.Now add the Start() and Awake() methods to initialize the class.

        /// <summary>
        /// Triggers before initialization
        /// </summary>
        void Awake()
        {
            // static instance of this class
            instance = this;
        }
    
        /// <summary>
        /// Use this for initialization
        /// </summary>
        void Start()
        {
            // Register the App at launch
            InitNotificationsAsync();
    
            // Begin listening for notifications
            StartCoroutine(WaitForNotification());
        }
    
  7. Ajoutez la méthode WaitForNotification pour permettre à l’application de recevoir des notifications de la bibliothèque du Hub de notification sans entrer en conflit avec le thread principal :Add the WaitForNotification method to allow the app to receive notifications from the Notification Hub Library without clashing with the Main Thread:

        /// <summary>
        /// This notification listener is necessary to avoid clashes 
        /// between the notification hub and the main thread   
        /// </summary>
        private IEnumerator WaitForNotification()
        {
            while (true)
            {
                // Checks for notifications each second
                yield return new WaitForSeconds(1f);
    
                if (notifReceived)
                {
                    // If a notification is arrived, moved the appropriate object to the new position
                    GameObject.Find(gameObjectName).transform.position = newObjPosition;
    
                    // Reset the flag
                    notifReceived = false;
                }
            }
        }
    
  8. La méthode suivante, InitNotificationAsync (), inscrit l’application auprès du service de notification Hub lors de l’initialisation.The following method, InitNotificationAsync(), will register the application with the notification Hub Service at initialization. Le code est commenté, car Unity ne sera pas en mesure de générer le projet.The code is commented out as Unity will not be able to Build the project. Vous allez supprimer les commentaires lorsque vous importez le package NuGet Azure Messaging dans Visual Studio.You will remove the comments when you import the Azure Messaging Nuget package in Visual Studio.

        /// <summary>
        /// Register this application to the Notification Hub Service
        /// </summary>
        private async void InitNotificationsAsync()
        {
            // PushNotificationChannel channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
    
            // NotificationHub hub = new NotificationHub(hubName, hubListenEndpoint);
    
            // Registration result = await hub.RegisterNativeAsync(channel.Uri);
    
            // If registration was successful, subscribe to Push Notifications
            // if (result.RegistrationId != null)
            // {
            //     Debug.Log($"Registration Successful: {result.RegistrationId}");
            //     channel.PushNotificationReceived += Channel_PushNotificationReceived;
            // }
        }
    
  9. Le gestionnaire suivant, Channel _ PushNotificationReceived (), est déclenché chaque fois qu’une notification est reçue.The following handler, Channel_PushNotificationReceived(), will be triggered every time a notification is received. Elle désérialisera la notification, qui sera l’entité de table Azure qui a été déplacée sur l’application de bureau, puis déplace le GameObject correspondant dans la scène MR vers la même position.It will deserialize the notification, which will be the Azure Table Entity that has been moved on the Desktop Application, and then move the corresponding GameObject in the MR scene to the same position.

    Important

    Le code est mis en commentaire, car le code fait référence à la bibliothèque de messagerie Azure, que vous ajouterez après avoir créé le projet Unity à l’aide du gestionnaire de package NuGet, dans Visual Studio.The code is commented out because the code references the Azure Messaging library, which you will add after building the Unity project using the Nuget Package Manager, within Visual Studio. Par conséquent, le projet Unity ne sera pas en mesure de générer, sauf s’il est mis en commentaire. N’oubliez pas que si vous générez votre projet et que vous souhaitez ensuite revenir à Unity, vous devez ajouter un nouveau commentaire à ce code.As such, the Unity project will not be able to build, unless it is commented out. Be aware, that should you build your project, and then wish to return to Unity, you will need to re-comment that code.

        ///// <summary>
        ///// Handler called when a Push Notification is received
        ///// </summary>
        //private void Channel_PushNotificationReceived(PushNotificationChannel sender, PushNotificationReceivedEventArgs args)    
        //{
        //    Debug.Log("New Push Notification Received");
        //
        //    if (args.NotificationType == PushNotificationType.Raw)
        //    {
        //        //  Raw content of the Notification
        //        string jsonContent = args.RawNotification.Content;
        //
        //        // Deserialise the Raw content into an AzureTableEntity object
        //        AzureTableEntity ate = JsonConvert.DeserializeObject<AzureTableEntity>(jsonContent);
        //
        //        // The name of the Game Object to be moved
        //        gameObjectName = ate.RowKey;          
        //
        //        // The position where the Game Object has to be moved
        //        newObjPosition = new Vector3((float)ate.X, (float)ate.Y, (float)ate.Z);
        //
        //        // Flag thats a notification has been received
        //        notifReceived = true;
        //    }
        //}
    
  10. N’oubliez pas d’enregistrer vos modifications avant de revenir à l’éditeur Unity.Remember to save your changes before going back to the Unity Editor.

  11. Cliquez sur la caméra principale dans le volet de la hiérarchie , afin que ses propriétés s’affichent dans l' inspecteur.Click the Main Camera from the Hierarchy panel, so that its properties appear in the Inspector.

  12. Le dossier scripts étant ouvert, sélectionnez le script NotificationReceiver et faites-le glisser sur l' appareil photo principal.With the Scripts folder open, select the NotificationReceiver script and drag it onto the Main Camera. Le résultat doit se présenter comme suit :The result should be as below:

    faire glisser le script du récepteur de notification vers l’appareil photo

    Notes

    Si vous développez cela pour Microsoft HoloLens, vous devez mettre à jour le composant camera de l' appareil photo principal, afin que :If you are developing this for the Microsoft HoloLens, you will need to update the Main Camera's Camera component, so that:

    • Indicateurs d’effacement : couleur unieClear Flags: Solid Color
    • Arrière-plan : NoirBackground: Black

Chapitre 16 : créer le projet de réalité mixte sur UWPChapter 16 - Build the Mixed Reality Project to UWP

Ce chapitre est identique au processus de génération pour le projet précédent.This Chapter is identical to build process for the previous project. Tout ce qui est nécessaire pour la section Unity de ce projet est maintenant terminé. il est donc temps de la générer à partir d’Unity.Everything needed for the Unity section of this project has now been completed, so it is time to build it from Unity.

  1. Accédez à paramètres de build (paramètres de génération de fichier > ).Navigate to Build Settings ( File > Build Settings ).

  2. Dans le menu des paramètres de génération , vérifiez que l’option projets Unity C# _ est cochée (ce qui vous permettra de modifier les scripts de ce projet, après la génération).From the Build Settings menu, ensure Unity C# Projects _ is ticked (which will allow you to edit the scripts in this project, after build).

  3. Une fois cette opération terminée, cliquez sur _ * Build * *.After this is done, click _*Build**.

    générer le projet

  4. Une fenêtre de l' Explorateur de fichiers s’affiche et vous invite à entrer un emplacement à générer.A File Explorer window will popup, prompting you for a location to Build. Créez un nouveau dossier (en cliquant sur nouveau dossier dans l’angle supérieur gauche), puis nommez-le Builds.Create a new folder (by clicking New Folder in the top-left corner), and name it BUILDS.

    créer un dossier Builds

    1. Ouvrez le nouveau dossier Builds , puis créez un autre dossier (à l’aide d’un nouveau dossier ) et nommez-le NH _ m _ application.Open the new BUILDS folder, and create another folder (using New Folder once more), and name it NH_MR_App.

      créer un dossier NH_MR_Apps

    2. L' application NH _ Mr _ est sélectionnée.With the NH_MR_App selected. Cliquez sur Sélectionner un dossier.click Select Folder. La génération du projet prendra quelques minutes.The project will take a minute or so to build.

  5. Après la génération, une fenêtre de l' Explorateur de fichiers s’ouvre à l’emplacement de votre nouveau projet.Following the build, a File Explorer window will open at the location of your new project.

Chapitre 17-ajouter des packages NuGet à la solution UnityMRNotifHubChapter 17 - Add NuGet packages to the UnityMRNotifHub Solution

Avertissement

N’oubliez pas que, une fois que vous ajoutez les packages NuGet suivants (et que vous supprimez les marques de commentaire du code dans le chapitresuivant), le code, lorsqu’il est rouvert dans le projet Unity, présente des erreurs.Please remember that, once you add the following NuGet Packages (and uncomment the code in the next Chapter), the Code, when reopened within the Unity Project, will present errors. Si vous souhaitez revenir en arrière et poursuivre la modification dans l’éditeur Unity, vous avez besoin d’un commentaire qui errosome le code, puis de supprimer les marques de commentaire ultérieurement, une fois que vous êtes à nouveau dans Visual Studio.If you wish to go back and continue editing in the Unity Editor, you will need comment that errosome code, and then uncomment again later, once you are back in Visual Studio.

Une fois la génération de la réalité mixte terminée, accédez au projet de réalité mixte que vous avez créé, puis double-cliquez sur le fichier de solution (. sln) dans ce dossier pour ouvrir votre solution avec Visual Studio 2017.Once the mixed reality build has been completed, navigate to the mixed reality project, which you built, and double click on the solution (.sln) file within that folder, to open your solution with Visual Studio 2017. Vous devez maintenant ajouter le package NuGet WindowsAzure. Messaging. Managed . Il s’agit d’une bibliothèque qui est utilisée pour recevoir des notifications du Hub de notification.You will now need to add the WindowsAzure.Messaging.managed NuGet package; this is a library that is used to receive Notifications from the Notification Hub.

Pour importer le package NuGet :To import the NuGet package:

  1. Dans le Explorateur de solutions, cliquez avec le bouton droit sur votre solutionIn the Solution Explorer, right click on your Solution

  2. Cliquez sur gérer les packages NuGet.Click on Manage NuGet Packages.

    Ouvrez le gestionnaire NuGet

  3. Sélectionnez l' *onglet Parcourir_ et recherchez * WindowsAzure. Messaging. Managed**.Select the *Browse tab and search for _* WindowsAzure.Messaging.managed**.

    Rechercher le package de messagerie Windows Azure

  4. Sélectionnez le résultat (comme indiqué ci-dessous) et, dans la fenêtre de droite, activez la case à cocher en regard de projet.Select the result (as shown below), and in the window to the right, select the checkbox next to Project. Une coche s’affiche dans la case à côté de projet, avec la case à cocher en regard du projet assembly-CSharp et UnityMRNotifHub .This will place a tick in the checkbox next to Project, along with the checkbox next to the Assembly-CSharp and UnityMRNotifHub project.

    cocher tous les projets

  5. La version initialement fournie n’est peut-être pas compatible avec ce projet.The version initially provided may not be compatible with this project. Par conséquent, cliquez sur le menu déroulant en regard de version, puis cliquez sur version 0.1.7.9, puis sur installer.Therefore, click on the dropdown menu next to Version, and click Version 0.1.7.9, then click Install.

  6. Vous avez maintenant terminé l’installation du package NuGet.You have now finished installing the NuGet package. Recherchez le code commenté que vous avez entré dans la classe NotificationReceiver et supprimez les commentaires.Find the commented code you entered in the NotificationReceiver class and remove the comments..

Chapitre 18-modifier l’application UnityMRNotifHub, classe NotificationReceiverChapter 18 - Edit UnityMRNotifHub application, NotificationReceiver class

Après avoir ajouté les packages NuGet, vous devez supprimer les marques de commentaire d’une partie du code dans la classe NotificationReceiver .Following having added the NuGet Packages, you will need to uncomment some of the code within the NotificationReceiver class.

notamment :This includes:

  1. Espace de noms en haut :The namespace at the top:

    using Microsoft.WindowsAzure.Messaging;
    
  2. Tout le code dans la méthode InitNotificationsAsync () :All the code within the InitNotificationsAsync() method:

        /// <summary>
        /// Register this application to the Notification Hub Service
        /// </summary>
        private async void InitNotificationsAsync()
        {
            PushNotificationChannel channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
    
            NotificationHub hub = new NotificationHub(hubName, hubListenEndpoint);
    
            Registration result = await hub.RegisterNativeAsync(channel.Uri);
    
            // If registration was successful, subscribe to Push Notifications
            if (result.RegistrationId != null)
            {
                Debug.Log($"Registration Successful: {result.RegistrationId}");
                channel.PushNotificationReceived += Channel_PushNotificationReceived;
            }
        }
    

Avertissement

Le code ci-dessus contient un commentaire : Assurez-vous que vous n’avez pas accidentellement supprimé le commentaire de ce commentaire (car le code ne se compilera pas si vous en avez !).The code above has a comment in it: ensure that you have not accidentally uncommented that comment (as the code will not compile if you have!).

  1. Enfin, l’événement Channel_PushNotificationReceived :And, lastly, the Channel_PushNotificationReceived event:

        /// <summary>
        /// Handler called when a Push Notification is received
        /// </summary>
        private void Channel_PushNotificationReceived(PushNotificationChannel sender, PushNotificationReceivedEventArgs args)
        {
            Debug.Log("New Push Notification Received");
    
            if (args.NotificationType == PushNotificationType.Raw)
            {
                //  Raw content of the Notification
                string jsonContent = args.RawNotification.Content;
    
                // Deserialize the Raw content into an AzureTableEntity object
                AzureTableEntity ate = JsonConvert.DeserializeObject<AzureTableEntity>(jsonContent);
    
                // The name of the Game Object to be moved
                gameObjectName = ate.RowKey;
    
                // The position where the Game Object has to be moved
                newObjPosition = new Vector3((float)ate.X, (float)ate.Y, (float)ate.Z);
    
                // Flag thats a notification has been received
                notifReceived = true;
            }
        }
    

Avec ces commentaires, veillez à enregistrer, puis passez au chapitre suivant.With these uncommented, ensure that you save, and then proceed to the next Chapter.

Chapitre 19-associer le projet de réalité mixte à l’application du Windows StoreChapter 19 - Associate the mixed reality project to the Store app

Vous devez maintenant associer le projet de réalité mixte à l’application du Windows Store que vous avez créée dans au début du laboratoire.You now need to associate the mixed reality project to the Store App you created in at the start of the lab.

  1. Ouvrez la solution.Open the solution.

  2. Cliquez avec le bouton droit sur le projet d’application UWP dans le panneau Explorateur de solutions, accédez à Store et associez l’application au Store....Right click on the UWP app Project in the Solution Explorer panel, the go to Store, and Associate App with the Store....

    ouvrir l’Association de magasins

  3. Une nouvelle fenêtre s’affiche, appelée associer votre application au Windows Store.A new window will appear called Associate Your App with the Windows Store. Cliquez sur Suivant.Click Next.

    accéder à l’écran suivant

  4. Il charge toutes les applications associées au compte que vous avez connecté.It will load up all the Applications associated with the Account which you have logged in. Si vous n’êtes pas connecté à votre compte, vous pouvez vous connecter à cette page.If you are not logged in to your account, you can Log In on this page.

  5. Recherchez le nom de l’application Windows Store que vous avez créé au début de ce didacticiel et sélectionnez-le.Find the Store App name that you created at the start of this tutorial and select it. Cliquez ensuite sur Suivant.Then click Next.

    Recherchez et sélectionnez le nom de votre boutique

  6. Cliquez sur Associer.Click Associate.

    associer l’application

  7. Votre application est maintenant associée à l’application du Windows Store.Your App is now Associated with the Store App. Cela est nécessaire pour activer les notifications.This is necessary for enabling Notifications.

Chapitre 20 : déployer des applications UnityMRNotifHub et UnityDesktopNotifHubChapter 20 - Deploy UnityMRNotifHub and UnityDesktopNotifHub applications

Ce chapitre peut être plus facile avec deux personnes, car le résultat inclut les applications en cours d’exécution, l’une s’exécutant sur le Bureau de votre ordinateur et l’autre au sein de votre casque immersif.This Chapter may be easier with two people, as the result will include both apps running, one running on your computer Desktop, and the other within your immersive headset.

L’application de casque immersif attend de recevoir les modifications apportées à la scène (modifications de position du GameObjects local) et l’application de bureau apporte des modifications à leur scène locale (modifications de position), qui sont partagées avec l’application RM.The immersive headset app is waiting to receive changes to the scene (position changes of the local GameObjects), and the Desktop app will be making changes to their local scene (position changes), which will be shared to the MR app. Il est logique de déployer l’application RM en premier, puis l’application de bureau, afin que le récepteur puisse commencer à écouter.It makes sense to deploy the MR app first, followed by the Desktop app, so that the receiver can begin listening.

Pour déployer l’application UnityMRNotifHub sur votre ordinateur local :To deploy the UnityMRNotifHub app on your Local Machine:

  1. Ouvrez le fichier solution de votre application UnityMRNotifHub dans Visual Studio 2017.Open the solution file of your UnityMRNotifHub app in Visual Studio 2017.

  2. Dans la plateforme de la solution, sélectionnez x86, ordinateur local.In the Solution Platform, select x86, Local Machine.

  3. Dans la configuration de la solution, sélectionnez Déboguer.In the Solution Configuration select Debug.

    définir la configuration du projet

  4. Accédez au menu Générer , puis cliquez sur déployer la solution pour chargement l’application sur votre ordinateur.Go to Build menu and click on Deploy Solution to sideload the application to your machine.

  5. Votre application doit maintenant apparaître dans la liste des applications installées, prêtes à être lancées.Your App should now appear in the list of installed apps, ready to be launched.

Pour déployer l’application UnityDesktopNotifHub sur l’ordinateur local :To deploy the UnityDesktopNotifHub app on Local Machine:

  1. Ouvrez le fichier solution de votre application UnityDesktopNotifHub dans Visual Studio 2017.Open the solution file of your UnityDesktopNotifHub app in Visual Studio 2017.

  2. Dans la plateforme de la solution, sélectionnez x86, ordinateur local.In the Solution Platform, select x86, Local Machine.

  3. Dans la configuration de la solution, sélectionnez Déboguer.In the Solution Configuration select Debug.

    définir la configuration du projet

  4. Accédez au menu Générer , puis cliquez sur déployer la solution pour chargement l’application sur votre ordinateur.Go to Build menu and click on Deploy Solution to sideload the application to your machine.

  5. Votre application doit maintenant apparaître dans la liste des applications installées, prêtes à être lancées.Your App should now appear in the list of installed apps, ready to be launched.

  6. Lancez l’application de réalité mixte, suivie de l’application de bureau.Launch the mixed reality application, followed by the Desktop application.

Une fois les deux applications en cours d’exécution, déplacez un objet dans la scène du Bureau (à l’aide du bouton gauche de la souris).With both applications running, move an object in the desktop scene (using the Left Mouse Button). Ces modifications positionnelles seront effectuées localement, sérialisées et envoyées au service Function App.These positional changes will be made locally, serialized, and sent to the Function App service. Le service de Function App met ensuite à jour la table avec le hub de notification.The Function App service will then update the Table along with the Notification Hub. Une fois la mise à jour reçue, le hub de notification envoie les données mises à jour directement à toutes les applications inscrites (dans ce cas, l’application du casque immersif), qui désérialise ensuite les données entrantes et applique les nouvelles données positionnelles aux objets locaux, en les déplaçant dans la scène.Having received an update, the Notification Hub will send the updated data directly to all the registered applications (in this case the immersive headset app), which will then deserialize the incoming data, and apply the new positional data to the local objects, moving them in scene.

Votre application Azure Notification Hubs terminéeYour finished your Azure Notification Hubs application

Félicitations, vous avez créé une application de réalité mixte qui tire parti du service Azure Notification Hubs et permet la communication entre les applications.Congratulations, you built a mixed reality app that leverages the Azure Notification Hubs Service and allow communication between apps.

fin du produit final

Exercices bonusBonus exercises

Exercice 1Exercise 1

Pouvez-vous utiliser la modification de la couleur du GameObjects et envoyer cette notification à d’autres applications en affichant la scène ?Can you work out how to change the color of the GameObjects and send that notification to other apps viewing the scene?

Exercice 2Exercise 2

Pouvez-vous ajouter le déplacement du GameObjects à votre application RM et voir la scène mise à jour dans votre application de bureau ?Can you add movement of the GameObjects to your MR app and see the updated scene in your desktop app?