HoloLens (1. Generation) und Azure 308: geräteübergreifende Benachrichtigungen
Hinweis
Die Tutorials der Mixed Reality Academy wurden im Hinblick auf HoloLens (1. Gen.) und immersive Mixed Reality-Headsets entworfen. 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. Diese Tutorials werden nicht mit den neuesten Toolsets oder Interaktionen aktualisiert, die für HoloLens 2 verwendet werden. Sie werden gewartet, um weiterhin auf den unterstützten Geräten zu funktionieren. Es wird eine neue Reihe von Tutorials geben, die in Zukunft veröffentlicht werden, die veranschaulichen, wie für HoloLens 2 entwickelt werden kann. Dieser Hinweis wird mit einem Link zu diesen Tutorials aktualisiert, wenn sie veröffentlicht werden.
In diesem Kurs erfahren Sie, wie Sie Notification Hubs-Funktionen zu einer Mixed Reality-Anwendung mithilfe von Azure Notification Hubs, Azure Tables und Azure Functions hinzufügen.
Azure Notification Hubs ist ein Microsoft-Dienst, mit dem Entwickler gezielte und personalisierte Pushbenachrichtigungen an jede Plattform senden können, die alle innerhalb der Cloud betrieben 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 zum Delegieren von Arbeit an die Cloud anstelle Ihrer lokalen Anwendung, was viele Vorteile haben kann. Azure Functions unterstützt mehrere Entwicklungssprachen, darunter 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 daher sehr flexibel ist. Weitere Informationen finden Sie auf der Seite Azure-Tabellen.
Nach Abschluss dieses Kurses verfügen Sie über eine immersive Mixed Reality-Headsetanwendung und eine Desktop-PC-Anwendung, die folgende Aufgaben 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 an die Cloud gesendet, das in Form einer Zeichenfolge erfolgt, die eine Objekt-ID, Typinformationen und Transformationsinformationen (X- und Y-Koordinaten) enthält.
Die Mixed Reality-App, die über eine identische Szene wie die Desktop-App verfügt, empfängt Benachrichtigungen über Objektverschiebungen vom Notification Hubs-Dienst (der gerade von der Desktop-PC-App aktualisiert wurde).
Nach Erhalt einer Benachrichtigung, die die Objekt-ID, den Typ und die Transformierungsinformationen 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 gewonnen haben, 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 Headsets (VR) konzentriert, können Sie das, was Sie in diesem Kurs gelernt haben, auch auf Microsoft HoloLens anwenden. Während Sie dem Kurs folgen, werden Ihnen Notizen zu allen Änderungen angezeigt, die Sie möglicherweise zur Unterstützung von HoloLens verwenden müssen. Wenn Sie HoloLens verwenden, können Sie während der Sprachaufnahme ein gewisses Echo bemerken.
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 das darstellen, was zum Zeitpunkt des Schreibens (Mai 2018) getestet und überprüft wurde. Sie können die neueste Software verwenden, wie im Artikel Installieren der Tools aufgeführt, aber es sollte nicht davon ausgegangen werden, dass die Informationen in diesem Kurs perfekt dem entsprechen, was Sie in neuerer Software finden, als unten aufgeführt.
Wir empfehlen die folgende Hardware und Software für diesen Kurs:
- Ein Entwicklungs-PC, kompatibel mit Windows Mixed Reality für die Entwicklung von immersiven Headsets (VR)
- 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
Vorbereitung
- Um Probleme beim Erstellen dieses Projekts zu vermeiden, wird dringend empfohlen, dass Sie das in diesem Tutorial erwähnte Projekt in einem Stamm- oder Fast-Stammordner 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 verfügen Sie in Kapitel 2 nicht über die Berechtigung für den Zugriff auf die App.
Kapitel 1: Erstellen einer Anwendung im Microsoft Developer Portal
Um den Azure Notification Hubs-Dienst zu verwenden, 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 ausgewä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 jetzt erstellt wurde, können Sie zum nächsten Kapitel wechseln.
Kapitel 2: Abrufen der Anmeldeinformationen für neue Apps
Melden Sie sich beim Anwendungsregistrierungsportal an, wo 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 im Windows Store-Entwicklerportal verwendet haben.Sie finden Ihre App im Abschnitt Meine Anwendungen . Sobald Sie es gefunden haben, klicken Sie darauf, und Sie werden zu einer neuen Seite weitergeleitet, die den App-Namen plus Registrierung enthält.
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 Laborsituation befolgen, bitten Sie Ihren Kursleiter oder einen der Experten um Hilfe beim Einrichten Ihres neuen Kontos.
Nachdem 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 neben 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 (z. B. diesen Labs) zugeordnet sind, unter einer gemeinsamen Ressourcengruppe zu halten.
Wenn Sie mehr über Azure-Ressourcengruppen erfahren möchten, folgen Sie diesem Link zum Verwalten einer Ressourcengruppe.
Wählen Sie ein entsprechendes Abonnement aus.
Sie müssen auch bestätigen, dass Sie die für diesen Dienst geltenden Geschäftsbedingungen verstanden haben.
Klicken Sie auf Erstellen.
Nachdem Sie auf Erstellen geklickt haben, müssen Sie warten, bis der Dienst erstellt wird. Dies kann eine Minute dauern.
Eine Benachrichtigung wird im Portal angezeigt, sobald der Dienst instance erstellt wurde.
Klicken Sie in der Benachrichtigung auf die Schaltfläche Zu Ressource wechseln, um Ihren neuen 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). Der Bereich auf der rechten Seite ändert sich in zwei Textfelder, die Ihre Paket-SID und den Sicherheitsschlüssel aus der zuvor eingerichteten App erfordern.
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 des Tabellendiensts
Navigieren Sie nach dem Erstellen Ihres Notification Hubs Service-instance zurück zu Ihrem Azure-Portal, wo Sie einen Azure Tables Service erstellen, indem Sie eine Speicherressource erstellen.
Melden Sie sich beim Azure-Portal an, wenn Sie noch nicht angemeldet sind.
Klicken Sie nach der Anmeldung oben links 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 ihren gewünschten Namen für diesen Dienst instance ein (muss klein geschrieben 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 Read-access-geo-redundant storage (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 (z. B. diesen Labs) zugeordnet sind, unter einer gemeinsamen Ressourcengruppe zu halten.
Wenn Sie mehr über Azure-Ressourcengruppen erfahren möchten, folgen Sie diesem Link zum Verwalten einer Ressourcengruppe.
Lassen Sie virtuelle Netzwerke als 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 wird. Dies kann eine Minute dauern.
Eine Benachrichtigung wird im Portal angezeigt, sobald der 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 Ihren neuen Dienst instance zu erkunden. Sie werden zur Übersichtsseite des neuen Speicherdiensts instance weitergeleitet.
Klicken Sie auf der Übersichtsseite rechts 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, in der Sie einen Tabellennamen eingeben müssen. Dies ist der Name, den Sie verwenden, um auf die Daten in Ihrer Anwendung in späteren Kapiteln zu verweisen. Fügen Sie einen entsprechenden Namen ein, und klicken Sie auf OK.
Sobald die neue Tabelle erstellt wurde, können Sie sie auf der Seite Tabellendienst (unten) anzeigen.
Kapitel 5: Abschließen der Azure-Tabelle in Visual Studio
Nachdem Ihr Tabellendienstspeicherkonto 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ü auf Cloud Explorer anzeigen>.
Die Cloud-Explorer wird als angedocktes Element geöffnet (gedulden Sie sich, da das Laden einige Zeit in Anspruch nehmen kann).
Hinweis
Wenn das Abonnement, das Sie zum Erstellen Ihrer Speicherkonten verwendet haben, nicht sichtbar ist, stellen Sie sicher, dass Sie über Folgendes verfügen:
Melden Sie sich bei demselben Konto wie das Konto an, das Sie für das Azure-Portal verwendet haben.
Wählen Sie Ihr Abonnement auf der Kontoverwaltungsseite aus (möglicherweise müssen Sie einen Filter aus Ihren Kontoeinstellungen anwenden):
Ihre Azure-Clouddienste werden angezeigt. Suchen Sie nach Speicherkonten , und klicken Sie links neben dem Pfeil, um Ihre Konten zu erweitern.
Nach der Erweiterung sollte Ihr neu erstelltes Speicherkonto verfügbar sein. Klicken Sie links neben Ihrem Speicher auf den Pfeil, 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.
Es wird ein Fenster angezeigt, in dem Sie zum Hinzufügen von Entität aufgefordert werden. 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 hinzugefügte 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 der folgenden Tabelle entspricht.
Klicken Sie anschließend auf OK.
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 Datenzeile enthält. Klicken Sie erneut auf das + Symbol (plus), 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 den unten gezeigten entsprechen.
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 fest.
Ihre Tabelle sollte nun wie unten aussehen.
Sie haben dieses Kapitel abgeschlossen. Achten Sie darauf, 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, mit der Ihre Azure-Funktion die benötigten Bibliotheken laden kann.
Öffnen Sie Editor (drücken Sie die Windows-TASTE, und geben Sie editor ein).
Fügen Sie bei geöffnetem Editor die folgende JSON-Struktur ein. Nachdem Sie dies getan haben, speichern Sie es auf Ihrem Desktop als project.json. Es ist wichtig, dass die Benennung richtig ist: Stellen Sie sicher, dass sie KEINE .txt Dateierweiterung hat. Diese Datei definiert die Bibliotheken, die Ihre Funktion verwendet. Wenn Sie NuGet verwendet haben, wird sie vertraut aussehen.
{ "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.
Nachdem Sie angemeldet sind, klicken Sie in der oberen linken Ecke auf Neu , und suchen Sie nach Funktions-App, 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 Abonnementaus.
Wählen Sie den für Sie geeigneten Tarif aus. Wenn Sie zum ersten Mal eine Funktion App Service erstellen, sollte Ihnen ein kostenloser 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 (z. B. diesen Labs) zugeordnet sind, unter einer gemeinsamen Ressourcengruppe zu halten.
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)
Im 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 wird. Dies kann eine Minute dauern.
Eine Benachrichtigung wird im Portal angezeigt, sobald der 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 Ihren neuen Dienst instance zu erkunden.
Klicken Sie auf das + Symbol (plus) 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 in der Nähe des unteren Bereichs befindet (im blauen Bereich, wie unten).
Die neue Seite im Fenster zeigt verschiedene Funktionstypen an. 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 nach unten scrollen (und dieses Bild sieht möglicherweise nicht genau gleich aus, wenn Updates im Azure-Portal stattgefunden haben), 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 entsprechenden Namen ein.
Wählen Sie im Dropdownmenü Authentifizierungsebenedie Option Funktion aus.
Für den Abschnitt Tabellenname müssen Sie den genauen Namen verwenden, den Sie zuvor zum Erstellen Ihres Table-Diensts verwendet haben (einschließlich desselben Großbuchstabens).
Verwenden Sie im Abschnitt Speicherkontoverbindung das Dropdownmenü, und wählen Sie dort Ihr Speicherkonto aus. Wenn es nicht vorhanden ist, klicken Sie neben dem Abschnittstitel auf den Link Neuer Link, um einen weiteren Bereich anzuzeigen, in dem Ihr Speicherkonto aufgeführt werden soll.
Klicken Sie auf Erstellen , und Sie erhalten 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 erhält 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 ihren erstellten Notification Hub-Dienst auf, der alle abonnierten Anwendungen benachrichtigt.
Klicken Sie auf Speichern, wenn der Code vorhanden ist.
Klicken Sie als Nächstes auf das < Symbol (Pfeil) rechts auf der Seite.
Ein Bereich wird von rechts eingeschoben. Klicken Sie in diesem Bereich auf Hochladen, und ein Dateibrowser wird angezeigt.
Navigieren Sie zu der Datei project.json , die Sie zuvor in 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 genauso aussehen wie das nächste Bild (unter Schritt 23).
Klicken Sie dann im linken Bereich unter Funktionen auf den Link Integrieren .
Klicken Sie auf der nächsten Seite oben rechts auf Erweiterter Editor (wie unten).
Im mittleren Bereich wird eine Datei function.json geöffnet, die durch den folgenden Codeausschnitt ersetzt werden muss. Dadurch wird die Funktion definiert, 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 die folgenden Informationen mit Ihren Informationen übereinstimmen, da sie möglicherweise unterschiedlich sind (unter den folgenden Schritten finden Sie eine Abbildung):
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 Speicherkontoverbindungswert erstellt wurde.
Stellen Sie sicher, dass Sie speichern drücken, sobald Sie fertig sind.
Die Seite Eingaben sollte nun mit den folgenden Informationen übereinstimmen .
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 unterschiedlich sind (es gibt eine Abbildung unter den folgenden Schritten):
Notification Hub-Name: Dies ist der Name Ihres Notification Hub-Diensts instance, den Sie zuvor erstellt haben.
Notification Hubs-Namespaceverbindung: Klicken Sie auf Neu, das neben dem Dropdownmenü angezeigt wird.
Das Popup "Verbindung " wird angezeigt (siehe Abbildung unten), in dem Sie den Namespace des Notification Hubs auswählen müssen, den Sie zuvor eingerichtet haben.
Wählen Sie im mittleren Dropdownmenü Ihren Notification Hub-Namen aus.
Legen Sie das Dropdownmenü Richtlinie auf DefaultFullSharedAccessSignature fest.
Klicken Sie auf die Schaltfläche Auswählen , um zurückzugehen.
Die Seite Ausgaben sollte nun mit dem folgenden ü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 mithilfe der Erweiterter Editor erfolgen, sofern Sie die vorherigen Schritte ordnungsgemäß ausgeführt haben.
An diesem Punkt sollten Sie die Funktion testen, um sicherzustellen, dass sie funktioniert. Dazu ist Folgendes erforderlich:
Navigieren Sie erneut 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. Sie muss außerhalb des Editors nach dem Erstellen der Anwendung mithilfe von Visual Studio (oder der bereitgestellten Anwendung) ausgeführt werden.
Im Folgenden wird ein typischer Aufbau für die Entwicklung mit Unity und Mixed Reality gezeigt. Daher ist es 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 Ort fest (denken Sie daran, dass näher an Stammverzeichnissen besser ist). Klicken Sie dann auf Projekt erstellen.
Wenn Unity geöffnet ist, lohnt es sich, zu überprüfen, ob der Standardskript-Editor auf Visual Studio festgelegt ist. Navigieren Sie zuBearbeitungseinstellungen>, und navigieren Sie dann im neuen Fenster zu Externe Tools. Ändern Sie den externen Skript-Editor in Visual Studio 2017. Schließen Sie das Fenster Einstellungen.
Navigieren Sie als Nächstes zuDateibuildeinstellungen>, und wählen Sie Universelle Windows-Plattform aus, und klicken Sie dann auf die Schaltfläche Plattform wechseln, um Ihre Auswahl anzuwenden.
Stellen Sie folgendes sicher, während Sie sich noch in denDateibuildeinstellungen> befinden:
Zielgerät ist auf "Beliebiges Gerät" festgelegt.
Diese Anwendung ist für Ihren Desktop vorgesehen, daher muss "Any Device" (Beliebiges Gerät) sein.
Buildtyp ist auf D3D festgelegt.
SDK ist auf Latest installed (Neueste Installation) festgelegt.
Visual Studio-Version ist auf Latest installed (Neueste Installation) festgelegt.
Build and Run ist auf Lokaler Computer festgelegt.
Hier lohnt es sich, die Szene zu speichern und dem Build hinzuzufügen.
Wählen Sie dazu Offene 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 , und 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 Playereinstellungen . 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.
Skript-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 in den Buildeinstellungenunity C#-Projekte ist nicht mehr ausgegraut. aktivieren Sie das Kontrollkästchen neben diesem.
Schließen Sie das Fenster Buildeinstellungen.
Speichern Sie Ihre Szene und Ihre Projektdatei>Speichern Sie Szene/Datei>speichern Projekt.
Wichtig
Wenn Sie die Unity-Einrichtungskomponente 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 mit 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.
Es gibt derzeit ein bekanntes Problem in Unity, das erfordert, dass Plug-Ins nach dem Import neu konfiguriert werden müssen. Diese Schritte (4 bis 7 in diesem Abschnitt) sind nicht mehr erforderlich, nachdem der Fehler behoben wurde.
Um das SDK in Ihr eigenes Projekt zu importieren, stellen Sie sicher, dass Sie das neueste Unitypackage von GitHub heruntergeladen haben. Gehen Sie nun wie folgt vor:
Fügen Sie unitypackage zu Unity hinzu, indem Sie die Menüoption Assets > Import Package > Custom Package (Benutzerdefiniertes Paket importieren ) verwenden.
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 Plugins 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 Anwenden.
Hinweis
Wir markieren diese speziellen Plug-Ins, die nur im Unity-Editor verwendet werden sollen. Dies liegt daran, dass es verschiedene Versionen derselben Plug-Ins im WSA-Ordner gibt, die verwendet werden, nachdem das Projekt aus Unity exportiert wurde.
Wählen Sie im Ordner Storage-Plug-In nur Folgendes aus:
Microsoft.Data.Services.Client
Aktivieren Sie unter Plattformeinstellungen das Kontrollkästchen Nicht verarbeiten, und klicken Sie auf Anwenden.
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, auch wenn es nicht verarbeitet wird.
Kapitel 9: Erstellen der TableToScene-Klasse im Desktop Unity-Projekt
Sie müssen nun die Skripts erstellen, die den Code enthalten, um diese Anwendung auszuführen.
Das erste Skript, das Sie erstellen müssen, ist TableToScene, das für Folgendes verantwortlich ist:
- Liest Entitäten innerhalb der Azure-Tabelle.
- Bestimmen Sie mithilfe der Tabellendaten, welche Objekte an welcher Position spawnen sollen.
Das zweite Skript, das Sie erstellen müssen, ist CloudScene, das für Folgendes verantwortlich ist:
- Registrieren des Linksklickereignisses, 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, der sich im Projektbereich Ordner erstellen>befindet. Nennen Sie den Ordner Skripts.
Doppelklicken Sie auf den gerade erstellten Ordner, um ihn zu öffnen.
Klicken Sie mit der rechten Maustaste in den Ordner Skripts, und klicken Sie aufC#-Skripterstellen>. 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 Wert "accountKey " 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 der TableToScene-Klasse die -Methode hinzu, die die Werte aus der Azure-Tabelle abruft, und verwenden Sie sie zum Spawnen der entsprechenden Grundtypen in der Szene.
/// <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 Hierarchiebereich auf die Hauptkamera, damit ihre 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 verantwortlich ist:
Registrieren des Linksklickereignisses, 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 im Azure-App Service im Azure-Portal, wie in der folgenden Abbildung gezeigt:
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 innerhalb 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, übergibt er den Namen und die Koordinaten des Objekts an die UpdateCloudScene()-Methode, die den Azure Function App-Dienst aufruft, wodurch die Azure-Tabelle aktualisiert und die Benachrichtigung ausgelöst wird.
/// <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 Hierarchiebereich auf die Hauptkamera, damit ihre Eigenschaften im Inspektor angezeigt werden.
Wählen Sie bei geöffnetem Ordner Skripts das CloudScene-Skript aus, und ziehen Sie es auf die Hauptkamera. Das Ergebnis sollte wie folgt aussehen:
Kapitel 11: Erstellen des Desktopprojekts in UWP
Alles, was für den Unity-Abschnitt dieses Projekts benötigt wird, wurde 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 (erneut mithilfe von Neuer Ordner ), und benennen Sie ihn NH_Desktop_App.
Mit ausgewählter NH_Desktop_App . Klicken Sie auf Ordner auswählen. Die Erstellung des Projekts dauert etwa eine Minute.
Nach dem Build wird Explorer angezeigt, der Ihnen den Speicherort Ihres neuen Projekts anzeigt. Sie müssen es jedoch nicht öffnen, da Sie das andere Unity-Projekt zuerst in den nächsten Kapiteln erstellen müssen.
Kapitel 12: Einrichten Mixed Reality Unity-Projekts
Das Folgende ist 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 Ort fest (denken Sie daran, dass näher an Stammverzeichnissen besser ist). Klicken Sie dann auf Projekt erstellen.
Wenn Unity geöffnet ist, lohnt es sich, zu überprüfen, ob der Standardskript-Editor auf Visual Studio festgelegt ist. Navigieren Sie zu Einstellungen bearbeiten>, und navigieren Sie dann im neuen Fenster zu Externe Tools. Ändern Sie den externen Skript-Editor in Visual Studio 2017. Schließen Sie das Fenster Einstellungen.
Wechseln Sie als Nächstes zuDateibuildeinstellungen>, und wechseln Sie auf die Plattform Universelle Windows-Plattform, indem Sie auf die Schaltfläche Plattform wechseln klicken.
Wechseln Sie zuDateibuildeinstellungen>, und stellen Sie folgendes sicher:
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 Latest installed (Neueste Installation) festgelegt.
Build and Run ist auf Lokaler Computer festgelegt.
Hier lohnt es sich, die Szene zu speichern und dem Build hinzuzufügen.
Wählen Sie dazu Offene 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 , und 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 Playereinstellungen . 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.
Skript-Back-End sollte .NET sein
API-Kompatibilitätsgrad sollte .NET 4.6 sein.
Wählen Sie weiter unten im Bereich unter XR-Einstellungen (unter Veröffentlichungseinstellungen) den Kontrollkästchen Virtual Reality Unterstützt aus, 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 ausgegraut: Aktivieren Sie das Kontrollkästchen neben diesem.
Nachdem diese Änderungen vorgenommen wurden, schließen Sie das Fenster Buildeinstellungen.
Speichern Sie Ihre Szene und Ihre Projektdatei>Speichern Sie Szene/Datei>speichern Projekt.
Wichtig
Wenn Sie die Unity-Einrichtungskomponente 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 aus 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. Es gibt derzeit ein bekanntes Problem in Unity, das erfordert, dass Plug-Ins nach dem Import neu konfiguriert werden müssen. Diese Schritte (4 bis 7 in diesem Abschnitt) sind nicht mehr erforderlich, nachdem der Fehler behoben wurde.
Um das SDK in Ihr eigenes Projekt zu importieren, stellen Sie sicher, dass Sie das neueste Unitypackage heruntergeladen haben. Gehen Sie nun wie folgt vor:
Fügen Sie das unitypackage, das Sie aus dem obigen Beispiel heruntergeladen haben, mithilfe der Menüoption AssetsImport 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 zum Ordner Storage unter Plug-Ins , und wählen Sie nur die folgenden Plug-Ins aus:
- Microsoft.Data.Edm
- Microsoft.Data.OData
- Microsoft.WindowsAzure.Storage
- Newtonsoft.Json
- System.Spatial
Wenn Diese spezifischen Plug-Ins ausgewählt sind, deaktivieren SieBeliebige Plattform , und deaktivieren SieWSAPlayer , und klicken Sie dann auf Übernehmen.
Hinweis
Sie markieren diese speziellen Plug-Ins, die nur im Unity-Editor verwendet werden sollen. Dies liegt daran, dass es verschiedene Versionen der gleichen Plug-Ins im WSA-Ordner gibt, die verwendet werden, nachdem das Projekt aus Unity exportiert wurde.
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 mit "Nicht verarbeiten", da der Unity-Assemblypatcher Probleme mit 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 dasselbe Verfahren ausführen, das in Kapitel 9 beschrieben wurde.
Nachdem Sie dieses Kapitel abgeschlossen haben, wird für beide Unity-Projekte diese Klasse 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.
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 Ihren Notification Hub-Dienstnamen 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 wird die Benachrichtigung deserialisiert, bei der es sich um die Azure-Tabellenentität handelt, die in der Desktopanwendung verschoben wurde, und dann das entsprechende GameObject in der MR-Szene an die gleiche Position verschoben.
Wichtig
Der Code wird 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 nicht erstellt werden, es sei denn, es ist auskommentiert. 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 Hierarchiebereich auf die Hauptkamera, damit ihre Eigenschaften im Inspektor angezeigt werden.
Wählen Sie im geöffneten 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, sodass:
- Flags löschen: Einfarbig
- 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 benötigt wird, wurde nun abgeschlossen, daher ist es an der Zeit, es von Unity aus 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 (erneut mit Neuer Ordner ), und benennen Sie ihn NH_MR_App.
Mit ausgewählter NH_MR_App . Klicken Sie auf Ordner auswählen. Die Erstellung des Projekts dauert etwa eine Minute.
Nach dem Build wird ein Explorer Fenster am Speicherort Ihres neuen Projekts geöffnet.
Kapitel 17: Hinzufügen von NuGet-Paketen zur UnityMRNotifHub-Lösung
Warnung
Bitte denken Sie daran, dass der Code beim erneuten Öffnen innerhalb des Unity-Projekts Fehler aufweist, sobald Sie die folgenden NuGet-Pakete hinzugefügt haben (und den Code im nächsten Kapitel auskommentieren). 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.
Navigieren Sie nach Abschluss des Mixed Reality-Builds zum Mixed Reality-Projekt, das Sie erstellt haben, und doppelklicken Sie in diesem Ordner auf die Projektmappendatei (SLN), 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 neben Projekt ein Kontrollkästchen aktiviert, zusammen mit dem Kontrollkästchen neben dem Projekt Assembly-CSharp und UnityMRNotifHub .
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 klicken Sie dann auf Installieren.
Sie haben nun 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 einen Teil des Codes in der NotificationReceiver-Klasseauskommentieren.
Dies schließt Folgendes ein:
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 mit dem nächsten Kapitel fort.
Kapitel 19: Zuordnen des Mixed Reality-Projekts zur Store-App
Sie müssen das Mixed Reality-Projekt nun der Store-App zuordnen, in der Sie zu Beginn des Labs erstellt haben.
Öffnen Sie die Projektmappe.
Klicken Sie mit der rechten Maustaste auf das Projekt der UWP-App im Projektmappen-Explorer Bereich, wechseln Sie zu Store und App dem Store zuordnen....
Ein neues Fenster mit dem Namen Zuordnen Ihrer App mit dem 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 Computerdesktop und die andere in Ihrem immersiven Headset.
Die immersive Headset-App wartet darauf, Änderungen an der Szene zu erhalten (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ösungsplattformdie Option x86, Lokaler Computer aus.
Wählen Sie in der Projektmappenkonfigurationdebuggen aus.
Navigieren 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ösungsplattformdie Option x86, Lokaler Computer aus.
Wählen Sie in der Projektmappenkonfigurationdebuggen aus.
Navigieren 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 ein Update empfangen wurde, sendet der Notification Hub die aktualisierten Daten direkt an alle registrierten Anwendungen (in diesem Fall die immersive Headset-App), wodurch die eingehenden Daten deserialisiert und die neuen Positionsdaten auf die lokalen Objekte angewendet werden, wobei sie in szene verschoben werden.
Abgeschlossene Azure Notification Hubs-Anwendung
Herzlichen Glückwunsch! Sie haben eine Mixed Reality-App erstellt, die den Azure Notification Hubs Service nutzt und die Kommunikation zwischen Apps ermöglicht.
Zusatzü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 der GameObjects hinzufügen und die aktualisierte Szene in Ihrer Desktop-App anzeigen?