MR und Azure 308: Geräteübergreifende BenachrichtigungenMR and Azure 308: Cross-device notifications


Hinweis

Die Tutorials der Mixed Reality Academy wurden im Hinblick auf HoloLens (1. Gen.) und immersive Mixed Reality-Headsets entworfen.The Mixed Reality Academy tutorials were designed with HoloLens (1st gen) and Mixed Reality Immersive Headsets in mind. Daher halten wir es für wichtig, diese Tutorials für Entwickler verfügbar zu halten, die noch nach Anleitung beim Entwickeln für diese Geräte suchen.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. Diese Tutorials werden nicht mit den neuesten Toolsets oder Interaktionen aktualisiert, die für HoloLens 2 verwendet werden.These tutorials will not be updated with the latest toolsets or interactions being used for HoloLens 2. Sie werden gewartet, um weiterhin auf den unterstützten Geräten zu funktionieren.They will be maintained to continue working on the supported devices. Es gibt eine neue Reihe von Tutorials, die in Zukunft veröffentlicht werden, um die Entwicklung für hololens 2 zu veranschaulichen.There will be a new series of tutorials that will be posted in the future that will demonstrate how to develop for HoloLens 2. Dieser Hinweis wird mit einem Link zu diesen Tutorials aktualisiert, wenn diese veröffentlicht werden.This notice will be updated with a link to those tutorials when they are posted.


Endgültiges Produkt-Start

In diesem Kurs erfahren Sie, wie Sie mithilfe von Azure Notification Hubs, Azure-Tabellen und Azure Functions Notification Hubs Funktionen zu einer gemischten Reality-Anwendung hinzufügen.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 ist ein Microsoft-Dienst, der es Entwicklern ermöglicht, gezielte und personalisierte Pushbenachrichtigungen an jede beliebige Plattform zu senden, die alle in der Cloud betrieben wird.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. Dadurch können Entwickler in Abhängigkeit vom jeweiligen Szenario mit Endbenutzern oder sogar zwischen verschiedenen Anwendungen kommunizieren.This can effectively allow developers to communicate with end users, or even communicate between various applications, depending on the scenario. Weitere Informationen finden Sie auf der Seite Azure Notification Hubs .For more information, visit the Azure Notification Hubs page.

Azure Functions ist ein Microsoft-Dienst, der Entwicklern das Ausführen von kleinen Code Elementen ("Functions") in Azure ermöglicht.Azure Functions is a Microsoft service, which allows developers to run small pieces of code, 'functions', in Azure. Dies bietet eine Möglichkeit zum Delegieren von Arbeit an die Cloud und nicht an Ihre lokale Anwendung, die viele Vorteile haben kann.This provides a way to delegate work to the cloud, rather than your local application, which can have many benefits. Azure Functions unterstützt mehrere Entwicklungs Sprachen, wie z # . b. C, F # , Node.js, Java und PHP.Azure Functions supports several development languages, including C#, F#, Node.js, Java, and PHP. Weitere Informationen finden Sie auf der Azure Functions SeiteAzure Functions.For more information, visit the Azure Functions page.

Azure-Tabellen sind ein Microsoft-clouddienst, mit dem Entwickler strukturierte nicht-SQL-Daten in der Cloud speichern können, sodass Sie überall problemlos zugänglich sind.Azure Tables is a Microsoft cloud service, which allows developers to store structured non-SQL data in the cloud, making it easily accessible anywhere. Der Dienst verfügt über einen Schema losen Entwurf, der die Weiterentwicklung von Tabellen nach Bedarf ermöglicht und daher sehr flexibel ist.The service boasts a schemaless design, allowing for the evolution of tables as needed, and thus is very flexible. Weitere Informationen finden Sie auf der Azure Tables Seite mit den Azure-Tabellen.For more information, visit the Azure Tables page

Nachdem Sie diesen Kurs abgeschlossen haben, verfügen Sie über eine gemischte Reality-Headset-Anwendung und eine Desktop-PC-Anwendung, die Folgendes ausführen kann: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. Die Desktop-PC-App ermöglicht dem Benutzer das Verschieben eines Objekts im 2D-Raum (X und Y) mit der Maus.The Desktop PC app will allow the user to move an object in 2D space (X and Y), using the mouse.

  2. Die Verschiebung von Objekten innerhalb der PC-APP wird mithilfe von JSON an die Cloud gesendet, die in Form einer Zeichenfolge mit einer Objekt-ID, einem Typ und Transformations Informationen (X-und Y-Koordinaten) enthalten ist.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. Die Mixed Reality-APP, die über eine identische Szene mit der Desktop-App verfügt, empfängt Benachrichtigungen bezüglich der Objekt Verschiebung aus dem Notification Hubs-Dienst (der soeben von der Desktop-PC-APP aktualisiert wurde).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. Wenn Sie eine Benachrichtigung erhalten, die die Objekt-ID, den Typ und die Transformations Informationen enthält, wendet die Mixed Reality-APP die empfangenen Informationen auf die eigene Szene an.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.

In Ihrer Anwendung liegt es an Ihnen, wie Sie die Ergebnisse in Ihren Entwurf integrieren.In your application, it is up to you as to how you will integrate the results with your design. In diesem Kurs erfahren Sie, wie Sie einen Azure-Dienst in Ihr Unity-Projekt integrieren.This course is designed to teach you how to integrate an Azure Service with your Unity Project. Es ist Ihre Aufgabe, das wissen, das Sie aus diesem Kursgewinnen, zu nutzen, um ihre gemischte Reality-Anwendung zu verbessern.It is your job to use the knowledge you gain from this course to enhance your mixed reality application. Dieser Kurs ist ein eigenständiges Tutorial, das sich nicht direkt mit anderen Mixed Reality-Labs befasst.This course is a self-contained tutorial, which does not directly involve any other Mixed Reality Labs.

GeräteunterstützungDevice support

KursCourse HoloLensHoloLens Immersive HeadsetsImmersive headsets
MR und Azure 308: Geräteübergreifende BenachrichtigungenMR and Azure 308: Cross-device notifications ✔️✔️ ✔️✔️

Hinweis

Dieser Kurs konzentriert sich in erster Linie auf Windows Mixed Reality immersive (VR)-Headsets, aber Sie können auch das, was Sie in diesem Kurs lernen, auf Microsoft hololens anwenden.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. Wenn Sie den Kurs befolgen, finden Sie Hinweise zu allen Änderungen, die Sie möglicherweise zur Unterstützung von hololens verwenden müssen.As you follow along with the course, you will see notes on any changes you might need to employ to support HoloLens. Wenn Sie hololens verwenden, bemerken Sie möglicherweise bei der sprach Erfassung einen Echo.When using HoloLens, you may notice some echo during voice capture.

VoraussetzungenPrerequisites

Hinweis

Dieses Tutorial richtet sich an Entwickler, die über grundlegende Kenntnisse in Unity und c# verfügen.This tutorial is designed for developers who have basic experience with Unity and C#. Beachten Sie auch, dass die Voraussetzungen und Anweisungen in diesem Dokument darstellen, was zum Zeitpunkt des Schreibens getestet und überprüft wurde (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). Sie können die neueste Software verwenden, die im Artikel Installieren der Tools aufgeführt ist. es sollte jedoch nicht davon ausgegangen werden, dass die Informationen in diesem Kurs genau mit den Informationen in neueren Software vergleichen, als im folgenden aufgeführt sind.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.

Für diesen Kurs empfehlen wir die folgende Hardware und Software:We recommend the following hardware and software for this course:

VorbereitungBefore you start

  • Um Probleme zu vermeiden, die beim Erstellen dieses Projekts auftreten, wird dringend empfohlen, dass Sie das in diesem Tutorial erwähnte Projekt in einem Stamm Ordner oder in einem Ordner mit einem Stamm Ordner erstellen (lange Ordner Pfade können zur Buildzeit Probleme verursachen).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).
  • Sie müssen der Besitzer des Microsoft-Entwickler Portals und des Anwendungs Registrierungs Portals sein. andernfalls haben Sie in Kapitel 2keine Berechtigung für den Zugriff auf die app.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.

Kapitel 1: Erstellen einer Anwendung im Microsoft-Entwickler PortalChapter 1 - Create an application on the Microsoft Developer Portal

Um den Azure Notification Hubs -Dienst zu verwenden, müssen Sie eine Anwendung im Microsoft-Entwickler Portal erstellen, da Ihre Anwendung registriert werden muss, damit Benachrichtigungen gesendet und empfangen werden können.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. Melden Sie sich beim Microsoft-Entwickler Portalan.Log in to the Microsoft Developer Portal.

    Sie müssen sich bei Ihrem Microsoft-Konto anmelden.You will need to log in to your Microsoft Account.

  2. Klicken Sie im Dashboard auf neue APP erstellen.From the Dashboard, click Create a new app.

    Erstellen einer APP

  3. Es wird ein Popup Fenster angezeigt, in dem Sie einen Namen für die neue APP reservieren müssen.A popup will appear, wherein you need to reserve a name for your new app. Fügen Sie im Textfeld einen entsprechenden Namen ein. Wenn der ausgewählte Name verfügbar ist, wird rechts neben dem Textfeld ein Tick angezeigt.In the textbox, insert an appropriate name; if the chosen name is available, a tick will appear to the right of the textbox. Nachdem Sie einen verfügbaren Namen eingefügt haben, klicken Sie unten links im Popup Fenster auf die Schaltfläche Produktname reservieren .Once you have an available name inserted, click the Reserve product name button to the bottom left of the popup.

    Umkehren eines Namens

  4. Nachdem Sie die App erstellt haben, können Sie mit dem nächsten Kapitel fortfahren.With the app now created, you are ready to move to the next Chapter.

Kapitel 2: Abrufen der Anmelde Informationen für neue appsChapter 2 - Retrieve your new apps credentials

Melden Sie sich beim Anwendungs Registrierungs Portal an, auf dem die neue APP aufgelistet wird, und rufen Sie die Anmelde Informationen ab, die zum Einrichten des Notification Hubs Dienstanbieter im Azure-Portal verwendet werden.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. Navigieren Sie zum Anwendungs Registrierungs Portal.Navigate to the Application Registration Portal.

    Anwendungs Registrierungs Portal

    Warnung

    Sie müssen sich für die Anmeldung mit Ihrem Microsoft-Konto anmelden.You will need to use your Microsoft Account to Login.
    Dabei muss es sich um das Microsoft-Konto handeln, das Sie im vorherigen Kapitelmit dem Windows Store-Entwickler Portal verwendet haben.This must be the Microsoft Account which you used in the previous Chapter, with the Windows Store Developer portal.

  2. Sie finden Ihre APP im Abschnitt " meine Anwendungen ".You will find your app under the My applications section. Nachdem Sie Sie gefunden haben, klicken Sie darauf, und Sie gelangen zu einer neuen Seite, die den APP-Namen und die Registrierung enthält.Once you have found it, click on it and you will be taken to a new page which has the app name plus Registration.

    Ihre neu registrierte App

  3. Scrollen Sie nach unten auf der Registrierungsseite, um den Abschnitt mit den geheimen Anwendungen und die Paket-sid für Ihre APP zu finden.Scroll down the registration page to find your Application Secrets section and the Package SID for your app. Kopieren Sie beide für die Verwendung mit der Einrichtung des Azure-Notification Hubs Dienstanbieter im nächsten Kapitel.Copy both for use with setting up the Azure Notification Hubs Service in the next Chapter.

    Anwendungs Geheimnisse

Kapitel 3: Einrichten des Azure-Portals: Erstellen Notification Hubs DienstanbieterChapter 3 - Setup Azure Portal: create Notification Hubs Service

Nachdem Sie die Anmelde Informationen für Ihre apps abgerufen haben, müssen Sie zum Azure-Portal wechseln, in dem Sie einen Azure Notification Hubs-Dienst erstellen.With your apps credentials retrieved, you will need to go to the Azure Portal, where you will create an Azure Notification Hubs Service.

  1. Melden Sie sich beim Azure-Portal an.Log into the Azure Portal.

    Hinweis

    Wenn Sie noch nicht über ein Azure-Konto verfügen, müssen Sie eines erstellen.If you do not already have an Azure account, you will need to create one. Wenn Sie dieses Tutorial in einer Classroom-oder Lab-Situation befolgen, bitten Sie Ihren Dozenten oder einen der Proctors, Hilfe beim Einrichten Ihres neuen Kontos zu erhalten.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. Nachdem Sie angemeldet sind, klicken Sie in der oberen linken Ecke auf neu , suchen Sie nach Notification Hub, und klicken Sie auf *Enter _.Once you are logged in, click on New in the top left corner, and search for Notification Hub, and click *Enter _.

    nach benachrichtigungshub suchen

    Hinweis

    Das Wort New wurde möglicherweise durch _ * Create a Resource * * in neueren Portalen ersetzt.The word New may have been replaced with _*Create a resource**, in newer portals.

  3. Auf der neuen Seite wird eine Beschreibung des Notification Hubs Dienstanbieter bereitgestellt.The new page will provide a description of the Notification Hubs service. Wählen Sie unten links in dieser Eingabeaufforderung die Schaltfläche Erstellen aus, um eine Verknüpfung mit diesem Dienst zu erstellen.At the bottom left of this prompt, select the Create button, to create an association with this service.

    Benachrichtigungs-Hubs-Instanz erstellen

  4. Nachdem Sie auf *Create _ geklickt haben:Once you have clicked on *Create _:

    1. Fügen Sie den gewünschten Namen für diese Dienst Instanz ein.Insert your desired name for this service instance.

    2. Geben Sie einen _-Namespace* an, den Sie dieser APP zuordnen können.Provide a _ namespace* which you will be able to associate with this app.

    3. Wählen Sie einen Speicherort aus.Select a Location.

    4. Wählen Sie eine Ressourcengruppe aus, oder erstellen Sie eine neue Ressourcengruppe .Choose a Resource Group or create a new one. Eine Ressourcengruppe bietet eine Möglichkeit zum überwachen, Steuern des Zugriffs, bereitstellen und Verwalten der Abrechnung für eine Sammlung von Azure-Ressourcen.A resource group provides a way to monitor, control access, provision and manage billing for a collection of Azure assets. Es wird empfohlen, alle Azure-Dienste, die einem einzelnen Projekt (z. b. diesen Labs) zugeordnet sind, in einer gemeinsamen Ressourcengruppe zu speichern.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).

      Weitere Informationen zu Azure-Ressourcengruppen finden Sie unter diesem Link zum Verwalten einer Ressourcengruppe.If you wish to read more about Azure Resource Groups, please follow this link on how to manage a Resource Group.

    5. Wählen Sie ein entsprechendes Abonnement aus.Select an appropriate Subscription.

    6. Außerdem müssen Sie bestätigen, dass Sie die auf diesen Dienst angewendeten Geschäftsbedingungen verstanden haben.You will also need to confirm that you have understood the Terms and Conditions applied to this Service.

    7. Klicken Sie auf Erstellen.Select Create.

      Dienst Details ausfüllen

  5. Nachdem Sie auf Erstellen geklickt haben, müssen Sie warten, bis der Dienst erstellt wurde. dieser Vorgang kann einige Minuten in Anspruch nehmen.Once you have clicked on Create, you will have to wait for the service to be created, this might take a minute.

  6. Nachdem die Dienst Instanz erstellt wurde, wird im Portal eine Benachrichtigung angezeigt.A notification will appear in the portal once the Service instance is created.

    Benachrichtigung

  7. Klicken Sie in der Benachrichtigung auf die Schaltfläche Gehe zu Ressource , um die neue Dienst Instanz zu untersuchen.Click the Go to resource button in the notification to explore your new Service instance. Sie gelangen zu ihrer neuen Notification Hub -Dienst Instanz.You will be taken to your new Notification Hub service instance.

    Gehe zu Ressource

  8. Klicken Sie auf der Übersichtsseite in der Mitte der Seite auf Windows (WNS).From the overview page, halfway down the page, click Windows (WNS). Der Bereich auf der rechten Seite ändert sich, um zwei Textfelder anzuzeigen, die die Paket-sid und den Sicherheitsschlüssel benötigen, von der APP, die Sie zuvor eingerichtet haben.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.

    neu erstellter Hubs-Dienst

  9. Nachdem Sie die Details in die richtigen Felder kopiert haben, klicken Sie auf Speichern, und Sie erhalten eine Benachrichtigung, wenn der Notification Hub erfolgreich aktualisiert wurde.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.

    Sicherheitsdetails kopieren

Kapitel 4: Einrichten des Azure-Portals: Erstellen eines Tabellen DienstanbieterChapter 4 - Setup Azure Portal: create Table Service

Nachdem Sie Ihre Notification Hubs Dienst Instanz erstellt haben, navigieren Sie zurück zu Ihrem Azure-Portal, in dem Sie einen Azure Tables-Dienst erstellen, indem Sie eine Speicher Ressource erstellen.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. Wenn Sie noch nicht angemeldet sind, melden Sie sich beim Azure-Portalan.If not already signed in, log into the Azure Portal.

  2. Wenn Sie angemeldet sind, klicken Sie in der oberen linken Ecke auf neu , suchen Sie nach Speicherkonto, und drücken Sie die Eingabe Taste.Once logged in, click on New in the top left corner, and search for Storage account, and click Enter.

    Hinweis

    Das Wort **New_ wurde möglicherweise durch _* Create a Resource* in neueren Portalen ersetzt.The word *New_ may have been replaced with _* Create a resource**, in newer portals.

  3. Wählen Sie Speicherkonto-BLOB, Datei, Tabelle, Warteschlange aus der Liste aus.Select Storage account - blob, file, table, queue from the list.

    Suchen nach Speicherkonto

  4. Auf der neuen Seite wird eine Beschreibung des Speicherkonto Dienstanbieter bereitgestellt.The new page will provide a description of the Storage account service. Wählen Sie unten links in dieser Eingabeaufforderung die Schaltfläche Erstellen aus, um eine Instanz dieses Dienstanbieter zu erstellen.At the bottom left of this prompt, select the Create button, to create an instance of this service.

    Speicher Instanz erstellen

  5. Nachdem Sie auf Erstellen geklickt haben, wird ein Panel angezeigt:Once you have clicked on Create, a panel will appear:

    1. Fügen Sie den gewünschten Namen für diese Dienst Instanz ein (nur Kleinbuchstaben).Insert your desired Name for this service instance (must be all lowercase).

    2. Klicken Sie unter Bereitstellungs Modell auf Ressourcen-Manager.For Deployment model, click Resource manager.

    3. Wählen Sie unter Kontoart im Dropdown Menü die Option Speicher (universell v1) aus.For Account kind, using the dropdown menu, select Storage (general purpose v1).

    4. Wählen Sie einen geeigneten Speicherort aus.Select an appropriate Location.

    5. Wählen Sie für das Dropdown Menü Replikation die Option Lesezugriff georedundanter Speicher (RA-GRS) aus.For the Replication dropdown menu, select Read-access-geo-redundant storage (RA-GRS).

    6. Klicken Sie für die Leistung auf Standard.For Performance, click Standard.

    7. Wählen Sie im Abschnitt sichere Übertragung erforderlich die Option deaktiviert aus.Within the Secure transfer required section, select Disabled.

    8. Wählen Sie im Dropdown Menü Abonnement ein entsprechendes Abonnement aus.From the Subscription dropdown menu, select an appropriate subscription.

    9. Wählen Sie eine Ressourcengruppe aus, oder erstellen Sie eine neue Ressourcengruppe .Choose a Resource Group or create a new one. Eine Ressourcengruppe bietet eine Möglichkeit zum überwachen, Steuern des Zugriffs, bereitstellen und Verwalten der Abrechnung für eine Sammlung von Azure-Ressourcen.A resource group provides a way to monitor, control access, provision and manage billing for a collection of Azure assets. Es wird empfohlen, alle Azure-Dienste, die einem einzelnen Projekt (z. b. diesen Labs) zugeordnet sind, in einer gemeinsamen Ressourcengruppe zu speichern.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).

      Weitere Informationen zu Azure-Ressourcengruppen finden Sie unter diesem Link zum Verwalten einer Ressourcengruppe.If you wish to read more about Azure Resource Groups, please follow this link on how to manage a Resource Group.

    10. Lassen Sie virtuelle Netzwerke deaktiviert , wenn dies eine Option für Sie ist.Leave Virtual networks as Disabled if this is an option for you.

    11. Klicken Sie auf Erstellen.Click Create.

      Speicher Details ausfüllen

  6. Nachdem Sie auf Erstellen geklickt haben, müssen Sie warten, bis der Dienst erstellt wurde. dieser Vorgang kann einige Minuten in Anspruch nehmen.Once you have clicked on Create, you will have to wait for the service to be created, this might take a minute.

  7. Nachdem die Dienst Instanz erstellt wurde, wird im Portal eine Benachrichtigung angezeigt.A notification will appear in the portal once the Service instance is created. Klicken Sie auf die Benachrichtigungen, um die neue Dienst Instanz zu untersuchen.Click on the notifications to explore your new Service instance.

    neue Speicher Benachrichtigung

  8. Klicken Sie in der Benachrichtigung auf die Schaltfläche Gehe zu Ressource , um die neue Dienst Instanz zu untersuchen.Click the Go to resource button in the notification to explore your new Service instance. Sie gelangen zur Übersichtsseite der neuen Speicherdienst Instanz.You will be taken to your new Storage Service instance overview page.

    Gehe zu Ressource

  9. Klicken Sie auf der Seite Übersicht auf die Rechte Seite, und klicken Sie auf Tabellen.From the overview page, to the right-hand side, click Tables.

  10. Der Bereich auf der rechten Seite ändert sich, um die Tabellen Dienst Informationen anzuzeigen, in denen Sie eine neue Tabelle hinzufügen müssen.The panel on the right will change to show the Table service information, wherein you need to add a new table. Klicken Sie hierzu auf die + Tabellen Schaltfläche in der linken oberen Ecke.Do this by clicking the + Table button to the top-left corner.

    Öffnen von Tabellen

  11. Es wird eine neue Seite angezeigt, auf der Sie einen Tabellennamen eingeben müssen.A new page will be shown, wherein you need to enter a Table name. Dies ist der Name, den Sie in späteren Kapiteln verwenden, um auf die Daten in Ihrer Anwendung zu verweisen.This is the name you will use to refer to the data in your application in later Chapters. Fügen Sie einen entsprechenden Namen ein, und klicken Sie auf OKInsert an appropriate name and click OK.

    neue Tabelle erstellen

  12. Nachdem die neue Tabelle erstellt wurde, können Sie Sie auf der Seite Tabellen Dienst (unten) sehen.Once the new table has been created, you will be able to see it within the Table service page (at the bottom).

    neue Tabelle erstellt

Kapitel 5: Abschließen der Azure-Tabelle in Visual StudioChapter 5 - Completing the Azure Table in Visual Studio

Nachdem Sie das Speicher Dienst -Speicherkonto eingerichtet haben, ist es an der Zeit, Daten hinzuzufügen, die zum Speichern und Abrufen von Informationen verwendet werden.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. Die Bearbeitung der Tabellen kann über Visual Studio erfolgen.The editing of your Tables can be done through Visual Studio.

  1. Öffnen Sie Visual Studio.Open Visual Studio.

  2. Klicken Sie im Menü auf View > Cloud-Explorer anzeigen.From the menu, click View > Cloud Explorer.

    Cloud-Explorer öffnen

  3. Der Cloud-Explorer wird als angedocktes Element geöffnet (als "Patient", da der Ladevorgang Zeit in Anspruch nehmen kann).The Cloud Explorer will open as a docked item (be patient, as loading may take time).

    Hinweis

    Wenn das Abonnement, das Sie zum Erstellen Ihrer Speicher Konten verwendet haben, nicht sichtbar ist, stellen Sie Folgendes sicher:If the Subscription you used to create your Storage Accounts is not visible, ensure that you have:

    • Sie sind beim gleichen Konto angemeldet, das Sie für das Azure-Portal verwendet haben.Logged in to the same account as the one you used for the Azure Portal.

    • Wählen Sie auf der Seite "Kontoverwaltung" Ihr Abonnement aus (möglicherweise müssen Sie einen Filter aus Ihren Kontoeinstellungen anwenden):Selected your Subscription from the Account Management Page (you may need to apply a filter from your account settings):

      Abonnement suchen

  4. Ihre Azure-Clouddienste werden angezeigt.Your Azure cloud services will be shown. Suchen Sie nach Speicher Konten , und klicken Sie auf den Pfeil auf der linken Seite, um Ihre Konten zu erweitern.Find Storage Accounts and click the arrow to the left of that to expand your accounts.

    Öffnen von Speicher Konten

  5. Nach der Erweiterung sollte Ihr neu erstelltes Speicherkonto verfügbar sein.Once expanded, your newly created Storage account should be available. Klicken Sie auf den Pfeil links neben dem Speicher, und wählen Sie dann nach dem Erweitern der Tabelle Tabellen aus, und klicken Sie auf den Pfeil daneben, um die Tabelle anzuzeigen, die Sie im letzten Kapitel erstellt haben.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. Doppelklicken Sie auf die Tabelle.Double click your Table.

    Tabelle "Scene Objects" öffnen

  6. Ihre Tabelle wird in der Mitte Ihres Visual Studio-Fensters geöffnet.Your table will be opened in the center of your Visual Studio window. Klicken Sie auf das Symboltabelle mit dem + (plus)-Symbol.Click the table icon with the + (plus) on it.

    neue Tabelle hinzufügen

  7. Ein Fenster wird angezeigt, in dem Sie aufgefordert werden, Entitäten hinzuzufügen.A window will appear prompting for you to Add Entity. Sie erstellen insgesamt drei Entitäten mit jeweils mehreren Eigenschaften.You will create three entities in total, each with several properties. Sie werden feststellen, dass PartitionKey und RowKey bereits bereitgestellt werden, da diese von der Tabelle zum Suchen Ihrer Daten verwendet werden.You will notice that PartitionKey and RowKey are already provided, as these are used by the table to find your data.

    Partitions-und Zeilen Schlüssel

  8. Aktualisieren Sie den Wert von PartitionKey und RowKey wie folgt (denken Sie daran, diesen Schritt für jede hinzu zufügende Zeilen Eigenschaft auszuführen, obwohl Sie den RowKey jedes Mal erhöhen):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):

    korrekte Werte hinzufügen

  9. Klicken Sie auf Eigenschaft hinzufügen , um zusätzliche Daten Zeilen hinzuzufügen.Click Add property to add extra rows of data. Erstellen Sie die erste leere Tabelle mit der folgenden Tabelle.Make your first empty table match the below table.

  10. Klicken Sie anschließend auf OK.Click OK when you are finished.

    Klicken Sie abschließend auf OK.

    Warnung

    Stellen Sie sicher, dass Sie den Typ der X-, Y-und Z-Einträge in " Double" geändert haben.Ensure that you have changed the Type of the X, Y, and Z, entries to Double.

  11. Sie werden feststellen, dass die Tabelle nun eine Daten Zeile enthält.You will notice your table now has a row of data. Klicken Sie + erneut auf das Symbol (plus), um eine weitere Entität hinzuzufügen.Click the + (plus) icon again to add another entity.

    erste Zeile

  12. Erstellen Sie eine zusätzliche Eigenschaft, und legen Sie dann die Werte der neuen Entität entsprechend den unten gezeigten fest.Create an additional property, and then set the values of the new entity to match those shown below.

    Cube hinzufügen

  13. Wiederholen Sie den letzten Schritt zum Hinzufügen einer weiteren Entität.Repeat the last step to add another entity. Legen Sie die Werte für diese Entität auf die unten angezeigten Werte fest.Set the values for this entity to those shown below.

    Zylinder hinzufügen

  14. Die Tabelle sollte nun wie folgt aussehen.Your table should now look like the one below.

    Tabelle ist fertiggestellt

  15. Sie haben dieses Kapitel abgeschlossen.You have completed this Chapter. Stellen Sie sicher, dass Sie speichern.Make sure to save.

Kapitel 6: Erstellen eines Azure-Funktionen-AppChapter 6 - Create an Azure Function App

Erstellen Sie eine Azure-Funktionen-APP, die von der Desktop Anwendung aufgerufen wird, um den Tabellen Dienst zu aktualisieren und eine Benachrichtigung über den Notification Hub zu senden.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.

Zunächst müssen Sie eine Datei erstellen, die es ihrer Azure-Funktion ermöglicht, die benötigten Bibliotheken zu laden.First, you need to create a file that will allow your Azure Function to load the libraries you need.

  1. Öffnen Sie Notepad (drücken Sie Windows-Taste, und geben Sie Notepad ein).Open Notepad (press Windows Key and type notepad).

    Editor öffnen

  2. Fügen Sie bei geöffneter Notepad die JSON-Struktur unten ein.With Notepad open, insert the JSON structure below into it. Nachdem Sie dies getan haben, speichern Sie es auf Ihrem Desktop, wie project.js.Once you have done that, save it on your desktop as project.json. Es ist wichtig, dass die Benennung korrekt ist: Stellen Sie sicher, dass Sie nicht über die Dateierweiterung " . txt " verfügt.It is important that the naming is correct: ensure it does NOT have a .txt file extension. Diese Datei definiert die Bibliotheken, die von ihrer Funktion verwendet werden, wenn Sie nuget verwendet haben, wird Sie vertraut aussehen.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. Melden Sie sich beim Azure-Portal an.Log in to the Azure Portal.

  4. Wenn Sie angemeldet sind, klicken Sie in der oberen linken Ecke auf " neu ", und suchen Sie nach Funktionen-App. Drücken Sie dann die Eingabe Taste.Once you are logged in, click on New in the top left corner, and search for Function App, press Enter.

    nach Funktionen-App suchen

    Hinweis

    Das Wort New wurde möglicherweise durch Create a Resource in neueren Portalen ersetzt.The word New may have been replaced with Create a resource, in newer portals.

  5. Auf der neuen Seite wird eine Beschreibung des Funktionen-App Dienstanbieter bereitgestellt.The new page will provide a description of the Function App service. Wählen Sie unten links in dieser Eingabeaufforderung die Schaltfläche Erstellen aus, um eine Verknüpfung mit diesem Dienst zu erstellen.At the bottom left of this prompt, select the Create button, to create an association with this service.

    Funktionen-app-Instanz

  6. Nachdem Sie auf Erstellen geklickt haben, geben Sie Folgendes ein:Once you have clicked on Create, fill in the following:

    1. Fügen Sie für App-Name den gewünschten Namen für diese Dienst Instanz ein.For App name, insert your desired name for this service instance.

    2. Wählen Sie ein Abonnement aus.Select a Subscription.

    3. Wählen Sie den für Sie geeigneten Tarif aus. Wenn Sie zum ersten Mal einen Funktionen-App Dienst erstellen, sollte Ihnen ein Free-Tarif zur Verfügung stehen.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. Wählen Sie eine Ressourcengruppe aus, oder erstellen Sie eine neue Ressourcengruppe .Choose a Resource Group or create a new one. Eine Ressourcengruppe bietet eine Möglichkeit zum überwachen, Steuern des Zugriffs, bereitstellen und Verwalten der Abrechnung für eine Sammlung von Azure-Ressourcen.A resource group provides a way to monitor, control access, provision and manage billing for a collection of Azure assets. Es wird empfohlen, alle Azure-Dienste, die einem einzelnen Projekt (z. b. diesen Labs) zugeordnet sind, in einer gemeinsamen Ressourcengruppe zu speichern.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).

      Weitere Informationen zu Azure-Ressourcengruppen finden Sie unter diesem Link zum Verwalten einer Ressourcengruppe.If you wish to read more about Azure Resource Groups, please follow this link on how to manage a Resource Group.

    5. Klicken Sie für Betriebssystem auf Windows, da dies die beabsichtigte Plattform ist.For OS, click Windows, as that is the intended platform.

    6. Wählen Sie einen Hostingplan aus (in diesem Tutorial wird ein Verbrauchs Plan verwendet.)Select a Hosting Plan (this tutorial is using a Consumption Plan.

    7. Wählen Sie einen Standort aus (Wählen Sie den gleichen Speicherort wie für den Speicher aus, den Sie im vorherigen Schritt erstellt haben) .Select a Location (choose the same location as the storage you have built in the previous step)

    8. Im Abschnitt Speicher müssen Sie den Speicherdienst auswählen, den Sie im vorherigen Schritt erstellt haben.For the Storage section, you must select the Storage Service you created in the previous step.

    9. Sie benötigen keine Application Insights in dieser APP, sodass Sie Sie nicht mehr Deaktivieren können.You will not need Application Insights in this app, so feel free to leave it Off.

    10. Klicken Sie auf Erstellen.Click Create.

      neue Instanz erstellen

  7. Nachdem Sie auf " Erstellen " geklickt haben, müssen Sie warten, bis der Dienst erstellt wird. dieser Vorgang kann einige Minuten in Anspruch nehmen.Once you have clicked on Create you will have to wait for the service to be created, this might take a minute.

  8. Nachdem die Dienst Instanz erstellt wurde, wird im Portal eine Benachrichtigung angezeigt.A notification will appear in the portal once the Service instance is created.

    neue Benachrichtigung

  9. Klicken Sie auf die Benachrichtigungen, um die neue Dienst Instanz zu untersuchen.Click on the notifications to explore your new Service instance.

  10. Klicken Sie in der Benachrichtigung auf die Schaltfläche Gehe zu Ressource , um die neue Dienst Instanz zu untersuchen.Click the Go to resource button in the notification to explore your new Service instance.

    Gehe zu Ressource

  11. Klicken Sie + neben Functions auf das Symbol (Pluszeichen), um neu zu erstellen.Click the + (plus) icon next to Functions, to Create new.

    neue Funktion hinzufügen

  12. Im mittleren Bereich wird das Fenster für die Funktions Erstellung angezeigt.Within the central panel, the Function creation window will appear. Ignorieren Sie die Informationen in der oberen Hälfte des Panels, und klicken Sie auf benutzerdefinierte Funktion, die sich am unteren Rand befindet (im blauen Bereich, wie unten gezeigt).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).

    benutzerdefinierte Funktion

  13. Die neue Seite innerhalb des Fensters zeigt verschiedene Funktionstypen.The new page within the window will show various function types. Scrollen Sie nach unten, um die lila Typen anzuzeigen, und klicken Sie auf http Put -Element.Scroll down to view the purple types, and click HTTP PUT element.

    Link "http Put"

    Wichtig

    Möglicherweise müssen Sie nach unten auf der Seite einen Bildlauf durchführen (dieses Bild sieht möglicherweise nicht genau aus, wenn Aktualisierungen des Azure-Portals stattfinden), suchen Sie jedoch nach einem Element mit dem Namen " 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. Das Fenster http Put wird angezeigt, in dem Sie die Funktion konfigurieren müssen (siehe unten für Image).The HTTP PUT window will appear, where you need to configure the function (see below for image).

    1. Wählen Sie unter Sprache im Dropdown Menü die Option C aus # .For Language, using the dropdown menu, select C#.

    2. Geben Sie unter Name einen entsprechenden Namen ein.For Name, input an appropriate name.

    3. Wählen Sie im Dropdown Menü Authentifizierungs Ebene die Option Funktion aus.In the Authentication level dropdown menu, select Function.

    4. Für den Tabellennamen Abschnitt müssen Sie den genauen Namen verwenden, den Sie zuvor verwendet haben, um den Tabellen Dienst zu erstellen (einschließlich desselben Buchstabens).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. Verwenden Sie im Abschnitt Speicherkonto Verbindung das Dropdown Menü, und wählen Sie dann Ihr Speicherkonto aus.Within the Storage account connection section, use the dropdown menu, and select your storage account from there. Wenn dies nicht der Fall ist, klicken Sie neben dem Abschnitts Titel auf den neuen Link, um ein anderes Panel anzuzeigen, in dem das Speicherkonto aufgelistet werden soll.If it is not there, click the New hyperlink alongside the section title, to show another panel, where your storage account should be listed.

      neuer Speicher

  15. Wenn Sie auf Erstellen klicken, erhalten Sie eine Benachrichtigung, dass die Einstellungen erfolgreich aktualisiert wurden.Click Create and you will receive a notification that your settings have been updated successfully.

    Create-Funktion

  16. Nachdem Sie auf Erstellen geklickt haben, werden Sie zum Funktions-Editor umgeleitet.After clicking Create, you will be redirected to the function editor.

    Funktionscode aktualisieren

  17. Fügen Sie den folgenden Code in den Funktions-Editor ein (ersetzen Sie den Code in der Funktion):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; }
    }
    

    Hinweis

    Mithilfe der enthaltenen Bibliotheken erhält die Funktion den Namen und den Speicherort des Objekts, das in der Unity-Szene verschoben wurde (als c#-Objekt namens 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). Dieses Objekt wird dann verwendet, um die Objekt Parameter in der erstellten Tabelle zu aktualisieren.This object is then used to update the object parameters within the created table. Danach ruft die Funktion den erstellten Notification Hub-Dienst auf, der alle abonnierten Anwendungen benachrichtigt.Following this, the function makes a call to your created Notification Hub service, which notifies all subscribed applications.

  18. Klicken Sie mit dem Code auf Speichern.With the code in place, click Save.

  19. Klicken Sie anschließend < auf der rechten Seite der Seite auf das Symbol (Pfeil).Next, click the < (arrow) icon, on the right-hand side of the page.

    Uploadpanel öffnen

  20. Ein Panel wird von rechts nach rechts angezeigt.A panel will slide in from the right. Klicken Sie in diesem Bereich auf hochladen, und ein Datei Browser wird angezeigt.In that panel, click Upload, and a File Browser will appear.

  21. Navigieren Sie zu, und klicken Sie auf dieproject.jsfür die Datei, die Sie zuvor im Editor erstellt haben, und klicken Sie dann auf die Schaltfläche Öffnen .Navigate to, and click, the project.json file, which you created in Notepad previously, and then click the Open button. Diese Datei definiert die Bibliotheken, die von ihrer Funktion verwendet werden.This file defines the libraries that your function will use.

    JSON hochladen

  22. Wenn die Datei hochgeladen wurde, wird Sie im Panel auf der rechten Seite angezeigt.When the file has uploaded, it will appear in the panel on the right. Wenn Sie darauf klicken, wird es im Funktions -Editor geöffnet.Clicking it will open it within the Function editor. Es muss genau wie das nächste Bild aussehen (unterschritt 23).It must look exactly the same as the next image (below step 23).

  23. Klicken Sie dann im Bereich links unterhalb von Functions auf den Link integrieren .Then, in the panel on the left, beneath Functions, click the Integrate link.

    Integration-Funktion

  24. Klicken Sie auf der nächsten Seite in der oberen rechten Ecke auf erweiterter Editor (siehe unten).On the next page, in the top right corner, click Advanced editor (as below).

    erweiterten Editor öffnen

  25. Eine function.jsfür die Datei wird im mittleren Bereich geöffnet, der durch den folgenden Code Ausschnitt ersetzt werden muss.A function.json file will be opened in the center panel, which needs to be replaced with the following code snippet. Definiert die Funktion, die Sie entwickeln, und die Parameter, die an die Funktion übermittelt werden.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. Der Editor sollte nun wie in der folgenden Abbildung aussehen:Your editor should now look like the image below:

    zurück zum Standard-Editor

  27. Sie bemerken möglicherweise, dass die Eingabeparameter, die Sie gerade eingefügt haben, nicht mit den Tabellen-und Speicher Details identisch sind und daher mit ihren Informationen aktualisiert werden müssen.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. Gehen Sie hier nicht wie folgt vor.Do not do this here, as it is covered next. Klicken Sie einfach auf den Link Standard-Editor in der oberen rechten Ecke der Seite, um zurückzukehren.Simply click the Standard editor link, in the top-right corner of the page, to go back.

  28. Klicken Sie im Standard-Editor unter Eingaben auf Azure Table Storage (Tabelle).Back in the Standard editor, click Azure Table Storage (table), under Inputs.

    Tabellen Eingaben

  29. Stellen Sie sicher, dass die folgenden Informationen mit ihren Informationen identisch sind, da Sie unterschiedlich sein können (es gibt eine Abbildung unterhalb der folgenden Schritte):Ensure the following match to your information, as they may be different (there is an image below the following steps):

    1. Tabellenname: der Name der Tabelle, die Sie im Azure Storage Tabellen Dienst erstellt haben.Table name: the name of the table you created within your Azure Storage, Tables service.

    2. Speicherkonto Verbindung: klicken Sie auf neu, das neben dem Dropdown Menü angezeigt wird, und rechts neben dem Fenster wird ein Panel angezeigt.Storage account connection: click new, which appears alongside the dropdown menu, and a panel will appear to the right of the window.

      neuer Speicher

      1. Wählen Sie Ihr Speicherkonto aus, das Sie zuvor erstellt haben, um die Funktionen-apps zu hosten.Select your Storage Account, which you created previously to host the Function Apps.

      2. Sie werden feststellen, dass der Wert für die Speicherkonto Verbindung erstellt wurde.You will notice that the Storage Account connection value has been created.

      3. Stellen Sie sicher, dass Sie nach Abschluss des Vorgangs auf Speichern klicken.Make sure to press Save once you are done.

    3. Die Seite Eingaben sollte nun mit den unten aufgeführten Informationen identisch sein .The Inputs page should now match the below, showing your information.

      Eingaben sind beendet

  30. Klicken Sie anschließend unter Ausgaben auf Azure Notification Hub (Benachrichtigung) .Next, click Azure Notification Hub (notification) - under Outputs. Stellen Sie sicher, dass die folgenden Informationen mit ihren Informationen übereinstimmen, da Sie unterschiedlich sein können (es gibt eine Abbildung unterhalb der folgenden Schritte):Ensure the following are matched to your information, as they may be different (there is an image below the following steps):

    1. Notification Hub-Name: Dies ist der Name der Notification Hub -Dienst Instanz, die Sie zuvor erstellt haben.Notification Hub Name: this is the name of your Notification Hub service instance, which you created previously.

    2. Notification Hubs-Namespace Verbindung: Klicken Sie auf neu, das neben dem Dropdown Menü angezeigt wird.Notification Hubs namespace connection: click new, which appears alongside the dropdown menu.

      Ausgaben überprüfen

    3. Das Popup- Popup Fenster wird angezeigt (siehe Abbildung unten), in dem Sie den Namespace des Benachrichtigungs-Hubs auswählen müssen, den Sie zuvor eingerichtet haben.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. Wählen Sie den Namen Ihres Notification Hubs im Dropdown Menü in der Mitte aus.Select your Notification Hub name from the middle dropdown menu.

    5. Legen Sie das Dropdown Menü Richtlinie auf defaultfullsharedaccesssignature fest.Set the Policy dropdown menu to DefaultFullSharedAccessSignature.

    6. Klicken Sie auf die Schaltfläche auswählen , um zurückzukehren.Click the Select button to go back.

      Ausgabe Update

  31. Die Seite Ausgaben sollte nun mit den unten angegebenen Informationen, jedoch mit ihren Informationen, identisch sein .The Outputs page should now match the below, but with your information instead. Stellen Sie sicher, dass Sie auf Speichern klicken.Make sure to press Save.

Warnung

Bearbeiten Sie den Notification Hub-Namen nicht direkt (Dies sollte alle mithilfe der Erweiterter Editor erfolgen, vorausgesetzt, Sie haben die vorherigen Schritte ordnungsgemäß befolgt.Do not edit the Notification Hub name directly (this should all be done using the Advanced Editor, provided you followed the previous steps correctly.

Abgeschlossene Ausgaben

  1. An diesem Punkt sollten Sie die Funktion testen, um sicherzustellen, dass Sie funktioniert.At this point, you should test the function, to ensure it is working. Gehen Sie dazu wie folgt vor:To do this:

    1. Navigieren Sie noch einmal zur funktionsseite:Navigate to the function page once more:

      Abgeschlossene Ausgaben

    2. Klicken Sie auf der Seite Funktion auf die Registerkarte Test ganz rechts auf der Seite, um das Blatt " Test " zu öffnen:Back on the function page, click the Test tab on the far right side of the page, to open the Test blade:

      Abgeschlossene Ausgaben

    3. Fügen Sie im Textfeld Anforderungs Text des Blatts den folgenden Code ein: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. Wenn der Testcode vorhanden ist, klicken Sie unten rechts auf die Schaltfläche Ausführen , und der Test wird ausgeführt.With the test code in place, click the Run button at the bottom right, and the test will be run. Die Ausgabe Protokolle des Tests werden im Konsolen Bereich unterhalb Ihres Funktions Codes angezeigt.The output logs of the test will appear in the console area, below your function code.

      Abgeschlossene Ausgaben

    Warnung

    Wenn der obige Test fehlschlägt, müssen Sie überprüfen, ob Sie die obigen Schritte genau befolgt haben. Dies gilt insbesondere für die Einstellungen im Bereich integrieren.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.

Kapitel 7: Einrichten eines Desktop-Unity-ProjektsChapter 7 - Set up Desktop Unity Project

Wichtig

Die Desktop Anwendung, die Sie jetzt erstellen, funktioniert nicht im Unity-Editor.The Desktop application which you are now creating, will not work in the Unity Editor. Er muss außerhalb des Editors ausgeführt werden, und zwar nach dem Anwendungs Aufbau, mithilfe von Visual Studio (oder der bereitgestellten Anwendung).It needs to be run outside of the Editor, following the Building of the application, using Visual Studio (or the deployed application).

Im folgenden finden Sie eine typische Einrichtung für die Entwicklung mit Unity und gemischter Realität und ist daher eine gute Vorlage für andere Projekte.The following is a typical set up for developing with Unity and mixed reality, and as such, is a good template for other projects.

Richten Sie Ihr immersives Headset mit gemischter Realität ein und testen Sie es.Set up and test your mixed reality immersive headset.

Hinweis

Für diesen Kurs benötigen Sie keine Bewegungs Controller.You will not require Motion Controllers for this course. Wenn Sie Unterstützung beim Einrichten des immersiven Headsets benötigen, befolgen Sie diesen Link zum Einrichten von 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. Öffnen Sie Unity , und klicken Sie auf neu.Open Unity and click New.

    neues Unity-Projekt

  2. Sie müssen einen Unity-Projektnamen angeben und unitydesktopnotifhub einfügen.You need to provide a Unity Project name, insert UnityDesktopNotifHub. Stellen Sie sicher, dass Projekttyp auf 3D festgelegt ist.Make sure the project type is set to 3D. Legen Sie den Speicherort auf einen geeigneten Speicherort fest (denken Sie daran, dass die Stamm Verzeichnisse besser sind).Set the Location to somewhere appropriate for you (remember, closer to root directories is better). Klicken Sie dann auf Projekt erstellen.Then, click Create project.

    Erstellen des Projekts

  3. Wenn Unity geöffnet ist, sollten Sie überprüfen, dass der Standard Skript-Editor auf Visual Studio festgelegt ist.With Unity open, it is worth checking the default Script Editor is set to Visual Studio. Wechseln Sie Edit zu > Einstellungen bearbeiten, und navigieren Sie dann im neuen Fenster zu externe Tools.Go to Edit > Preferences and then from the new window, navigate to External Tools. Ändern Sie den Editor für externe Skripts in Visual Studio 2017.Change External Script Editor to Visual Studio 2017. Schließen Sie das Fenster " Einstellungen ".Close the Preferences window.

    Festlegen externer vs-Tools

  4. Navigieren Sie als nächstes zu Datei > Buildeinstellungen , wählen Sie universelle Windows-Plattform aus, und klicken Sie dann auf die Schaltfläche Plattform wechseln , um die Auswahl zu übernehmenNext, go to File > Build Settings and select Universal Windows Platform, then click on the Switch Platform button to apply your selection.

    Plattformen wechseln

  5. File > Stellen Sie sicher, dass in den Einstellungen für die Dateierstellung Folgendes angezeigt wird:While still in File > Build Settings, make sure that:

    1. Das Zielgerät ist auf ein beliebiges Gerät festgelegt.Target Device is set to Any Device

      Diese Anwendung wird für Ihren Desktop verwendet, daher muss es sich um ein beliebiges Gerät handeln.This Application will be for your desktop, so must be Any Device

    2. Der Buildtyp ist auf D3D festgelegt.Build Type is set to D3D

    3. SDK ist auf neueste installierte Version festgelegt.SDK is set to Latest installed

    4. Visual Studio-Version ist auf neueste installierte Version festgelegt.Visual Studio Version is set to Latest installed

    5. Build und Run sind auf lokaler Computer festgelegt.Build and Run is set to Local Machine

    6. In diesem Fall lohnt es sich, die Szene zu speichern und dem Build hinzuzufügen.While here, it is worth saving the scene, and adding it to the build.

      1. Wählen Sie hierzu die Option geöffnete Szenen hinzufügen aus.Do this by selecting Add Open Scenes. Ein Fenster zum Speichern wird angezeigt.A save window will appear.

        Hinzufügen offener Szenen

      2. Erstellen Sie einen neuen Ordner für dieses und jede zukünftige Szene, und wählen Sie dann die Schaltfläche neuer Ordner aus, um einen neuen Ordner zu erstellen.Create a new folder for this, and any future, scene, then select the New folder button, to create a new folder, name it Scenes.

        neuer Szenen Ordner

      3. Öffnen Sie den neu erstellten Ordner Szenen , geben Sie im Feld Dateiname: Text den Text NH _ Desktop _ Scene ein, und klicken Sie dann auf Speichern.Open your newly created Scenes folder, and then in the File name: text field, type NH_Desktop_Scene, then press Save.

        neue NH_Desktop_Scene

    7. Die restlichen Einstellungen in den Buildeinstellungen sollten vorerst als Standard belassen werden.The remaining settings, in Build Settings, should be left as default for now.

  6. Klicken Sie im gleichen Fenster auf die Schaltfläche Player Einstellungen . Dadurch wird der entsprechende Bereich in dem Bereich geöffnet, in dem sich der Inspektor befindet.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. In diesem Bereich müssen einige Einstellungen überprüft werden:In this panel, a few settings need to be verified:

    1. Auf der Registerkarte andere Einstellungen :In the Other Settings tab:

      1. Die Skript Lauf Zeit Version sollte experimentell sein (.NET 4,6-Entsprechung) .Scripting Runtime Version should be Experimental (.NET 4.6 Equivalent)

      2. Skript -Back-End sollte .net seinScripting Backend should be .NET

      3. API-Kompatibilitäts Grad sollte .NET 4,6 lautenAPI Compatibility Level should be .NET 4.6

        4,6 NET-Version

    2. Überprüfen Sie auf der Registerkarte Veröffentlichungs Einstellungen unter Funktionen Folgendes:Within the Publishing Settings tab, under Capabilities, check:

      • InternetClientInternetClient

        Internet Client Tick

  8. Zurück in Buildeinstellungen : Unity-C- # Projekte sind nicht mehr abgeblendet. Aktivieren Sie das Kontrollkästchen neben this.Back in Build Settings Unity C# Projects is no longer greyed out; tick the checkbox next to this.

  9. Schließen Sie das Fenster Buildeinstellungen.Close the Build Settings window.

  10. Speichern Sie Ihre Szene-und Projekt Datei, und speichern Sie das Projekt in der Szene > Save Scene / File > Save Project.Save your Scene and Project File > Save Scene / File > Save Project.

    Wichtig

    Wenn Sie die Unity-Setup Komponente für dieses Projekt (Desktop-App) überspringen und direkt mit dem Code fortfahren möchten, können Sie dieses. unitypackage herunterladen, es als benutzerdefiniertes Paketin Ihr Projekt importieren und dann aus Kapitel 9fortfahren.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. Sie müssen weiterhin die Skript Komponenten hinzufügen.You will still need to add the script components.

Kapitel 8: Importieren der DLLs in UnityChapter 8 - Importing the DLLs in Unity

Sie verwenden Azure Storage für Unity (das wiederum das .NET SDK für Azure nutzt).You will be using Azure Storage for Unity (which itself leverages the .Net SDK for Azure). Weitere Informationen finden Sie unter diesem Link zu Azure Storage für Unity.For more information follow this link about Azure Storage for Unity.

Zurzeit gibt es ein bekanntes Problem in Unity, das erfordert, dass Plug-ins nach dem Importieren neu konfiguriert werden.There is currently a known issue in Unity which requires plugins to be reconfigured after import. Diese Schritte (4-7 in diesem Abschnitt) werden nicht mehr benötigt, nachdem der Fehler behoben wurde.These steps (4 - 7 in this section) will no longer be required after the bug has been resolved.

Um das SDK in Ihr eigenes Projekt zu importieren, stellen Sie sicher, dass Sie das neueste . unitypackage von GitHub heruntergeladen haben.To import the SDK into your own project, make sure you have downloaded the latest .unitypackage from GitHub. Gehen Sie nun wie folgt vor:Then, do the following:

  1. Fügen Sie das . unitypackage zu Unity hinzu, indem Sie die Menüoption Assets > Import Package > Custom Package verwenden.Add the .unitypackage to Unity by using the Assets > Import Package > Custom Package menu option.

  2. Im Feld " Unity-Paket importieren ", das angezeigt wird, können Sie unter * *Plugin > * Storage * * * die Option Alles auswählen.In the Import Unity Package box that pops up, you can select everything under **Plugin > *Storage***. Deaktivieren Sie alles andere, da es für diesen Kurs nicht benötigt wird.Uncheck everything else, as it is not needed for this course.

    in Paket importieren

  3. Klicken Sie auf die Schaltfläche *importieren _, um die Elemente Ihrem Projekt hinzuzufügen.Click the *Import _ button to add the items to your project.

  4. Wechseln Sie in der Projektansicht unter Plug-in zum Ordner _ *Storage**, und wählen Sie nur die folgenden Plug- ins aus: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

alle Plattformen deaktivieren

  1. Wenn Sie diese speziellen Plug-Ins ausgewählt haben, deaktivieren Sie eine beliebige Plattform , deaktivieren Sie wsaplayer , und klicken Sie auf anwenden.With these specific plugins selected, uncheck Any Platform and uncheck WSAPlayer then click Apply.

    Platt Form-DLLs anwenden

    Hinweis

    Wir markieren diese bestimmten Plug-ins, sodass Sie nur im Unity-Editor verwendet werden.We are marking these particular plugins to only be used in the Unity Editor. Dies liegt daran, dass im WSA-Ordner verschiedene Versionen der gleichen Plug-ins vorhanden sind, die nach dem Exportieren des Projekts aus Unity verwendet werden.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. Wählen Sie im Ordner Storage -Plug-in nur die Option:In the Storage plugin folder, select only:

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

      "nicht verarbeiten" für DLLs festlegen

  3. Aktivieren Sie das Kontrollkästchen nicht verarbeiten unter Platt Form Einstellungen , und klicken Sie auf *anwenden _.Check the Don't Process box under Platform Settings and click *Apply _.

    keine Verarbeitung anwenden

    Hinweis

    Wir markieren dieses Plug-in "nicht verarbeiten", da das Unity-assemblypatcher Probleme bei der Verarbeitung dieses Plug-ins hat.We are marking this plugin "Don't process", because the Unity assembly patcher has difficulty processing this plugin. Das Plug-in funktioniert weiterhin, auch wenn es nicht verarbeitet wird.The plugin will still work even though it is not processed.

Kapitel 9: Erstellen der tabledescene-Klasse im Desktop Unity-ProjektChapter 9 - Create the TableToScene class in the Desktop Unity project

Sie müssen nun die Skripts erstellen, die den Code enthalten, um diese Anwendung auszuführen.You now need to create the scripts containing the code to run this application.

Das erste Skript, das Sie erstellen müssen, ist _ * tabletoiszene * *, das für Folgendes zuständig ist:The first script you need to create is _*TableToScene**, which is responsible for:

  • Lesen von Entitäten in der Azure-Tabelle.Reading entities within the Azure Table.
  • Bestimmen Sie anhand der Tabellendaten, welche Objekte zu erzeugen sind und an welcher Position.Using the Table data, determine which objects to spawn, and in which position.

Das zweite Skript, das Sie erstellen müssen, ist cloudscene, das für Folgendes zuständig ist:The second script you need to create is CloudScene, which is responsible for:

  • Registrieren des Linksklick Ereignisses, um dem Benutzer das Ziehen von Objekten in die Szene zu ermöglichen.Registering the left-click event, to allow the user to drag objects around the scene.
  • Serialisieren der Objektdaten aus dieser Unity-Szene und Senden der Daten an den Azure-Funktionen-app.Serializing the object data from this Unity scene, and sending it to the Azure Function App.

So erstellen Sie diese Klasse:To create this class:

  1. Klicken Sie im Projekt Panel mit der rechten Maustaste auf den Ordner Asset , und Erstellen Sie den > Ordner.Right-click in the Asset Folder located in the Project Panel, Create > Folder. Benennen Sie den Ordner mit Skripts.Name the folder Scripts.

    Ordner für die Skripterstellung

    Ordner zum Erstellen von Skripts 2

  2. Doppelklicken Sie auf den soeben erstellten Ordner, um ihn zu öffnen.Double click on the folder just created, to open it.

  3. Klicken Sie mit der rechten Maustaste in den Ordner Scripts , und klicken Sie auf Create > c#-Skript erstellenRight-click inside the Scripts folder, click Create > C# Script. Benennen Sie das Skript tabledescene.Name the script TableToScene.

    neues c#-Skript  Umbenennen von tableumscenenew c# script TableToScene rename

  4. Doppelklicken Sie auf das Skript, um es in Visual Studio 2017 zu öffnen.Double-click on the script to open it in Visual Studio 2017.

  5. Fügen Sie die folgenden Namespaces hinzu:Add the following namespaces:

    using Microsoft.WindowsAzure.Storage;
    using Microsoft.WindowsAzure.Storage.Auth;
    using Microsoft.WindowsAzure.Storage.Table;
    using UnityEngine;
    
  6. Fügen Sie in der-Klasse die folgenden Variablen ein: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 -- ";
    

    Hinweis

    Ersetzen Sie den Wert Accountname durch den Namen Ihres Azure Storage dienstanamens und accountkey durch den Schlüsselwert im Azure-Portal (siehe Abbildung unten) im Azure Storage-Dienst.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).

    Kontoschlüssel abrufen

  7. Fügen Sie jetzt die Methoden Start () und Awa() hinzu, um die-Klasse zu initialisieren.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. Fügen Sie innerhalb der tabledescene -Klasse die Methode hinzu, die die Werte aus der Azure-Tabelle abruft, und verwenden Sie Sie, um die entsprechenden primitiven in der Szene zu erzeugen.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. Außerhalb der tabletoscene -Klasse müssen Sie die Klasse definieren, die von der Anwendung verwendet wird, um die Tabellen Entitäten zu serialisieren und zu deserialisieren.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. Stellen Sie sicher, dass Sie Speichern , bevor Sie zum Unity-Editor zurückkehren.Make sure you Save before going back to the Unity Editor.

  11. Klicken Sie im Hierarchie Panel auf die Hauptkamera , damit die Eigenschaften im Inspektor angezeigt werden.Click the Main Camera from the Hierarchy panel, so that its properties appear in the Inspector.

  12. Wenn der Ordner Scripts geöffnet ist, wählen Sie die tabletoscene -Skriptdatei aus, und ziehen Sie Sie auf die Hauptkamera.With the Scripts folder open, select the script TableToScene file and drag it onto the Main Camera. Das Ergebnis sollte wie folgt lauten:The result should be as below:

    Skript zur Hauptkamera hinzufügen

Kapitel 10: Erstellen der cloudscene-Klasse im Desktop Unity-ProjektChapter 10 - Create the CloudScene class in the Desktop Unity Project

Das zweite Skript, das Sie erstellen müssen, ist cloudscene, das für Folgendes zuständig ist:The second script you need to create is CloudScene, which is responsible for:

  • Registrieren des Linksklick Ereignisses, um dem Benutzer das Ziehen von Objekten in die Szene zu ermöglichen.Registering the left-click event, to allow the user to drag objects around the scene.

  • Serialisieren der Objektdaten aus dieser Unity-Szene und Senden der Daten an den Azure-Funktionen-app.Serializing the object data from this Unity scene, and sending it to the Azure Function App.

So erstellen Sie das zweite Skript:To create the second script:

  1. Klicken Sie mit der rechten Maustaste in den Ordner Scripts , und klicken Sie auf Erstellen, C- # SkriptRight-click inside the Scripts folder, click Create, C# Script. Benennen des Skripts für cloudsceneName the script CloudScene

    neues c#-Skript  Umbenennen von cloudscenenew c# script rename CloudScene

  2. Fügen Sie die folgenden Namespaces hinzu:Add the following namespaces:

    using Newtonsoft.Json;
    using System.Collections;
    using System.Text;
    using System.Threading.Tasks;
    using UnityEngine;
    using UnityEngine.Networking;
    
  3. Fügen Sie die folgenden Variablen ein: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. Ersetzen Sie den Wert azurefunctionendpoint durch ihre Azure-Funktionen-App-URL im Azure-Funktionen-APP, wie in der folgenden Abbildung gezeigt: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:

    Funktions-URL für Get

  5. Fügen Sie jetzt die Methoden Start () und Awa() hinzu, um die-Klasse zu initialisieren.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. Fügen Sie in der Update () -Methode den folgenden Code hinzu, der die Maus Eingaben und den Zieh Vorgang erkennt, die wiederum gameobjects in der Szene verschieben.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. Wenn der Benutzer ein Objekt gezogen und abgelegt hat, übergibt es den Namen und die Koordinaten des Objekts an die Methode updatecloudscene (), die den Azure Funktionen-App-Dienst aufruft, der die Azure-Tabelle aktualisiert und die Benachrichtigung auslöst.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. Fügen Sie nun wie unten gezeigt die updatecloudscene () -Methode hinzu: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. Speichern des Codes und zurückkehren zu UnitySave the code and return to Unity

  9. Ziehen Sie das cloudscene -Skript auf die Hauptkamera.Drag the CloudScene script onto the Main Camera.

    1. Klicken Sie im Hierarchie Panel auf die Hauptkamera , damit die Eigenschaften im Inspektor angezeigt werden.Click the Main Camera from the Hierarchy panel, so that its properties appear in the Inspector.

    2. Wenn der Ordner Scripts geöffnet ist, wählen Sie das cloudscene -Skript aus, und ziehen Sie es auf die Hauptkamera.With the Scripts folder open, select the CloudScene script and drag it onto the Main Camera. Das Ergebnis sollte wie folgt lauten:The result should be as below:

      Ziehen Sie das cloudskript auf die Hauptkamera

Kapitel 11: Erstellen des Desktop Projekts in UWPChapter 11 - Build the Desktop Project to UWP

Alles, was für den Unity-Abschnitt dieses Projekts erforderlich ist, wurde nun abgeschlossen.Everything needed for the Unity section of this project has now been completed.

  1. Navigieren Sie zu Buildeinstellungen (dateibuildeinstellungen > Build Settings).Navigate to Build Settings (File > Build Settings).

  2. Klicken Sie im Fenster " Buildeinstellungen " auf " Erstellen".From the Build Settings window, click Build.

    Projekt erstellen

  3. Ein Datei-Explorer -Fenster wird angezeigt, in dem Sie aufgefordert werden, einen Speicherort zu erstellen.A File Explorer window will popup, prompting you for a location to Build. Erstellen Sie einen neuen Ordner (indem Sie in der oberen linken Ecke auf neuer Ordner klicken), und nennen Sie ihn " BUILDS".Create a new folder (by clicking New Folder in the top-left corner), and name it BUILDS.

    neuer Ordner für Build

    1. Öffnen Sie den Ordner neue BUILDS , und erstellen Sie einen weiteren Ordner (mehr als einen neuen Ordner ), und nennen Sie ihn " NH _ Desktop _ App".Open the new BUILDS folder, and create another folder (using New Folder once more), and name it NH_Desktop_App.

      Ordnername NH_Desktop_App

    2. Wenn die NH _ -Desktop- _ App ausgewählt ist.With the NH_Desktop_App selected. Klicken Sie auf Ordner auswählen.click Select Folder. Es dauert eine Minute, bis das Projekt erstellt wird.The project will take a minute or so to build.

  4. Im folgenden Build wird der Datei-Explorer angezeigt, in dem der Speicherort des neuen Projekts angezeigt wird.Following build, File Explorer will appear showing you the location of your new project. Es muss jedoch nicht geöffnet werden, da Sie das andere Unity-Projekt zunächst in den nächsten Kapiteln erstellen müssen.No need to open it, though, as you need to create the other Unity project first, in the next few Chapters.

Kapitel 12: Einrichten des gemischten Reality-Unity-ProjektsChapter 12 - Set up Mixed Reality Unity Project

Im folgenden finden Sie eine typische Einrichtung für die Entwicklung mit gemischter Realität und eine gute Vorlage für andere Projekte.The following is a typical set up for developing with the mixed reality, and as such, is a good template for other projects.

  1. Öffnen Sie Unity , und klicken Sie auf neu.Open Unity and click New.

    neues Unity-Projekt

  2. Sie müssen nun einen Unity-Projektnamen angeben und unitymrnotifhub einfügen.You will now need to provide a Unity Project name, insert UnityMRNotifHub. Stellen Sie sicher, dass Projekttyp auf 3D festgelegt ist.Make sure the project type is set to 3D. Legen Sie den Speicherort auf einen geeigneten Speicherort fest (denken Sie daran, dass die Stamm Verzeichnisse besser sind).Set the Location to somewhere appropriate for you (remember, closer to root directories is better). Klicken Sie dann auf Projekt erstellen.Then, click Create project.

    Name unitymrnotishub

  3. Wenn Unity geöffnet ist, sollten Sie überprüfen, dass der Standard Skript-Editor auf Visual Studio festgelegt ist.With Unity open, it is worth checking the default Script Editor is set to Visual Studio. Wechseln Sie Edit zu > Einstellungen bearbeiten, und navigieren Sie dann im neuen Fenster zu externe Tools.Go to Edit > Preferences and then from the new window, navigate to External Tools. Ändern Sie den Editor für externe Skripts in Visual Studio 2017.Change External Script Editor to Visual Studio 2017. Schließen Sie das Fenster " Einstellungen ".Close the Preferences window.

    externen Editor auf vs festlegen

  4. Navigieren Sie als nächstes zu dateibuildeinstellungen > Build Settings , und schalten Sie die Plattform auf universelle Windows-Plattform, indem Sie auf die Schaltfläche Plattform wechseln klicken.Next, go to File > Build Settings and switch the platform to Universal Windows Platform, by clicking on the Switch Platform button.

    Plattformen zu UWP wechseln

  5. Wechseln Sie zu dateibuildeinstellungen > Build Settings , und stellen Sie Folgendes sicher:Go to File > Build Settings and make sure that:

    1. Das Zielgerät ist auf ein beliebiges Gerät festgelegt.Target Device is set to Any Device

      Legen Sie für Microsoft hololens das Zielgerät auf hololens fest.For the Microsoft HoloLens, set Target Device to HoloLens.

    2. Der Buildtyp ist auf D3D festgelegt.Build Type is set to D3D

    3. SDK ist auf neueste installierte Version festgelegt.SDK is set to Latest installed

    4. Visual Studio-Version ist auf neueste installierte Version festgelegt.Visual Studio Version is set to Latest installed

    5. Build und Run sind auf lokaler Computer festgelegt.Build and Run is set to Local Machine

    6. In diesem Fall lohnt es sich, die Szene zu speichern und dem Build hinzuzufügen.While here, it is worth saving the scene, and adding it to the build.

      1. Wählen Sie hierzu die Option geöffnete Szenen hinzufügen aus.Do this by selecting Add Open Scenes. Ein Fenster zum Speichern wird angezeigt.A save window will appear.

        Hinzufügen offener Szenen

      2. Erstellen Sie einen neuen Ordner für dieses und jede zukünftige Szene, und wählen Sie dann die Schaltfläche neuer Ordner aus, um einen neuen Ordner zu erstellen.Create a new folder for this, and any future, scene, then select the New folder button, to create a new folder, name it Scenes.

        neuer Szenen Ordner

      3. Öffnen Sie den neu erstellten Ordner Szenen , geben Sie im Feld Dateiname: Text den Text NH _ Mr _ Scene ein, und klicken Sie dann auf Speichern.Open your newly created Scenes folder, and then in the File name: text field, type NH_MR_Scene, then press Save.

        neue Szene-NH_MR_Scene

    7. Die restlichen Einstellungen in den Buildeinstellungen sollten vorerst als Standard belassen werden.The remaining settings, in Build Settings, should be left as default for now.

  6. Klicken Sie im gleichen Fenster auf die Schaltfläche Player Einstellungen . Dadurch wird der entsprechende Bereich in dem Bereich geöffnet, in dem sich der Inspektor befindet.In the same window click on the Player Settings button, this will open the related panel in the space where the Inspector is located.

    Spieler Einstellungen öffnen

  7. In diesem Bereich müssen einige Einstellungen überprüft werden:In this panel, a few settings need to be verified:

    1. Auf der Registerkarte andere Einstellungen :In the Other Settings tab:

      1. Die Skript Lauf Zeit Version sollte experimentell sein (.NET 4,6-Entsprechung).Scripting Runtime Version should be Experimental (.NET 4.6 Equivalent)

      2. Skripts für die Skript Erstellung sollten *.net Scripting Backend should be **.NET_* _

      3. _ API-Kompatibilitäts Grad* sollte .NET 4,6 lauten_ API Compatibility Level* should be .NET 4.6

        API-Kompatibilität

    2. Weiter unten im Bereich in den XR-Einstellungen (siehe Veröffentlichungs Einstellungen), unterstützt Tick Virtual Reality, wird sichergestellt, dass das Windows Mixed Reality SDK hinzugefügt wurde.Further down the panel, in XR Settings (found below Publish Settings), tick Virtual Reality Supported, make sure the Windows Mixed Reality SDK is added

      Aktualisieren der XR-Einstellungen

    3. Wählen Sie auf der Registerkarte Veröffentlichungs Einstellungen unter Funktionen die folgenden Optionen aus:Within the Publishing Settings tab, under Capabilities, heck:

      • InternetClientInternetClient

        Internet Client Tick

  8. Zurück in den Buildeinstellungen: Unity c#-Projekte sind nicht mehr abgeblendet: Aktivieren Sie das Kontrollkästchen neben this.Back in Build Settings, Unity C# Projects is no longer greyed out: tick the checkbox next to this.

  9. Nachdem Sie diese Änderungen vorgenommen haben, schließen Sie das Fenster Buildeinstellungen.With these changes done, close the Build Settings window.

  10. Speichern Sie Ihre Szene-und Projekt Datei, und speichern Sie das Projekt in der Szene > Save Scene / File > Save Project.Save your Scene and Project File > Save Scene / File > Save Project.

    Wichtig

    Wenn Sie die Unity-Setup Komponente für dieses Projekt (Mixed Reality-APP) überspringen und direkt mit dem Code fortfahren möchten, können Sie dieses. unitypackage herunterladen, es als benutzerdefiniertes Paketin das Projekt importieren und dann aus Kapitel 14fortfahren.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. Sie müssen weiterhin die Skript Komponenten hinzufügen.You will still need to add the script components.

Kapitel 13: Importieren der DLLs im Mixed Reality Unity-ProjektChapter 13 - Importing the DLLs in the Mixed Reality Unity Project

Sie verwenden Azure Storage für die Unity-Bibliothek (in der das .NET SDK für Azure verwendet wird).You will be using Azure Storage for Unity library (which uses the .Net SDK for Azure). Folgen Sie diesem Link zur Verwendung von Azure Storage mit Unity.Please follow this link on how to use Azure Storage with Unity. Zurzeit gibt es ein bekanntes Problem in Unity, das erfordert, dass Plug-ins nach dem Importieren neu konfiguriert werden.There is currently a known issue in Unity which requires plugins to be reconfigured after import. Diese Schritte (4-7 in diesem Abschnitt) werden nicht mehr benötigt, nachdem der Fehler behoben wurde.These steps (4 - 7 in this section) will no longer be required after the bug has been resolved.

Um das SDK in Ihr eigenes Projekt zu importieren, stellen Sie sicher, dass Sie das neueste . unitypackageheruntergeladen haben.To import the SDK into your own project, make sure you have downloaded the latest .unitypackage. Gehen Sie nun wie folgt vor:Then, do the following:

  1. Fügen Sie das von oben heruntergeladene. unitypackage mithilfe der Menüoption Assets > Import Package > Custom Package in Unity hinzu.Add the .unitypackage you downloaded from the above, to Unity by using the Assets > Import Package > Custom Package menu option.

  2. Im Feld " Unity-Paket importieren ", das angezeigt wird, können Sie unter Plug-in- > Speicher alles auswählen.In the Import Unity Package box that pops up, you can select everything under Plugin > Storage.

    Paket importieren

  3. Klicken Sie auf die Schaltfläche importieren , um dem Projekt die Elemente hinzuzufügen.Click the Import button to add the items to your project.

  4. Wechseln Sie in der Projektansicht unter Plug -in zum Ordner Speicher , und wählen Sie nur die folgenden Plug-ins aus: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

    Plug-ins auswählen

  5. Wenn Sie diese speziellen Plug-Ins ausgewählt haben, deaktivieren Sie eine beliebige Plattform , deaktivieren Sie wsaplayer , und klicken Sie auf anwenden.With these specific plugins selected, uncheck Any Platform and uncheck WSAPlayer then click Apply.

    Platt Formänderungen anwenden

    Hinweis

    Sie markieren diese bestimmten Plug-ins, sodass Sie nur im Unity-Editor verwendet werden.You are marking these particular plugins to only be used in the Unity Editor. Dies liegt daran, dass im WSA-Ordner verschiedene Versionen der gleichen Plug-ins vorhanden sind, die nach dem Exportieren des Projekts aus Unity verwendet werden.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. Wählen Sie im Ordner Storage -Plug-in nur die Option:In the Storage plugin folder, select only:

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

      Datendienst Client auswählen

  7. Aktivieren Sie das Kontrollkästchen nicht verarbeiten unter Platt Form Einstellungen , und klicken Sie auf anwenden.Check the Don't Process box under Platform Settings and click Apply.

    nicht verarbeiten

    Hinweis

    Sie Markieren dieses Plug-in "nicht verarbeiten", weil das Unity-assemblypatcher Probleme beim Verarbeiten dieses Plug-ins hat.You are marking this plugin "Don't process" because the Unity assembly patcher has difficulty processing this plugin. Das Plug-in funktioniert weiterhin, auch wenn es nicht verarbeitet wird.The plugin will still work even though it isn't processed.

Kapitel 14: Erstellen der tabledescene-Klasse im Mixed Reality Unity-ProjektChapter 14 - Creating the TableToScene class in the mixed reality Unity project

Die tabledescene -Klasse ist mit der in Kapitel 9erläuterten identisch.The TableToScene class is identical to the one explained in Chapter 9. Erstellen Sie dieselbe Klasse im Mixed Reality-Unity-Projekt, und befolgen Sie dabei dasselbe Verfahren, das in Kapitel 9erläutert wurde.Create the same class in the mixed reality Unity Project following the same procedure explained in Chapter 9.

Nachdem Sie dieses Kapitel abgeschlossen haben, wird diese Klasse in beiden Unity-Projekten auf der Hauptkamera eingerichtet.Once you have completed this Chapter, both of your Unity Projects will have this class set up on the Main Camera.

Kapitel 15: Erstellen der notificationreceiver-Klasse im Mixed Reality Unity-ProjektChapter 15 - Creating the NotificationReceiver class in the Mixed Reality Unity Project

Das zweite Skript, das Sie erstellen müssen, ist " notificationreceiver", das für Folgendes zuständig ist:The second script you need to create is NotificationReceiver, which is responsible for:

  • Registrieren der APP beim Notification Hub bei der Initialisierung.Registering the app with the Notification Hub at initialization.
  • Lauschen auf Benachrichtigungen, die vom Notification Hub stammen.Listening to notifications coming from the Notification Hub.
  • Die Objektdaten werden aus empfangenen Benachrichtigungen deserialisiert.Deserializing the object data from received notifications.
  • Verschieben Sie die gameobjects in der Szene basierend auf den deserialisierten Daten.Move the GameObjects in the scene, based on the deserialized data.

So erstellen Sie das notificationreceiver -Skript:To create the NotificationReceiver script:

  1. Klicken Sie mit der rechten Maustaste in den Ordner Scripts , und klicken Sie auf Erstellen, C- # SkriptRight-click inside the Scripts folder, click Create, C# Script. Benennen Sie das Skript mit notificationreceiver.Name the script NotificationReceiver.

    neuen c#-Skript  Namen mit notificationreceiver erstellencreate new c# script name it NotificationReceiver

  2. Doppelklicken Sie auf das Skript, um es zu öffnen.Double click on the script to open it.

  3. Fügen Sie die folgenden Namespaces hinzu: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. Fügen Sie die folgenden Variablen ein: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. Ersetzen Sie den Wert hubname durch ihren Notification Hub-Dienstnamen und den Wert von hublistenendpoint mit dem Endpunkt Wert auf der Registerkarte Zugriffsrichtlinien, dem Azure Notification Hub-Dienst, im Azure-Portal (siehe Abbildung unten).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).

    Endpunkt der Notification Hubs-Richtlinie einfügen

  6. Fügen Sie jetzt die Methoden Start () und Awa() hinzu, um die-Klasse zu initialisieren.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. Fügen Sie die waitfornotification -Methode hinzu, damit die APP Benachrichtigungen von der Notification Hub-Bibliothek empfangen kann, ohne den Haupt Thread zu klonen: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. Mit der folgenden Methode, initnotificationasync (), wird die Anwendung bei der Initialisierung beim Notification Hub-Dienst registriert.The following method, InitNotificationAsync(), will register the application with the notification Hub Service at initialization. Der Code wird auskommentiert, da Unity das Projekt nicht erstellen kann.The code is commented out as Unity will not be able to Build the project. Wenn Sie das nuget-Paket Azure Messaging in Visual Studio importieren, werden die Kommentare entfernt.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. Der folgende Handler, Channel _ pushnotificationsend (), wird jedes Mal ausgelöst, wenn eine Benachrichtigung empfangen wird.The following handler, Channel_PushNotificationReceived(), will be triggered every time a notification is received. Die Benachrichtigung wird deserialisiert. dabei handelt es sich um die Azure-Tabellen Entität, die in die Desktop Anwendung verschoben wurde. Anschließend wird das zugehörige gameobject in der Mr-Szene an dieselbe Position verschoben.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.

    Wichtig

    Der Code wird auskommentiert, weil der Code auf die Azure Messaging-Bibliothek verweist, die Sie nach der Erstellung des Unity-Projekts mit dem nuget-Paket-Manager in Visual Studio hinzufügen werden.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. Daher kann das Unity-Projekt nicht erstellt werden, es sei denn, es ist auskommentiert. Wenn Sie Ihr Projekt erstellen und dann zu Unity zurückkehren möchten, müssen Sie den Code erneut kommentieren .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. Denken Sie daran, die Änderungen zu speichern, bevor Sie zum Unity-Editor zurückkehren.Remember to save your changes before going back to the Unity Editor.

  11. Klicken Sie im Hierarchie Panel auf die Hauptkamera , damit die Eigenschaften im Inspektor angezeigt werden.Click the Main Camera from the Hierarchy panel, so that its properties appear in the Inspector.

  12. Wenn der Ordner Scripts geöffnet ist, wählen Sie das Skript notificationreceiver aus, und ziehen Sie es auf die Hauptkamera.With the Scripts folder open, select the NotificationReceiver script and drag it onto the Main Camera. Das Ergebnis sollte wie folgt lauten:The result should be as below:

    Benachrichtigungs Empfänger Skript auf Kamera ziehen

    Hinweis

    Wenn Sie diese für Microsoft hololens entwickeln, müssen Sie die Kamera Komponente der Hauptkamera aktualisieren, um Folgendes zu tun:If you are developing this for the Microsoft HoloLens, you will need to update the Main Camera's Camera component, so that:

    • Clear Flags: VolltonfarbeClear Flags: Solid Color
    • Hintergrund: SchwarzBackground: Black

Kapitel 16: Erstellen des Projekts für gemischte Realität in UWPChapter 16 - Build the Mixed Reality Project to UWP

Dieses Kapitel ist mit dem Buildprozess für das vorherige Projekt identisch.This Chapter is identical to build process for the previous project. Alles, was für den Unity-Abschnitt dieses Projekts erforderlich ist, ist nun abgeschlossen, sodass es an der Zeit ist, Sie aus Unity zu erstellen.Everything needed for the Unity section of this project has now been completed, so it is time to build it from Unity.

  1. Navigieren Sie zu Buildeinstellungen ( dateibuildeinstellungen > Build Settings ).Navigate to Build Settings ( File > Build Settings ).

  2. Stellen Sie im Menü Buildeinstellungen sicher, dass Unity c#-Projekte _ getickt ist (sodass Sie die Skripts in diesem Projekt nach dem Build bearbeiten können).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. Klicken Sie anschließend auf _ * Build * *.After this is done, click _*Build**.

    Projekt erstellen

  4. Ein Datei-Explorer -Fenster wird angezeigt, in dem Sie aufgefordert werden, einen Speicherort zu erstellen.A File Explorer window will popup, prompting you for a location to Build. Erstellen Sie einen neuen Ordner (indem Sie in der oberen linken Ecke auf neuer Ordner klicken), und nennen Sie ihn " BUILDS".Create a new folder (by clicking New Folder in the top-left corner), and name it BUILDS.

    Ordner "Builds erstellen"

    1. Öffnen Sie den Ordner neue BUILDS , und erstellen Sie einen weiteren Ordner (mehr als einen neuen Ordner ), und nennen Sie ihn " NH _ Mr _ App".Open the new BUILDS folder, and create another folder (using New Folder once more), and name it NH_MR_App.

      NH_MR_Apps Ordner erstellen

    2. Wenn die _ _ app "NH Mr " ausgewählt ist.With the NH_MR_App selected. Klicken Sie auf Ordner auswählen.click Select Folder. Es dauert eine Minute, bis das Projekt erstellt wird.The project will take a minute or so to build.

  5. Nach dem Build wird ein Datei-Explorer -Fenster am Speicherort des neuen Projekts geöffnet.Following the build, a File Explorer window will open at the location of your new project.

Kapitel 17: Hinzufügen von nuget-Paketen zur unitymrnotifhub-LösungChapter 17 - Add NuGet packages to the UnityMRNotifHub Solution

Warnung

Beachten Sie Folgendes: Nachdem Sie die folgenden nuget-Pakete hinzugefügt haben (und die Auskommentierung des Codes im nächsten Kapitelaufheben), zeigt der Code, wenn er im Unity-Projekt wieder geöffnet wird, Fehler an.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. Wenn Sie zurückgehen und die Bearbeitung im Unity-Editor fortsetzen möchten, benötigen Sie einen Kommentar, mit dem Code erstellt wird, und entfernen Sie den Kommentar später erneut, sobald Sie sich wieder in Visual Studio befinden.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.

Nachdem der gemischte Projektmappenbuild abgeschlossen wurde, navigieren Sie zu dem Projekt mit gemischter Realität, das Sie erstellt haben, und doppelklicken Sie auf die Projektmappendatei (. sln) in diesem Ordner, um die Projekt Mappe mit Visual Studio 2017 zu öffnen.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. Sie müssen nun das nuget-Paket WindowsAzure. Messaging. Managed hinzufügen. Dabei handelt es sich um eine Bibliothek, die zum Empfangen von Benachrichtigungen vom Notification Hub verwendet wird.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.

So importieren Sie das nuget-Paket:To import the NuGet package:

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Ihre Projekt Mappe.In the Solution Explorer, right click on your Solution

  2. Klicken Sie auf nuget-Pakete verwalten.Click on Manage NuGet Packages.

    nuget-Manager öffnen

  3. Wählen Sie die *Registerkarte Durchsuchen_ aus, und suchen* Sie nach _ WindowsAzure. Messaging. Managed**.Select the *Browse_ tab and search for _* WindowsAzure.Messaging.managed**.

    Windows Azure-Messaging Paket suchen

  4. Wählen Sie das Ergebnis aus (wie unten gezeigt), und aktivieren Sie im Fenster rechts das Kontrollkästchen neben Project.Select the result (as shown below), and in the window to the right, select the checkbox next to Project. Dadurch wird ein Tick in das Kontrollkästchen neben Project und das Kontrollkästchen neben dem Projekt Assembly-CSharp und unitymrnotifhub angezeigt.This will place a tick in the checkbox next to Project, along with the checkbox next to the Assembly-CSharp and UnityMRNotifHub project.

    alle Projekte über tacken

  5. Die ursprünglich bereitgestellte Version ist möglicherweise nicht kompatibel mit diesem Projekt.The version initially provided may not be compatible with this project. Klicken Sie daher auf das Dropdown Menü neben Version, und klicken Sie auf Version 0.1.7.9 und dann auf Installieren.Therefore, click on the dropdown menu next to Version, and click Version 0.1.7.9, then click Install.

  6. Die Installation des nuget-Pakets ist nun abgeschlossen.You have now finished installing the NuGet package. Suchen Sie den kommentierten Code, den Sie in die notificationreceiver -Klasse eingegeben haben, und entfernen Sie die Kommentare.Find the commented code you entered in the NotificationReceiver class and remove the comments..

Kapitel 18: unitymrnotiehub-Anwendung bearbeiten, notificationreceiver-KlasseChapter 18 - Edit UnityMRNotifHub application, NotificationReceiver class

Nachdem Sie die nuget-Pakete hinzugefügt haben, müssen Sie den Kommentar für einen Teil des Codes in der notificationreceiver -Klasse aufheben.Following having added the NuGet Packages, you will need to uncomment some of the code within the NotificationReceiver class.

Dies schließt Folgendes ein:This includes:

  1. Der Namespace oben:The namespace at the top:

    using Microsoft.WindowsAzure.Messaging;
    
  2. Sämtlicher Code in der initnotificationsasync () -Methode: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;
            }
        }
    

Warnung

Der obige Code enthält einen Kommentar darin: Stellen Sie sicher, dass Sie diesen Kommentar nicht versehentlich auskommentiert haben (da der Code nicht kompiliert wird, wenn Sie über! verfügen).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. Und schließlich das Channel_PushNotificationReceived -Ereignis: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;
            }
        }
    

Wenn Sie nicht kommentiert sind, stellen Sie sicher, dass Sie speichern, und fahren Sie dann mit dem nächsten Kapitel fort.With these uncommented, ensure that you save, and then proceed to the next Chapter.

Kapitel 19: Zuordnen des Projekts für gemischte Realität zur Store-AppChapter 19 - Associate the mixed reality project to the Store app

Nun müssen Sie das gemischte Reality -Projekt der Store-App zuordnen, die Sie in zu Beginn des Labs erstellt haben.You now need to associate the mixed reality project to the Store App you created in at the start of the lab.

  1. Öffnen Sie die Projektmappe.Open the solution.

  2. Klicken Sie mit der rechten Maustaste auf das UWP-App-Projekt im Projektmappen-Explorer Panel, und wählen Sie dann die Option zum Speichern und Zuordnen der APP zum Store....Right click on the UWP app Project in the Solution Explorer panel, the go to Store, and Associate App with the Store....

    Store-Zuordnung öffnen

  3. Es wird ein neues Fenster mit dem Namen "App dem Windows Store zuordnen" angezeigt.A new window will appear called Associate Your App with the Windows Store. Klicken Sie auf Weiter.Click Next.

    zum nächsten Bildschirm wechseln

  4. Es werden alle Anwendungen geladen, die dem Konto zugeordnet sind, das Sie angemeldet haben.It will load up all the Applications associated with the Account which you have logged in. Wenn Sie nicht bei Ihrem Konto angemeldet sind, können Sie sich auf dieser Seite Anmelden .If you are not logged in to your account, you can Log In on this page.

  5. Suchen Sie den Namen der Store-App , den Sie zu Beginn dieses Tutorials erstellt haben, und wählen Sie ihn aus.Find the Store App name that you created at the start of this tutorial and select it. Klicken Sie dann auf Weiter.Then click Next.

    Suchen und Auswählen Ihres Speicher namens

  6. Klicken Sie auf zuordnen.Click Associate.

    Zuordnen der APP

  7. Ihre APP ist nun der Store-App zugeordnet .Your App is now Associated with the Store App. Dies ist erforderlich, um Benachrichtigungen zu aktivieren.This is necessary for enabling Notifications.

Kapitel 20: Bereitstellen von unitymrnotiehub-und unitydesktopnotiehub-AnwendungenChapter 20 - Deploy UnityMRNotifHub and UnityDesktopNotifHub applications

Dieses Kapitel kann mit zwei Personen einfacher sein, da das Ergebnis sowohl apps, die ausgeführt werden, eine auf dem Computer Desktop und die andere in Ihrem immersiven Headset enthalten.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.

Die immersive Headset-App wartet auf den Empfang von Änderungen an der Szene (Positionsänderungen der lokalen gameobjects), und die Desktop-App nimmt Änderungen an Ihrer lokalen Szene vor (Positionsänderungen), die für die Mr-APP freigegeben werden.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. Es ist sinnvoll, zuerst die Mr-APP und anschließend die Desktop-App bereitzustellen, damit der Empfänger mit dem lauschen beginnen kann.It makes sense to deploy the MR app first, followed by the Desktop app, so that the receiver can begin listening.

So stellen Sie die unitymrnotifhub -App auf Ihrem lokalen Computer bereit:To deploy the UnityMRNotifHub app on your Local Machine:

  1. Öffnen Sie die Projektmappendatei Ihrer unitymrnotilohub -app in Visual Studio 2017.Open the solution file of your UnityMRNotifHub app in Visual Studio 2017.

  2. Wählen Sie Solution Platform auf der Projektmappenplattform die Option x86, lokaler Computer aus.In the Solution Platform, select x86, Local Machine.

  3. Wählen Sie Solution Configuration in der Projektmappenkonfiguration Debuggen.In the Solution Configuration select Debug.

    Projekt Konfiguration festlegen

  4. Wechseln Sie zum Menü Erstellen , und klicken Sie auf Lösung bereitstellen, um die Anwendung auf Ihren Computer zu übertragen.Go to Build menu and click on Deploy Solution to sideload the application to your machine.

  5. Ihre APP sollte nun in der Liste der installierten apps angezeigt werden, die gestartet werden können.Your App should now appear in the list of installed apps, ready to be launched.

So stellen Sie die unitydesktopnotifhub -App auf dem lokalen Computer bereit:To deploy the UnityDesktopNotifHub app on Local Machine:

  1. Öffnen Sie die Projektmappendatei ihrer unitydesktopnotilohub -app in Visual Studio 2017.Open the solution file of your UnityDesktopNotifHub app in Visual Studio 2017.

  2. Wählen Sie Solution Platform auf der Projektmappenplattform die Option x86, lokaler Computer aus.In the Solution Platform, select x86, Local Machine.

  3. Wählen Sie Solution Configuration in der Projektmappenkonfiguration Debuggen.In the Solution Configuration select Debug.

    Projekt Konfiguration festlegen

  4. Wechseln Sie zum Menü Erstellen , und klicken Sie auf Lösung bereitstellen, um die Anwendung auf Ihren Computer zu übertragen.Go to Build menu and click on Deploy Solution to sideload the application to your machine.

  5. Ihre APP sollte nun in der Liste der installierten apps angezeigt werden, die gestartet werden können.Your App should now appear in the list of installed apps, ready to be launched.

  6. Starten Sie die Mixed Reality-Anwendung, gefolgt von der Desktop Anwendung.Launch the mixed reality application, followed by the Desktop application.

Wenn beide Anwendungen ausgeführt werden, verschieben Sie ein Objekt in der Desktop Szene (mit der linken Maustaste).With both applications running, move an object in the desktop scene (using the Left Mouse Button). Diese Positionsänderungen werden lokal, serialisiert und an den Funktionen-App-Dienst gesendet.These positional changes will be made locally, serialized, and sent to the Function App service. Der Funktionen-App-Dienst aktualisiert dann die Tabelle zusammen mit dem Notification Hub.The Function App service will then update the Table along with the Notification Hub. Wenn Sie ein Update erhalten haben, sendet der Notification Hub die aktualisierten Daten direkt an alle registrierten Anwendungen (in diesem Fall die immersive Headset-APP), die dann die eingehenden Daten deserialisiert und die neuen Positionsdaten auf die lokalen Objekte anwendet, sodass Sie in der Szene verschoben werden.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.

Ihre Azure Notification Hubs-Anwendung ist abgeschlossen.Your finished your Azure Notification Hubs application

Herzlichen Glückwunsch, Sie haben eine Mixed Reality-App erstellt, die den Azure Notification Hubs-Dienst nutzt und die Kommunikation zwischen Apps ermöglicht.Congratulations, you built a mixed reality app that leverages the Azure Notification Hubs Service and allow communication between apps.

Endprodukt-Ende

ZusatzübungenBonus exercises

Übung 1Exercise 1

Können Sie herausfinden, wie Sie die Farbe der gameobjects ändern und diese Benachrichtigung an andere apps, die die Szene anzeigen, senden?Can you work out how to change the color of the GameObjects and send that notification to other apps viewing the scene?

Übung 2Exercise 2

Können Sie die gameobjects-Bewegung zu ihrer Mr-app hinzufügen und die aktualisierte Szene in Ihrer Desktop-App sehen?Can you add movement of the GameObjects to your MR app and see the updated scene in your desktop app?