HoloLens (1. Generation) und Azure 308: Geräteübergreifende Benachrichtigungen
Hinweis
Die Tutorials der Mixed Reality Academy wurden unter Berücksichtigung von HoloLens (1. Generation) und Mixed Reality Immersive Headsets entwickelt. Daher ist es uns wichtig, diese Tutorials für Entwickler zu belassen, die noch nach Anleitungen bei der Entwicklung für diese Geräte suchen. Diese Tutorials werden nicht mit den neuesten Toolsets oder Interaktionen aktualisiert, die für HoloLens 2 verwendet werden. Sie werden beibehalten, um weiterhin auf den unterstützten Geräten zu arbeiten. Es wird eine neue Reihe von Tutorials geben, die in Zukunft veröffentlicht werden, um zu veranschaulichen, wie für HoloLens 2 entwickelt werden kann. Dieser Hinweis wird mit einem Link zu diesen Tutorials aktualisiert, sobald sie veröffentlicht werden.
In diesem Kurs erfahren Sie, wie Sie Notification Hubs-Funktionen mithilfe von Azure Notification Hubs, Azure Tables und Azure Functions zu einer Mixed Reality-Anwendung hinzufügen.
Azure Notification Hubs ist ein Microsoft-Dienst, mit dem Entwickler gezielte und personalisierte Pushbenachrichtigungen an jede Beliebige Plattform senden können, die alle in der Cloud unterstützt werden. Dies kann Es Entwicklern ermöglichen, je nach Szenario mit Endbenutzern zu kommunizieren oder sogar zwischen verschiedenen Anwendungen zu kommunizieren. Weitere Informationen finden Sie auf der SeiteAzure Notification Hubs.
Azure Functions ist ein Microsoft-Dienst, mit dem Entwickler kleine Codeelemente (Funktionen) in Azure ausführen können. Dies bietet eine Möglichkeit, Arbeit an die Cloud anstatt an Ihre lokale Anwendung zu delegieren, was viele Vorteile haben kann. Azure Functions unterstützt mehrere Entwicklungssprachen, einschließlich C#, F#, Node.js, Java und PHP. Weitere Informationen finden Sie auf der seite Azure Functions.
Azure Tables ist ein Microsoft-Clouddienst, mit dem Entwickler strukturierte Nicht-SQL-Daten in der Cloud speichern können, sodass sie überall leicht zugänglich sind. Der Dienst verfügt über ein schemaloses Design, das die Entwicklung von Tabellen nach Bedarf ermöglicht, und ist daher sehr flexibel. Weitere Informationen finden Sie auf der SeiteAzure-Tabellen.
Nach Abschluss dieses Kurses verfügen Sie über eine immersive Mixed Reality-Headsetanwendung und eine Desktop-PC-Anwendung, die folgende Aktionen ausführen kann:
Die Desktop-PC-App ermöglicht es dem Benutzer, ein Objekt mit der Maus in den 2D-Raum (X und Y) zu verschieben.
Die Verschiebung von Objekten innerhalb der PC-App wird mithilfe von JSON in Form einer Zeichenfolge mit objekt-ID, Typ und Transformationsinformationen (X- und Y-Koordinaten) an die Cloud gesendet.
Die Mixed Reality-App, die über eine identische Szene mit der Desktop-App verfügt, empfängt Benachrichtigungen zum Verschieben von Objekten vom Notification Hubs-Dienst (der soeben von der Desktop-PC-App aktualisiert wurde).
Nach Dem Empfang einer Benachrichtigung, die die Objekt-ID, den Typ und die Transformationsinformationen enthält, wendet die Mixed Reality-App die empfangenen Informationen auf ihre eigene Szene an.
In Ihrer Anwendung liegt es an Ihnen, wie Sie die Ergebnisse in Ihr Design integrieren. In diesem Kurs erfahren Sie, wie Sie einen Azure-Dienst in Ihr Unity-Projekt integrieren. Es ist Ihre Aufgabe, das Wissen, das Sie aus diesem Kurs gewinnen, zu nutzen, um Ihre Mixed Reality-Anwendung zu verbessern. Dieser Kurs ist ein eigenständiges Tutorial, das keine anderen Mixed Reality Labs direkt umfasst.
Geräteunterstützung
Kurs | HoloLens | Immersive Headsets |
---|---|---|
MR und Azure 308: Geräteübergreifende Benachrichtigungen | ✔️ | ✔️ |
Hinweis
Während sich dieser Kurs hauptsächlich auf Windows Mixed Reality immersiven (VR)-Headsets konzentriert, können Sie das, was Sie in diesem Kurs lernen, auch auf Microsoft HoloLens anwenden. Während Sie den Kurs befolgen, werden Ihnen Hinweise zu allen Änderungen angezeigt, die Sie möglicherweise zur Unterstützung von HoloLens verwenden müssen. Wenn Sie HoloLens verwenden, bemerken Sie möglicherweise ein Echo während der Sprachaufnahme.
Voraussetzungen
Hinweis
Dieses Tutorial richtet sich an Entwickler, die über grundlegende Erfahrungen mit Unity und C# verfügen. Bitte beachten Sie auch, dass die Voraussetzungen und schriftlichen Anweisungen in diesem Dokument entsprechen, was zum Zeitpunkt des Schreibens (Mai 2018) getestet und überprüft wurde. Sie können die neueste Software verwenden, die im Artikel Installieren der Tools aufgeführt ist, obwohl nicht davon ausgegangen werden sollte, dass die Informationen in diesem Kurs perfekt dem entsprechen, was Sie in neuerer Software finden, als die unten aufgeführten.
Wir empfehlen die folgende Hardware und Software für diesen Kurs:
- Ein Entwicklungs-PC, kompatibel mit Windows Mixed Reality für die Entwicklung immersiver (VR)-Headsets
- Windows 10 Fall Creators Update (oder höher) mit aktiviertem Entwicklermodus
- Das neueste Windows 10 SDK
- Unity 2017.4
- Visual Studio 2017
- Ein Windows Mixed Reality immersives Headset (VR) oder Microsoft HoloLens mit aktiviertem Entwicklermodus
- Internetzugriff für Azure-Setup und Zugriff auf Notification Hubs
Vorbereitende Schritte
- Um Probleme beim Erstellen dieses Projekts zu vermeiden, wird dringend empfohlen, das in diesem Tutorial erwähnte Projekt in einem Stammordner oder in der Nähe des Stammordners zu erstellen (lange Ordnerpfade können zur Buildzeit Zu Problemen führen).
- Sie müssen der Besitzer Ihres Microsoft Developer Portals und Ihres Anwendungsregistrierungsportals sein, andernfalls haben Sie in Kapitel 2 keine Berechtigung für den Zugriff auf die App.
Kapitel 1: Erstellen einer Anwendung im Microsoft Developer Portal
Um den Azure Notification Hubs-Dienst verwenden zu können, müssen Sie eine Anwendung im Microsoft Developer Portal erstellen, da Ihre Anwendung registriert werden muss, damit sie Benachrichtigungen senden und empfangen kann.
Melden Sie sich beim Microsoft Developer Portal an.
Sie müssen sich bei Ihrem Microsoft-Konto anmelden.
Klicken Sie im Dashboard auf Neue App erstellen.
Es wird ein Popup angezeigt, in dem Sie einen Namen für Ihre neue App reservieren müssen. Fügen Sie im Textfeld einen geeigneten Namen ein. Wenn der gewählte Name verfügbar ist, wird rechts neben dem Textfeld ein Häkchen angezeigt. Nachdem Sie einen verfügbaren Namen eingefügt haben, klicken Sie unten links im Popup auf die Schaltfläche Produktname reservieren .
Nachdem die App nun erstellt wurde, können Sie mit dem nächsten Kapitel fortfahren.
Kapitel 2: Abrufen der Anmeldeinformationen für neue Apps
Melden Sie sich beim Anwendungsregistrierungsportal an, in dem Ihre neue App aufgeführt wird, und rufen Sie die Anmeldeinformationen ab, die zum Einrichten des Notification Hubs-Diensts im Azure-Portal verwendet werden.
Navigieren Sie zum Anwendungsregistrierungsportal.
Warnung
Sie müssen Ihr Microsoft-Konto verwenden, um sich anzumelden.
Dies muss das Microsoft-Konto sein, das Sie im vorherigen Kapitel mit dem Windows Store-Entwicklerportal verwendet haben.Sie finden Ihre App im Abschnitt Meine Anwendungen . Sobald Sie es gefunden haben, klicken Sie darauf, und Sie gelangen zu einer neuen Seite mit dem App-Namen plus Registrierung.
Scrollen Sie auf der Registrierungsseite nach unten, um den Abschnitt Anwendungsgeheimnisse und die Paket-SID für Ihre App zu finden. Kopieren Sie beide zur Verwendung beim Einrichten des Azure Notification Hubs-Diensts im nächsten Kapitel.
Kapitel 3: Einrichten des Azure-Portals: Erstellen des Notification Hubs-Diensts
Nachdem Ihre App-Anmeldeinformationen abgerufen wurden, müssen Sie zum Azure-Portal wechseln, wo Sie einen Azure Notification Hubs-Dienst erstellen.
Melden Sie sich beim Azure-Portal an.
Hinweis
Wenn Sie noch nicht über ein Azure-Konto verfügen, müssen Sie eines erstellen. Wenn Sie dieses Tutorial in einer Unterrichts- oder Lab-Situation durcharbeiten, bitten Sie Ihren Kursleiter oder einen der Betreuer um Hilfe beim Einrichten Ihres neuen Kontos.
Wenn Sie angemeldet sind, klicken Sie in der oberen linken Ecke auf Neu , suchen Sie nach Notification Hub, und klicken Sie auf DIE EINGABETASTE.
Hinweis
Das Wort Neu wurde in neueren Portalen möglicherweise durch Ressource erstellen ersetzt.
Die neue Seite enthält eine Beschreibung des Notification Hubs-Diensts . Wählen Sie unten links in dieser Eingabeaufforderung die Schaltfläche Erstellen aus, um eine Zuordnung zu diesem Dienst zu erstellen.
Nachdem Sie auf Erstellen geklickt haben:
Fügen Sie den gewünschten Namen für diesen Dienst instance ein.
Geben Sie einen Namespace an, den Sie dieser App zuordnen können.
Wählen Sie einen Standort aus.
Wählen Sie eine Ressourcengruppe aus, oder erstellen Sie eine neue. Eine Ressourcengruppe bietet eine Möglichkeit zum Überwachen, Steuern des Zugriffs, Bereitstellen und Verwalten der Abrechnung für eine Sammlung von Azure-Ressourcen. Es wird empfohlen, alle Azure-Dienste, die einem einzelnen Projekt zugeordnet sind (z. B. diese Labs), in einer gemeinsamen Ressourcengruppe zu speichern.
Wenn Sie mehr über Azure-Ressourcengruppen erfahren möchten, folgen Sie diesem Link zum Verwalten einer Ressourcengruppe.
Wählen Sie ein geeignetes Abonnement aus.
Sie müssen auch bestätigen, dass Sie die für diesen Dienst geltenden Geschäftsbedingungen verstanden haben.
Wählen Sie Erstellen aus.
Nachdem Sie auf Erstellen geklickt haben, müssen Sie warten, bis der Dienst erstellt wurde. Dies kann eine Minute dauern.
Eine Benachrichtigung wird im Portal angezeigt, nachdem die Dienst-instance erstellt wurde.
Klicken Sie in der Benachrichtigung auf die Schaltfläche Zu Ressource wechseln, um Ihre neue Dienst-instance zu erkunden. Sie werden zu Ihrem neuen Notification Hub-Dienst instance weitergeleitet.
Klicken Sie auf der Übersichtsseite auf der Hälfte der Seite auf Windows (WNS). Im Bereich auf der rechten Seite werden zwei Textfelder angezeigt, für die Ihre Paket-SID und Der Sicherheitsschlüssel aus der zuvor eingerichteten App erforderlich sind.
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.
Kapitel 4: Einrichten des Azure-Portals: Erstellen eines Tabellendiensts
Nachdem Sie Ihre Notification Hubs Service-instance erstellt haben, navigieren Sie zurück zu Ihrem Azure-Portal, wo Sie einen Azure Tables-Dienst erstellen, indem Sie eine Speicherressource erstellen.
Wenn Sie noch nicht angemeldet sind, melden Sie sich beim Azure-Portal an.
Klicken Sie nach der Anmeldung in der oberen linken Ecke auf Neu , suchen Sie nach Speicherkonto, und klicken Sie auf DIE EINGABETASTE.
Hinweis
Das Wort Neu wurde in neueren Portalen möglicherweise durch Ressource erstellen ersetzt.
Wählen Sie in der Liste Speicherkonto – Blob, Datei, Tabelle, Warteschlange aus.
Die neue Seite enthält eine Beschreibung des Speicherkontodiensts . Wählen Sie unten links in dieser Eingabeaufforderung die Schaltfläche Erstellen aus, um eine instance dieses Diensts zu erstellen.
Nachdem Sie auf Erstellen geklickt haben, wird ein Bereich angezeigt:
Fügen Sie den gewünschten Namen für diesen Dienst instance ein (muss in Kleinbuchstaben enthalten sein).
Klicken Sie für Bereitstellungsmodell auf Ressourcen-Manager.
Wählen Sie unter Kontoart im Dropdownmenü Speicher (universell v1) aus.
Wählen Sie einen geeigneten Standort aus.
Wählen Sie im Dropdownmenü Replikationdie Option Georedundanter Speicher mit Lesezugriff (RA-GRS) aus.
Klicken Sie unter Leistung auf Standard.
Wählen Sie im Abschnitt Sichere Übertragung erforderlichdie Option Deaktiviert aus.
Wählen Sie im Dropdownmenü Abonnement ein entsprechendes Abonnement aus.
Wählen Sie eine Ressourcengruppe aus, oder erstellen Sie eine neue. Eine Ressourcengruppe bietet eine Möglichkeit zum Überwachen, Steuern des Zugriffs, Bereitstellen und Verwalten der Abrechnung für eine Sammlung von Azure-Ressourcen. Es wird empfohlen, alle Azure-Dienste, die einem einzelnen Projekt zugeordnet sind (z. B. diese Labs), in einer gemeinsamen Ressourcengruppe zu speichern.
Wenn Sie mehr über Azure-Ressourcengruppen erfahren möchten, folgen Sie diesem Link zum Verwalten einer Ressourcengruppe.
Lassen Sie Virtuelle Netzwerkeals Deaktiviert , wenn dies eine Option für Sie ist.
Klicken Sie auf Erstellen.
Nachdem Sie auf Erstellen geklickt haben, müssen Sie warten, bis der Dienst erstellt wurde. Dies kann eine Minute dauern.
Eine Benachrichtigung wird im Portal angezeigt, nachdem die Dienst-instance erstellt wurde. Klicken Sie auf die Benachrichtigungen, um Ihre neue Dienst-instance zu erkunden.
Klicken Sie in der Benachrichtigung auf die Schaltfläche Zu Ressource wechseln, um Ihre neue Dienst-instance zu erkunden. Sie gelangen zur Übersichtsseite ihres neuen Speicherdiensts instance.
Klicken Sie auf der Übersichtsseite auf der rechten Seite auf Tabellen.
Der Bereich auf der rechten Seite wird geändert, um die Tabellendienstinformationen anzuzeigen, wobei Sie eine neue Tabelle hinzufügen müssen. Klicken Sie dazu links oben auf + die Schaltfläche Tabelle.
Es wird eine neue Seite angezeigt, auf der Sie einen Tabellennamen eingeben müssen. Dies ist der Name, den Sie in späteren Kapiteln verwenden, um auf die Daten in Ihrer Anwendung zu verweisen. Fügen Sie einen geeigneten Namen ein, und klicken Sie auf OK.
Nachdem die neue Tabelle erstellt wurde, können Sie sie auf der Seite Tabellendienst (unten) sehen.
Kapitel 5: Abschließen der Azure-Tabelle in Visual Studio
Nachdem Ihr Tabellendienst-Speicherkonto eingerichtet wurde, ist es an der Zeit, Daten hinzuzufügen, die zum Speichern und Abrufen von Informationen verwendet werden. Die Bearbeitung Ihrer Tabellen kann über Visual Studio erfolgen.
Öffnen Sie Visual Studio.
Klicken Sie im Menü aufCloud Exploreranzeigen>.
Die Cloud Explorer wird als angedocktes Element geöffnet (haben Sie Geduld, da das Laden einige Zeit in Anspruch nehmen kann).
Hinweis
Wenn das Abonnement, das Sie zum Erstellen Ihrer Speicherkonten verwendet haben, nicht angezeigt wird, stellen Sie sicher, dass Folgendes vorhanden ist:
Melden Sie sich mit demselben Konto an, das Sie für das Azure-Portal verwendet haben.
Wählen Sie auf der Seite "Kontoverwaltung" Ihr Abonnement aus (möglicherweise müssen Sie einen Filter aus Ihren Kontoeinstellungen anwenden):
Ihre Azure-Clouddienste werden angezeigt. Suchen Sie nach Speicherkonten , und klicken Sie auf den Pfeil links davon, um Ihre Konten zu erweitern.
Nach dem Erweitern sollte Ihr neu erstelltes Speicherkonto verfügbar sein. Klicken Sie auf den Pfeil links neben Ihrem Speicher, und suchen Sie nach dem Erweitern nach Tabellen , und klicken Sie auf den Pfeil daneben, um die Tabelle anzuzeigen, die Sie im letzten Kapitel erstellt haben. Doppelklicken Sie auf Ihre Tabelle.
Die Tabelle wird in der Mitte des Visual Studio-Fensters geöffnet. Klicken Sie auf das Tabellensymbol mit dem + (Plus) darauf.
Ein Fenster wird angezeigt, in dem Sie aufgefordert werden, Entität hinzufügen. Sie erstellen insgesamt drei Entitäten mit jeweils mehreren Eigenschaften. Sie werden feststellen, dass PartitionKey und RowKey bereits bereitgestellt wurden, da diese von der Tabelle verwendet werden, um Ihre Daten zu finden.
Aktualisieren Sie den Wert von PartitionKey und RowKey wie folgt (denken Sie daran, dies für jede hinzuzufügende Zeileneigenschaft zu tun, obwohl Sie den RowKey jedes Mal inkrementieren):
Klicken Sie auf Eigenschaft hinzufügen , um zusätzliche Datenzeilen hinzuzufügen. Stellen Sie sicher, dass Ihre erste leere Tabelle mit der folgenden Tabelle übereinstimmt.
Klicken Sie auf OK , wenn Sie fertig sind.
Warnung
Stellen Sie sicher, dass Sie den Typ der Einträge X, Y und Z in Double geändert haben.
Sie werden feststellen, dass Ihre Tabelle jetzt eine Zeile mit Daten enthält. Klicken Sie erneut auf das + Symbol (Pluszeichen), um eine weitere Entität hinzuzufügen.
Erstellen Sie eine zusätzliche Eigenschaft, und legen Sie dann die Werte der neuen Entität so fest, dass sie mit den unten gezeigten übereinstimmen.
Wiederholen Sie den letzten Schritt, um eine weitere Entität hinzuzufügen. Legen Sie die Werte für diese Entität auf die unten gezeigten werte fest.
Ihre Tabelle sollte jetzt wie unten aussehen.
Sie haben dieses Kapitel abgeschlossen. Stellen Sie sicher, dass Sie speichern.
Kapitel 6: Erstellen einer Azure-Funktions-App
Erstellen Sie eine Azure-Funktions-App, die von der Desktopanwendung aufgerufen wird, um den Tabellendienst zu aktualisieren und eine Benachrichtigung über den Notification Hub zu senden.
Zunächst müssen Sie eine Datei erstellen, die es Ihrer Azure-Funktion ermöglicht, die benötigten Bibliotheken zu laden.
Öffnen Sie den Editor (drücken Sie die Windows-Taste, und geben Sie Editor ein).
Fügen Sie bei geöffnetem Editor die unten stehende JSON-Struktur ein. Nachdem Sie dies getan haben, speichern Sie es auf Ihrem Desktop als project.json. Es ist wichtig, dass die Benennung korrekt ist: Stellen Sie sicher, dass keine .txt Dateierweiterung vorhanden ist. Diese Datei definiert die Bibliotheken, die Ihre Funktion verwenden wird. Wenn Sie NuGet verwendet haben, wird sie vertraut sein.
{ "frameworks": { "net46":{ "dependencies": { "WindowsAzure.Storage": "7.0.0", "Microsoft.Azure.NotificationHubs" : "1.0.9", "Microsoft.Azure.WebJobs.Extensions.NotificationHubs" :"1.1.0" } } } }
Melden Sie sich beim Azure-Portal an.
Wenn Sie angemeldet sind, klicken Sie in der oberen linken Ecke auf Neu , suchen Sie nach Funktions-App, und drücken Sie die EINGABETASTE.
Hinweis
Das Wort Neu wurde in neueren Portalen möglicherweise durch Ressource erstellen ersetzt.
Die neue Seite enthält eine Beschreibung des Funktions-App-Diensts . Wählen Sie unten links in dieser Eingabeaufforderung die Schaltfläche Erstellen aus, um eine Zuordnung zu diesem Dienst zu erstellen.
Nachdem Sie auf Erstellen geklickt haben, geben Sie Folgendes ein:
Fügen Sie unter App-Name den gewünschten Namen für diesen Dienst instance ein.
Wählen Sie ein Abonnement aus.
Wählen Sie den für Sie geeigneten Tarif aus. Wenn Sie zum ersten Mal eine Funktions-App Service erstellen, sollte Ihnen ein Free-Tarif zur Verfügung stehen.
Wählen Sie eine Ressourcengruppe aus, oder erstellen Sie eine neue. Eine Ressourcengruppe bietet eine Möglichkeit zum Überwachen, Steuern des Zugriffs, Bereitstellen und Verwalten der Abrechnung für eine Sammlung von Azure-Ressourcen. Es wird empfohlen, alle Azure-Dienste, die einem einzelnen Projekt zugeordnet sind (z. B. diese Labs), in einer gemeinsamen Ressourcengruppe zu speichern.
Wenn Sie mehr über Azure-Ressourcengruppen erfahren möchten, folgen Sie diesem Link zum Verwalten einer Ressourcengruppe.
Klicken Sie unter Betriebssystem auf Windows, da dies die beabsichtigte Plattform ist.
Wählen Sie einen Hostingplan aus (in diesem Tutorial wird ein Verbrauchsplan verwendet.
Wählen Sie einen Speicherortaus (wählen Sie denselben Speicherort wie den Speicher aus, den Sie im vorherigen Schritt erstellt haben)
Für den Abschnitt Speichermüssen Sie den Speicherdienst auswählen, den Sie im vorherigen Schritt erstellt haben.
Sie benötigen Application Insights in dieser App nicht. Lassen Sie sie also aus.
Klicken Sie auf Erstellen.
Nachdem Sie auf Erstellen geklickt haben, müssen Sie warten, bis der Dienst erstellt wurde. Dies kann eine Minute dauern.
Eine Benachrichtigung wird im Portal angezeigt, nachdem die Dienst-instance erstellt wurde.
Klicken Sie auf die Benachrichtigungen, um Ihre neue Dienst-instance zu erkunden.
Klicken Sie in der Benachrichtigung auf die Schaltfläche Zu Ressource wechseln, um Ihre neue Dienst-instance zu erkunden.
Klicken Sie auf das + (Plus-)Symbol neben Funktionen, um neu zu erstellen.
Im zentralen Bereich wird das Fenster Funktionserstellung angezeigt. Ignorieren Sie die Informationen in der oberen Hälfte des Bereichs, und klicken Sie auf Benutzerdefinierte Funktion, die sich unten (im blauen Bereich wie unten) befindet.
Auf der neuen Seite im Fenster werden verschiedene Funktionstypen angezeigt. Scrollen Sie nach unten, um die violetten Typen anzuzeigen, und klicken Sie auf HTTP PUT-Element .
Wichtig
Möglicherweise müssen Sie auf der Seite weiter scrollen (und dieses Bild sieht möglicherweise nicht genau gleich aus, wenn Azure-Portal-Updates durchgeführt wurden). Sie suchen jedoch nach einem Element namens HTTP PUT.
Das HTTP PUT-Fenster wird angezeigt, in dem Sie die Funktion konfigurieren müssen (abbildung unten).
Wählen Sie für Sprache im Dropdownmenü C# aus.
Geben Sie unter Name einen geeigneten Namen ein.
Wählen Sie im Dropdownmenü Authentifizierungsebene die Option Funktion aus.
Für den Abschnitt Tabellenname müssen Sie genau den Namen verwenden, den Sie zuvor zum Erstellen Ihres Tabellendiensts verwendet haben (einschließlich der gleichen Groß-/Kleinschreibung).
Verwenden Sie im Abschnitt Speicherkontoverbindung das Dropdownmenü, und wählen Sie dort Ihr Speicherkonto aus. Wenn er nicht vorhanden ist, klicken Sie neben dem Abschnittstitel auf den Link Neu , um einen anderen Bereich anzuzeigen, in dem Ihr Speicherkonto aufgeführt werden soll.
Klicken Sie auf Erstellen . Dadurch erhalten Sie eine Benachrichtigung, dass Ihre Einstellungen erfolgreich aktualisiert wurden.
Nachdem Sie auf Erstellen geklickt haben, werden Sie zum Funktions-Editor weitergeleitet.
Fügen Sie den folgenden Code in den Funktions-Editor ein (ersetzen Sie den Code in der Funktion):
#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 empfängt die Funktion den Namen und die Position des Objekts, das in der Unity-Szene verschoben wurde (als C#-Objekt namens UnityGameObject). Dieses Objekt wird dann verwendet, um die Objektparameter in der erstellten Tabelle zu aktualisieren. Anschließend ruft die Funktion den erstellten Notification Hub-Dienst auf, der alle abonnierten Anwendungen benachrichtigt.
Wenn der Code vorhanden ist, klicken Sie auf Speichern.
Klicken Sie als Nächstes rechts < auf der Seite auf das Symbol (Pfeil).
Ein Panel wird von rechts eingeblendt. Klicken Sie in diesem Bereich auf Hochladen, und ein Dateibrowser wird angezeigt.
Navigieren Sie zu der project.json Datei, die Sie zuvor im Editor erstellt haben, und klicken Sie darauf, und klicken Sie dann auf die Schaltfläche Öffnen . Diese Datei definiert die Bibliotheken, die Ihre Funktion verwendet.
Wenn die Datei hochgeladen wurde, wird sie im Bereich auf der rechten Seite angezeigt. Wenn Sie darauf klicken, wird sie im Funktions-Editor geöffnet. Es muss genau wie die nächste Abbildung (unter Schritt 23) aussehen.
Klicken Sie dann im Bereich auf der linken Seite unter Funktionen auf den Link Integrieren .
Klicken Sie auf der nächsten Seite in der oberen rechten Ecke auf Erweiterter Editor (wie unten dargestellt).
Im mittleren Bereich wird eine function.json Datei geöffnet, die durch den folgenden Codeausschnitt ersetzt werden muss. Dies definiert die Funktion, die Sie erstellen, und die Parameter, die an die Funktion übergeben werden.
{ "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" } ] }
Ihr Editor sollte nun wie in der folgenden Abbildung aussehen:
Möglicherweise stellen Sie fest, dass die Eingabeparameter, die Sie gerade eingefügt haben, möglicherweise nicht mit Ihren Tabellen- und Speicherdetails übereinstimmen und daher mit Ihren Informationen aktualisiert werden müssen. Tun Sie dies hier nicht, da es als Nächstes behandelt wird. Klicken Sie einfach auf den Link Standard-Editor in der oberen rechten Ecke der Seite, um zurück zu wechseln.
Klicken Sie im Standard-Editor unter Eingaben auf Azure Table Storage (Tabelle).
Stellen Sie sicher, dass folgendes mit Ihren Informationen übereinstimmt, da sie möglicherweise anders sind (es gibt eine Abbildung unter den folgenden Schritten):
Tabellenname: Der Name der Tabelle, die Sie in Ihrem Azure Storage-Tabellendienst erstellt haben.
Speicherkontoverbindung: Klicken Sie auf Neu, das neben dem Dropdownmenü angezeigt wird, und rechts neben dem Fenster wird ein Bereich angezeigt.
Wählen Sie Ihr Speicherkonto aus, das Sie zuvor zum Hosten der Funktions-Apps erstellt haben.
Sie werden feststellen, dass der Wert für die Speicherkontoverbindung erstellt wurde.
Stellen Sie sicher, dass Sie speichern drücken, sobald Sie fertig sind.
Die Seite Eingaben sollte nun mit der unten angegebenen übereinstimmen und Ihre Informationen anzeigen.
Klicken Sie als Nächstes unter Ausgaben auf Azure Notification Hub (Benachrichtigung). Stellen Sie sicher, dass Die folgenden Informationen mit Ihren Informationen übereinstimmen, da sie möglicherweise anders sind (es gibt eine Abbildung unter den folgenden Schritten):
Notification Hub-Name: Dies ist der Name Des Notification Hub-Diensts instance, den Sie zuvor erstellt haben.
Notification Hubs-Namespaceverbindung: Klicken Sie auf Neu, das neben dem Dropdownmenü angezeigt wird.
Das Popupfenster Verbindung wird angezeigt (siehe Abbildung unten), in dem Sie den Zuvor eingerichteten Namespace des Notification Hubs auswählen müssen.
Wählen Sie ihren Notification Hub-Namen im mittleren Dropdownmenü aus.
Legen Sie das Dropdownmenü Richtlinie auf DefaultFullSharedAccessSignature fest.
Klicken Sie auf die Schaltfläche Auswählen , um zurückzukehren.
Die Seite Ausgaben sollte nun mit dem unten angegebenen übereinstimmen, aber stattdessen mit Ihren Informationen. Stellen Sie sicher, dass Sie auf Speichern klicken.
Warnung
Bearbeiten Sie den Notification Hub-Namen nicht direkt (dies sollte alles mit dem Erweiterter Editor erfolgen, vorausgesetzt, Sie haben die vorherigen Schritte ordnungsgemäß ausgeführt.
An diesem Punkt sollten Sie die Funktion testen, um sicherzustellen, dass sie funktioniert. Gehen Sie dazu wie folgt vor:
Navigieren Sie noch einmal zur Funktionsseite:
Klicken Sie auf der Funktionsseite ganz rechts auf der Seite auf die Registerkarte Test , um das Blatt Test zu öffnen:
Fügen Sie in das Textfeld Anforderungstext des Blatts den folgenden Code ein:
{ "Type":null, "X":3, "Y":0, "Z":1, "PartitionKey":null, "RowKey":"Obj2", "Timestamp":"0001-01-01T00:00:00+00:00", "ETag":null }
Wenn der Testcode vorhanden ist, klicken Sie unten rechts auf die Schaltfläche Ausführen , und der Test wird ausgeführt. Die Ausgabeprotokolle des Tests werden im Konsolenbereich unter Ihrem Funktionscode angezeigt.
Warnung
Wenn der obige Test fehlschlägt, müssen Sie überprüfen, ob Sie die oben genannten Schritte genau ausgeführt haben, insbesondere die Einstellungen im Integrationsbereich.
Kapitel 7: Einrichten des Desktop-Unity-Projekts
Wichtig
Die Desktopanwendung, die Sie jetzt erstellen, funktioniert nicht im Unity-Editor. Es muss außerhalb des Editor ausgeführt werden, nachdem die Anwendung erstellt wurde, indem Visual Studio (oder die bereitgestellte Anwendung) verwendet wird.
Es folgt ein typisches Setup für die Entwicklung mit Unity und Mixed Reality und ist daher eine gute Vorlage für andere Projekte.
Richten Sie Ihr immersives Mixed Reality-Headset ein und testen Sie es.
Hinweis
Für diesen Kurs benötigen Sie keine Motion Controller. Wenn Sie Unterstützung beim Einrichten des immersiven Headsets benötigen, folgen Sie diesem Link zum Einrichten von Windows Mixed Reality.
Öffnen Sie Unity , und klicken Sie auf Neu.
Sie müssen einen Unity-Projektnamen angeben und UnityDesktopNotifHub einfügen. Stellen Sie sicher, dass der Projekttyp auf 3D festgelegt ist. Legen Sie den Speicherort auf einen für Sie geeigneten Speicherort fest (denken Sie daran, dass näher an Stammverzeichnissen besser ist). Klicken Sie dann auf Projekt erstellen.
Wenn Unity geöffnet ist, empfiehlt es sich, die Standardskript Editor auf Visual Studio festgelegt ist, zu überprüfen. Wechseln Sie zu Einstellungen bearbeiten>, und navigieren Sie dann im neuen Fenster zu Externe Tools. Ändern Sie external script Editor in Visual Studio 2017. Schließen Sie das Fenster Einstellungen .
Wechseln Sie als Nächstes zuDateibuildeinstellungen>, wählen Sie Universelle Windows-Plattform aus, und klicken Sie dann auf die Schaltfläche Plattform wechseln, um Ihre Auswahl anzuwenden.
Stellen Sie während derDateierstellungseinstellungen> folgendes sicher:
Zielgerät ist auf "Beliebiges Gerät" festgelegt.
Diese Anwendung ist für Ihren Desktop, muss also "Beliebiges Gerät" sein.
Buildtyp ist auf D3D festgelegt.
SDK ist auf Latest installed (Neueste Installation) festgelegt.
Visual Studio-Version ist auf Zuletzt installiert festgelegt.
Build und Ausführen ist auf Lokaler Computer festgelegt.
Hier lohnt es sich, die Szene zu speichern und dem Build hinzuzufügen.
Wählen Sie hierzu Geöffnete Szenen hinzufügen aus. Ein Speicherfenster wird angezeigt.
Erstellen Sie einen neuen Ordner für diese und jede zukünftige Szene, und wählen Sie dann die Schaltfläche Neuer Ordner aus, um einen neuen Ordner zu erstellen, nennen Sie ihn Szenen.
Öffnen Sie den neu erstellten Ordner Scenes , geben Sie dann im Textfeld Dateiname:NH_Desktop_Scene ein, und drücken Sie dann Speichern.
Die restlichen Einstellungen in Buildeinstellungen sollten vorerst als Standard beibehalten werden.
Klicken Sie im selben Fenster auf die Schaltfläche Spielereinstellungen . Dadurch wird der zugehörige Bereich in dem Bereich geöffnet, in dem sich der Inspektor befindet.
In diesem Bereich müssen einige Einstellungen überprüft werden:
Auf der Registerkarte Andere Einstellungen :
Die Skriptruntimeversion sollte experimentell (.NET 4.6-Äquivalent) sein.
Skripterstellungs-Back-End sollte .NET sein
API-Kompatibilitätsgrad sollte .NET 4.6 sein
Aktivieren Sie auf der Registerkarte Veröffentlichungseinstellungen unter Funktionen Folgendes:
InternetClient
Zurück unter BuildeinstellungenUnity C#-Projekte ist nicht mehr abgeblendet. aktivieren Sie das Kontrollkästchen daneben.
Schließen Sie das Fenster Buildeinstellungen .
Speichern Sie Ihre Szene und Projektdatei>Szene speichern/Datei>Projekt speichern.
Wichtig
Wenn Sie die Unity-Komponente Einrichten für dieses Projekt (Desktop-App) überspringen und direkt mit dem Code fortfahren möchten, können Sie dieses UNITY-Paket herunterladen, es als benutzerdefiniertes Paket in Ihr Projekt importieren und dann in Kapitel 9 fortfahren. Sie müssen weiterhin die Skriptkomponenten hinzufügen.
Kapitel 8: Importieren der DLLs in Unity
Sie verwenden Azure Storage für Unity (das selbst das .NET SDK für Azure nutzt). Weitere Informationen findest du unter diesem Link zu Azure Storage für Unity.
Derzeit gibt es ein bekanntes Problem in Unity, bei dem Plug-Ins nach dem Import neu konfiguriert werden müssen. Diese Schritte (4 bis 7 in diesem Abschnitt) sind nach der Behebung des Fehlers nicht mehr erforderlich.
Um das SDK in Ihr eigenes Projekt zu importieren, stellen Sie sicher, dass Sie das neueste UNITY-Paket von GitHub heruntergeladen haben. Führen Sie anschließend folgende Schritte aus:
Fügen Sie unitypackage mithilfe der Menüoption Assets > Import Package > Custom Package (Benutzerdefiniertes Paket importieren ) zu Unity hinzu.
Im eingeblendeten Feld Unity-Paket importieren können Sie unter Plug-In-Speicher> alles auswählen. Deaktivieren Sie alles andere, da es für diesen Kurs nicht benötigt wird.
Klicken Sie auf die Schaltfläche Importieren , um die Elemente zu Ihrem Projekt hinzuzufügen.
Wechseln Sie in der Projektansicht unter Plug-Ins zum Ordner Storage, und wählen Sie nur die folgenden Plug-Ins aus:
- Microsoft.Data.Edm
- Microsoft.Data.OData
- Microsoft.WindowsAzure.Storage
- Newtonsoft.Json
- System.Spatial
Wenn Sie diese spezifischen Plug-Ins ausgewählt haben, deaktivieren SieBeliebige Plattform , und deaktivieren SieWSAPlayer , und klicken Sie dann auf Übernehmen.
Hinweis
Wir kennzeichnen diese speziellen Plug-Ins nur für die Verwendung im Unity-Editor. Dies liegt daran, dass es verschiedene Versionen der gleichen Plug-Ins im WSA-Ordner gibt, die nach dem Export des Projekts aus Unity verwendet werden.
Wählen Sie im Ordner Storage-Plug-In nur Folgendes aus:
Microsoft.Data.Services.Client
Aktivieren Sie das Kontrollkästchen Nicht verarbeiten unter Plattformeinstellungen , und klicken Sie auf Übernehmen.
Hinweis
Wir markieren dieses Plug-In als "Nicht verarbeiten", da der Unity-Assemblypatcher Schwierigkeiten bei der Verarbeitung dieses Plug-Ins hat. Das Plug-In funktioniert weiterhin, obwohl es nicht verarbeitet wird.
Kapitel 9: Erstellen der TableToScene-Klasse im Desktop Unity-Projekt
Sie müssen nun die Skripts erstellen, die den Code zum Ausführen dieser Anwendung enthalten.
Das erste Skript, das Sie erstellen müssen, ist TableToScene, das für Folgendes zuständig ist:
- Lesen von Entitäten in der Azure-Tabelle.
- Bestimmen Sie mithilfe der Tabellendaten, welche Objekte an welcher Position erstellt werden sollen.
Das zweite Skript, das Sie erstellen müssen, ist CloudScene, das für Folgendes zuständig ist:
- Registrieren des Linksklick-Ereignisses, damit der Benutzer Objekte in die Szene ziehen kann.
- Serialisieren der Objektdaten aus dieser Unity-Szene und Senden an die Azure-Funktions-App.
So erstellen Sie diese Klasse:
Klicken Sie mit der rechten Maustaste auf den Ressourcenordner im Projektbereich,Ordnererstellen>. Nennen Sie den Ordner Skripts.
Doppelklicken Sie auf den soeben erstellten Ordner, um ihn zu öffnen.
Klicken Sie mit der rechten Maustaste in den Ordner Skripts, und klicken Sie aufC#-Skript erstellen>. Nennen Sie das Skript TableToScene.
Doppelklicken Sie auf das Skript, um es in Visual Studio 2017 zu öffnen.
Fügen Sie die folgenden Namespaces hinzu:
using Microsoft.WindowsAzure.Storage; using Microsoft.WindowsAzure.Storage.Auth; using Microsoft.WindowsAzure.Storage.Table; using UnityEngine;
Fügen Sie in der -Klasse die folgenden Variablen ein:
/// <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 Ihren Azure Storage-Dienstnamen und den AccountKey-Wert durch den Schlüsselwert im Azure Storage-Dienst im Azure-Portal (siehe Abbildung unten).
Fügen Sie nun die Methoden Start() und Awake() hinzu, um die Klasse zu initialisieren.
/// <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(); }
Fügen Sie innerhalb der TableToScene-Klasse die Methode hinzu, die die Werte aus der Azure-Tabelle abruft, und verwenden Sie sie, um die entsprechenden Grundtypen in der Szene zu erzeugen.
/// <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); }
Außerhalb der TableToScene-Klasse müssen Sie die Klasse definieren, die von der Anwendung zum Serialisieren und Deserialisieren der Tabellenentitäten verwendet wird.
/// <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; } }
Stellen Sie sicher, dass Sie speichern, bevor Sie zum Unity-Editor zurückkehren.
Klicken Sie im Bereich Hierarchie auf die Hauptkamera, damit die zugehörigen Eigenschaften im Inspektor angezeigt werden.
Wählen Sie im geöffneten Ordner Skripts die Skriptdatei TableToScene aus, und ziehen Sie sie auf die Hauptkamera. Das Ergebnis sollte wie folgt aussehen:
Kapitel 10: Erstellen der CloudScene-Klasse im Desktop Unity-Projekt
Das zweite Skript, das Sie erstellen müssen, ist CloudScene, das für Folgendes zuständig ist:
Registrieren des Linksklick-Ereignisses, damit der Benutzer Objekte in die Szene ziehen kann.
Serialisieren der Objektdaten aus dieser Unity-Szene und Senden an die Azure-Funktions-App.
So erstellen Sie das zweite Skript:
Klicken Sie mit der rechten Maustaste in den Ordner Skripts , und klicken Sie auf Erstellen, C#-Skript. Nennen Sie das Skript CloudScene.
Fügen Sie die folgenden Namespaces hinzu:
using Newtonsoft.Json; using System.Collections; using System.Text; using System.Threading.Tasks; using UnityEngine; using UnityEngine.Networking;
Fügen Sie die folgenden Variablen ein:
/// <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;
Ersetzen Sie den Wert azureFunctionEndpoint durch Ihre Azure-Funktions-App-URL, die Sie im Azure-Funktions-App Service im Azure-Portal finden, wie in der folgenden Abbildung dargestellt:
Fügen Sie nun die Methoden Start() und Awake() hinzu, um die Klasse zu initialisieren.
/// <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(); }
Fügen Sie in der Update()- Methode den folgenden Code hinzu, der die Mauseingabe erkennt und ziehen wird, wodurch wiederum GameObjects in der Szene verschoben wird. Wenn der Benutzer ein Objekt gezogen und gelöscht hat, wird der Name und die Koordinaten des Objekts an die UpdateCloudScene()-Methode übergeben, die den Azure Function App Service aufruft, der die Azure-Tabelle aktualisiert und die Benachrichtigung auslöst.
/// <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)); } }
Fügen Sie nun die UpdateCloudScene()- Methode wie folgt hinzu:
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(); } }
Speichern Sie den Code, und kehren Sie zu Unity zurück.
Ziehen Sie das CloudScene-Skript auf die Hauptkamera.
Klicken Sie im Bereich Hierarchie auf die Hauptkamera, damit die zugehörigen Eigenschaften im Inspektor angezeigt werden.
Wählen Sie im geöffneten Ordner Skripts das Skript CloudScene aus, und ziehen Sie es auf die Hauptkamera. Das Ergebnis sollte wie folgt aussehen:
Kapitel 11: Erstellen des Desktopprojekts für UWP
Alles, was für den Unity-Abschnitt dieses Projekts benötigt wird, ist nun abgeschlossen.
Navigieren Sie zu Buildeinstellungen (Dateibuildeinstellungen>).
Klicken Sie im Fenster Buildeinstellungen auf Erstellen.
Ein Explorer Fenster wird angezeigt, in dem Sie aufgefordert werden, einen Speicherort zum Erstellen anzugeben. Erstellen Sie einen neuen Ordner (indem Sie oben links auf Neuer Ordner klicken), und nennen Sie ihn BUILDS.
Öffnen Sie den neuen Ordner BUILDS , und erstellen Sie einen weiteren Ordner (mit neuer Ordner erneut), und nennen Sie ihn NH_Desktop_App.
Mit ausgewähltem NH_Desktop_App . Klicken Sie auf Ordner auswählen. Die Erstellung des Projekts dauert etwa eine Minute.
Nach dem Build wird Explorer mit dem Speicherort Ihres neuen Projekts angezeigt. Es ist jedoch nicht erforderlich, es zu öffnen, da Sie zuerst das andere Unity-Projekt in den nächsten Kapiteln erstellen müssen.
Kapitel 12: Einrichten Mixed Reality Unity-Projekts
Es folgt eine typische Einrichtung für die Entwicklung mit mixed reality und ist daher eine gute Vorlage für andere Projekte.
Öffnen Sie Unity , und klicken Sie auf Neu.
Sie müssen nun einen Unity-Projektnamen angeben und UnityMRNotifHub einfügen. Stellen Sie sicher, dass der Projekttyp auf 3D festgelegt ist. Legen Sie den Speicherort auf einen für Sie geeigneten Speicherort fest (denken Sie daran, dass näher an Stammverzeichnissen besser ist). Klicken Sie dann auf Projekt erstellen.
Wenn Unity geöffnet ist, empfiehlt es sich, die Standardskript Editor auf Visual Studio festgelegt ist, zu überprüfen. Wechseln Sie zu Einstellungen bearbeiten>, und navigieren Sie dann im neuen Fenster zu Externe Tools. Ändern Sie external script Editor in Visual Studio 2017. Schließen Sie das Fenster Einstellungen .
Wechseln Sie als Nächstes zuDateibuildeinstellungen>, und ändern Sie die Plattform auf Universelle Windows-Plattform, indem Sie auf die Schaltfläche Plattform wechseln klicken.
Wechseln Sie zuDateibuildeinstellungen>, und stellen Sie sicher, dass:
Zielgerät ist auf "Beliebiges Gerät" festgelegt.
Legen Sie für die Microsoft HoloLens Zielgerät auf HoloLens fest.
Buildtyp ist auf D3D festgelegt.
SDK ist auf Latest installed (Neueste Installation) festgelegt.
Visual Studio-Version ist auf Zuletzt installiert festgelegt.
Build und Ausführen ist auf Lokaler Computer festgelegt.
Hier lohnt es sich, die Szene zu speichern und dem Build hinzuzufügen.
Wählen Sie hierzu Geöffnete Szenen hinzufügen aus. Ein Speicherfenster wird angezeigt.
Erstellen Sie einen neuen Ordner für diese und jede zukünftige Szene, und wählen Sie dann die Schaltfläche Neuer Ordner aus, um einen neuen Ordner zu erstellen, nennen Sie ihn Szenen.
Öffnen Sie den neu erstellten Ordner Scenes , geben Sie dann im Textfeld Dateiname:NH_MR_Scene ein, und drücken Sie dann Speichern.
Die restlichen Einstellungen in Buildeinstellungen sollten vorerst als Standard beibehalten werden.
Klicken Sie im selben Fenster auf die Schaltfläche Spielereinstellungen . Dadurch wird der zugehörige Bereich in dem Bereich geöffnet, in dem sich der Inspektor befindet.
In diesem Bereich müssen einige Einstellungen überprüft werden:
Auf der Registerkarte Andere Einstellungen :
Die Skriptruntimeversion sollte experimentell (.NET 4.6-Äquivalent) sein.
Skripterstellungs-Back-End sollte .NET sein
API-Kompatibilitätsgrad sollte .NET 4.6 sein
Aktivieren Sie weiter unten im Bereich unter XR-Einstellungen (siehe Veröffentlichungseinstellungen) das Kontrollkästchen Virtual Reality Supported (Virtuelle Realität unterstützt), stellen Sie sicher, dass das Windows Mixed Reality SDK hinzugefügt wurde.
Aktivieren Sie auf der Registerkarte Veröffentlichungseinstellungen unter Funktionen Folgendes:
InternetClient
Zurück in den Buildeinstellungen ist Unity C#-Projekte nicht mehr abgeblendet: Aktivieren Sie das Kontrollkästchen daneben.
Schließen Sie nach Abschluss dieser Änderungen das Fenster Buildeinstellungen.
Speichern Sie Ihre Szene und Projektdatei>Szene speichern/Datei>Projekt speichern.
Wichtig
Wenn Sie die Unity-Komponente Einrichten für dieses Projekt (Mixed Reality-App) überspringen und direkt mit dem Code fortfahren möchten, können Sie dieses UNITY-Paket herunterladen, es als benutzerdefiniertes Paket in Ihr Projekt importieren und dann mit Kapitel 14 fortfahren. Sie müssen weiterhin die Skriptkomponenten hinzufügen.
Kapitel 13: Importieren der DLLs im Mixed Reality Unity-Projekt
Sie verwenden die Azure Storage für Unity-Bibliothek (die das .NET SDK für Azure verwendet). Folgen Sie diesem Link zur Verwendung von Azure Storage mit Unity. Derzeit gibt es ein bekanntes Problem in Unity, bei dem Plug-Ins nach dem Import neu konfiguriert werden müssen. Diese Schritte (4 bis 7 in diesem Abschnitt) sind nach der Behebung des Fehlers nicht mehr erforderlich.
Um das SDK in Ihr eigenes Projekt zu importieren, stellen Sie sicher, dass Sie das neueste UNITY-Paket heruntergeladen haben. Führen Sie anschließend folgende Schritte aus:
Fügen Sie das unitypackage-Paket, das Sie aus dem obigen Beispiel heruntergeladen haben, mithilfe der Menüoption Assets>Import PackageCustom Package (Benutzerdefiniertes Paket> importieren) zu Unity hinzu.
Im eingeblendeten Feld Unity-Paket importieren können Sie unter Plug-In-Speicher> alles auswählen.
Klicken Sie auf die Schaltfläche Importieren , um die Elemente zu Ihrem Projekt hinzuzufügen.
Wechseln Sie in der Projektansicht unter Plug-Ins zum Ordner Storage, und wählen Sie nur die folgenden Plug-Ins aus:
- Microsoft.Data.Edm
- Microsoft.Data.OData
- Microsoft.WindowsAzure.Storage
- Newtonsoft.Json
- System.Spatial
Wenn Sie diese spezifischen Plug-Ins ausgewählt haben, deaktivieren SieBeliebige Plattform , und deaktivieren SieWSAPlayer , und klicken Sie dann auf Übernehmen.
Hinweis
Sie markieren diese speziellen Plug-Ins so, dass sie nur im Unity-Editor verwendet werden. Dies liegt daran, dass es verschiedene Versionen der gleichen Plug-Ins im WSA-Ordner gibt, die nach dem Export des Projekts aus Unity verwendet werden.
Wählen Sie im Ordner Storage-Plug-In nur Folgendes aus:
Microsoft.Data.Services.Client
Aktivieren Sie das Kontrollkästchen Nicht verarbeiten unter Plattformeinstellungen , und klicken Sie auf Übernehmen.
Hinweis
Sie markieren dieses Plug-In als "Nicht verarbeiten", da der Unity-Assemblypatcher Schwierigkeiten bei der Verarbeitung dieses Plug-Ins hat. Das Plug-In funktioniert weiterhin, obwohl es nicht verarbeitet wird.
Kapitel 14: Erstellen der TableToScene-Klasse im Mixed Reality-Unity-Projekt
Die TableToScene-Klasse ist identisch mit der in Kapitel 9 erläuterten Klasse. Erstellen Sie dieselbe Klasse im Mixed Reality Unity-Projekt, indem Sie das gleiche Verfahren ausführen, das in Kapitel 9 erläutert wird.
Nachdem Sie dieses Kapitel abgeschlossen haben, wird diese Klasse für beide Unity-Projekte auf der Hauptkamera eingerichtet.
Kapitel 15: Erstellen der NotificationReceiver-Klasse im Mixed Reality Unity-Projekt
Das zweite Skript, das Sie erstellen müssen, ist NotificationReceiver, das für Folgendes zuständig ist:
- Registrieren der App beim Notification Hub bei der Initialisierung.
- Lauschen auf Benachrichtigungen vom Notification Hub.
- Deserialisieren der Objektdaten aus empfangenen Benachrichtigungen.
- Verschieben Sie die GameObjects in der Szene basierend auf den deserialisierten Daten.
So erstellen Sie das NotificationReceiver-Skript :
Klicken Sie mit der rechten Maustaste in den Ordner Skripts , und klicken Sie auf Erstellen, C#-Skript. Nennen Sie das Skript NotificationReceiver.
erstellen
Doppelklicken Sie auf das Skript, um es zu öffnen.
Fügen Sie die folgenden Namespaces hinzu:
//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
Fügen Sie die folgenden Variablen ein:
/// <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-";
Ersetzen Sie den Wert hubName durch Den Namen Ihres Notification Hub-Diensts und den Wert hubListenEndpoint durch den Endpunktwert, der im Azure-Portal auf der Registerkarte Zugriffsrichtlinien, Azure Notification Hub Service, zu finden ist (siehe Abbildung unten).
Fügen Sie nun die Methoden Start() und Awake() hinzu, um die Klasse zu initialisieren.
/// <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()); }
Fügen Sie die WaitForNotification-Methode hinzu, damit die App Benachrichtigungen von der Notification Hub-Bibliothek empfangen kann, ohne mit dem Hauptthread in Konflikt zu geraten:
/// <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; } } }
Die folgende Methode, InitNotificationAsync(), registriert die Anwendung bei der Initialisierung beim Notification Hub Service. Der Code ist auskommentiert, da Unity das Projekt nicht erstellen kann. Sie entfernen die Kommentare, wenn Sie das Azure Messaging NuGet-Paket in Visual Studio importieren.
/// <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; // } }
Der folgende Handler , Channel_PushNotificationReceived(), wird jedes Mal ausgelöst, wenn eine Benachrichtigung empfangen wird. Es deserialisiert die Benachrichtigung, bei der es sich um die Azure-Tabellenentität handelt, die in der Desktopanwendung verschoben wurde, und verschärbt dann das entsprechende GameObject in der MR-Szene an dieselbe Position.
Wichtig
Der Code ist auskommentiert, da der Code auf die Azure Messaging-Bibliothek verweist, die Sie nach dem Erstellen des Unity-Projekts mithilfe des NuGet-Paket-Managers in Visual Studio hinzufügen. Daher kann das Unity-Projekt nur erstellt werden, wenn es auskommentiert ist. Beachten Sie, dass Sie diesen Code erneut kommentieren müssen, wenn Sie Ihr Projekt erstellen und dann zu Unity zurückkehren möchten.
///// <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; // } //}
Denken Sie daran, Ihre Änderungen zu speichern, bevor Sie zum Unity-Editor zurückkehren.
Klicken Sie im Bereich Hierarchie auf die Hauptkamera, damit die zugehörigen Eigenschaften im Inspektor angezeigt werden.
Wählen Sie bei geöffnetem Ordner Skripts das Skript NotificationReceiver aus, und ziehen Sie es auf die Hauptkamera. Das Ergebnis sollte wie folgt aussehen:
Hinweis
Wenn Sie dies für die Microsoft HoloLens entwickeln, müssen Sie die Kamerakomponente der Hauptkamera aktualisieren, damit:
- Flags löschen: Volltonfarbe
- Hintergrund: Schwarz
Kapitel 16: Erstellen des Mixed Reality-Projekts in UWP
Dieses Kapitel ist identisch mit dem Buildprozess für das vorherige Projekt. Alles, was für den Unity-Abschnitt dieses Projekts erforderlich ist, ist nun abgeschlossen, sodass es an der Zeit ist, es über Unity zu erstellen.
Navigieren Sie zu Buildeinstellungen (Dateibuildeinstellungen> ).
Stellen Sie im Menü Buildeinstellungen sicher, dass Unity C#-Projekte* aktiviert ist (sodass Sie die Skripts in diesem Projekt nach dem Build bearbeiten können).
Klicken Sie anschließend auf Erstellen.
Ein Explorer Fenster wird angezeigt, in dem Sie aufgefordert werden, einen Speicherort zum Erstellen anzugeben. Erstellen Sie einen neuen Ordner (indem Sie oben links auf Neuer Ordner klicken), und nennen Sie ihn BUILDS.
Öffnen Sie den neuen Ordner BUILDS , und erstellen Sie einen weiteren Ordner (mit neuer Ordner erneut), und nennen Sie ihn NH_MR_App.
Mit ausgewähltem NH_MR_App . Klicken Sie auf Ordner auswählen. Die Erstellung des Projekts dauert etwa eine Minute.
Nach dem Build wird am Speicherort Des neuen Projekts ein Explorer Fenster geöffnet.
Kapitel 17: Hinzufügen von NuGet-Paketen zur UnityMRNotifHub-Lösung
Warnung
Beachten Sie, dass nach dem Hinzufügen der folgenden NuGet-Pakete (und aufheben der Auskommentierung des Codes im nächsten Kapitel) der Code, wenn er innerhalb des Unity-Projekts erneut geöffnet wird, Fehler aufweist. Wenn Sie die Bearbeitung im Unity-Editor fortsetzen möchten, müssen Sie diesen fehlerhaften Code kommentieren und die Auskommentierung später wieder aufheben, sobald Sie wieder in Visual Studio sind.
Nachdem der Mixed Reality-Build abgeschlossen wurde, navigieren Sie zu dem Mixed Reality-Projekt, das Sie erstellt haben, und doppelklicken Sie auf die Projektmappendatei (.sln) in diesem Ordner, um Ihre Projektmappe mit Visual Studio 2017 zu öffnen. Sie müssen nun das NuGet-Paket WindowsAzure.Messaging.managed hinzufügen. Dies ist eine Bibliothek, die zum Empfangen von Benachrichtigungen vom Notification Hub verwendet wird.
So importieren Sie das NuGet-Paket:
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Ihre Lösung.
Klicken Sie auf NuGet-Pakete verwalten.
Wählen Sie die Registerkarte Durchsuchen aus, und suchen Sie nach WindowsAzure.Messaging.managed.
Wählen Sie das Ergebnis aus (wie unten dargestellt), und aktivieren Sie im Fenster auf der rechten Seite das Kontrollkästchen neben Projekt. Dadurch wird ein Häkchen in das Kontrollkästchen neben Project eingefügt, zusammen mit dem Kontrollkästchen neben dem Assembly-CSharp - und UnityMRNotifHub-Projekt .
Die ursprünglich bereitgestellte Version ist möglicherweise nicht mit diesem Projekt kompatibel. Klicken Sie daher auf das Dropdownmenü neben Version, und klicken Sie auf Version 0.1.7.9 und dann auf Installieren.
Sie haben die Installation des NuGet-Pakets abgeschlossen. Suchen Sie den kommentierten Code, den Sie in die NotificationReceiver-Klasse eingegeben haben , und entfernen Sie die Kommentare.
Kapitel 18: Bearbeiten der UnityMRNotifHub-Anwendung, NotificationReceiver-Klasse
Nachdem Sie die NuGet-Pakete hinzugefügt haben, müssen Sie die Auskommentierung eines Teils des Codes in der NotificationReceiver-Klasse aufheben.
Dies umfasst Folgendes:
Der Namespace oben:
using Microsoft.WindowsAzure.Messaging;
Der gesamte Code innerhalb der InitNotificationsAsync()- Methode:
/// <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: Stellen Sie sicher, dass Sie diesen Kommentar nicht versehentlich unkommentiert haben (da der Code nicht kompiliert wird, wenn Sie dies haben!).
Und schließlich das Channel_PushNotificationReceived-Ereignis :
/// <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; } }
Stellen Sie bei diesen unkommentiert sicher, dass Sie speichern, und fahren Sie dann mit dem nächsten Kapitel fort.
Kapitel 19: Zuordnen des Mixed Reality-Projekts zur Store-App
Sie müssen nun das Mixed Reality-Projekt der Store-App zuordnen, die Sie zu Beginn des Labs erstellt haben.
Öffnen Sie die Projektmappe.
Klicken Sie im bereich Projektmappen-Explorer mit der rechten Maustaste auf das UWP-App-Projekt, wechseln Sie zu Store, und ordnen Sie App dem Store zu....
Ein neues Fenster mit dem Namen Zuordnen Ihrer App zum Windows Store wird angezeigt. Klicken Sie auf Weiter.
Es werden alle Anwendungen geladen, die dem Konto zugeordnet sind, das Sie angemeldet haben. Wenn Sie nicht bei Ihrem Konto angemeldet sind, können Sie sich auf dieser Seite anmelden .
Suchen Sie den Store-App-Namen , den Sie zu Beginn dieses Tutorials erstellt haben, und wählen Sie ihn aus. Klicken Sie dann auf Weiter.
Klicken Sie auf Zuordnen.
Ihre App ist jetzt der Store-App zugeordnet . Dies ist erforderlich, um Benachrichtigungen zu aktivieren.
Kapitel 20: Bereitstellen von UnityMRNotifHub- und UnityDesktopNotifHub-Anwendungen
Dieses Kapitel kann mit zwei Personen einfacher sein, da das Ergebnis beide Apps enthält, die ausgeführt werden, eine auf Ihrem Computer desktop und die andere in Ihrem immersiven Headset.
Die immersive Headset-App wartet darauf, Änderungen an der Szene zu empfangen (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. Es ist sinnvoll, zuerst die MR-App und dann die Desktop-App bereitzustellen, damit der Empfänger mit dem Lauschen beginnen kann.
So stellen Sie die UnityMRNotifHub-App auf Ihrem lokalen Computer bereit:
Öffnen Sie die Projektmappendatei Ihrer UnityMRNotifHub-App in Visual Studio 2017.
Wählen Sie auf der Lösungsplattformx86, Lokaler Computer aus.
Wählen Sie unter Projektmappenkonfigurationdie Option Debuggen aus.
Wechseln Sie zum Menü Erstellen , und klicken Sie auf Lösung bereitstellen , um die Anwendung auf Ihren Computer querzuladen.
Ihre App sollte nun in der Liste der installierten Apps angezeigt werden, die zum Starten bereit sind.
So stellen Sie die UnityDesktopNotifHub-App auf dem lokalen Computer bereit:
Öffnen Sie die Projektmappendatei Ihrer UnityDesktopNotifHub-App in Visual Studio 2017.
Wählen Sie auf der Lösungsplattformx86, Lokaler Computer aus.
Wählen Sie unter Projektmappenkonfigurationdie Option Debuggen aus.
Wechseln Sie zum Menü Erstellen , und klicken Sie auf Lösung bereitstellen , um die Anwendung auf Ihren Computer querzuladen.
Ihre App sollte nun in der Liste der installierten Apps angezeigt werden, die zum Starten bereit sind.
Starten Sie die Mixed Reality-Anwendung, gefolgt von der Desktopanwendung.
Wenn beide Anwendungen ausgeführt werden, verschieben Sie ein Objekt in der Desktopszene (mit der linken Maustaste). Diese Positionsänderungen werden lokal vorgenommen, serialisiert und an den Funktions-App-Dienst gesendet. Der Funktions-App-Dienst aktualisiert dann die Tabelle zusammen mit dem Notification Hub. Nachdem er ein Update erhalten hat, 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 und sie in einer Szene verschiebt.
Ihre fertige Azure Notification Hubs-Anwendung
Herzlichen Glückwunsch, Sie haben eine Mixed Reality-App erstellt, die den Azure Notification Hubs-Dienst nutzt und die Kommunikation zwischen Apps ermöglicht.
Bonusübungen
Übung 1
Können Sie herausfinden, wie Sie die Farbe der GameObjects ändern und diese Benachrichtigung an andere Apps senden, die die Szene anzeigen?
Übung 2
Können Sie Ihrer MR-App die Bewegung von GameObjects hinzufügen und die aktualisierte Szene in Ihrer Desktop-App anzeigen?