Urządzenia HoloLens (1. gen) i Azure 308: powiadomienia między urządzeniami


Uwaga

Samouczki dotyczące akademii Mixed Reality zostały zaprojektowane z myślą o urządzeniach HoloLens (1. generacji) i Mixed Reality immersywnych zestawów słuchawkowych. W związku z tym uważamy, że ważne jest pozostawienie tych samouczków w miejscu dla deweloperów, którzy nadal szukają wskazówek dotyczących opracowywania tych urządzeń. Te samouczki nie zostaną zaktualizowane przy użyciu najnowszych zestawów narzędzi ani interakcji używanych do HoloLens 2. Będą one utrzymywane w celu kontynuowania pracy na obsługiwanych urządzeniach. W przyszłości zostanie opublikowana nowa seria samouczków, które pokażą, jak opracowywać HoloLens 2. To powiadomienie zostanie zaktualizowane za pomocą linku do tych samouczków po ich opublikowaniu.


końcowy produkt -start

W tym kursie dowiesz się, jak dodać funkcje usługi Notification Hubs do aplikacji rzeczywistości mieszanej przy użyciu usługi Azure Notification Hubs, tabel platformy Azure i Azure Functions.

Azure Notification Hubs to usługa firmy Microsoft, która umożliwia deweloperom wysyłanie docelowych i spersonalizowanych powiadomień wypychanych do dowolnej platformy, wszystkie obsługiwane w chmurze. Może to skutecznie umożliwić deweloperom komunikowanie się z użytkownikami końcowymi, a nawet komunikowanie się między różnymi aplikacjami w zależności od scenariusza. Aby uzyskać więcej informacji, odwiedź stronęusługi Azure Notification Hubs.

Azure Functions to usługa firmy Microsoft, która umożliwia deweloperom uruchamianie małych fragmentów kodu, "functions" na platformie Azure. Zapewnia to sposób delegowania pracy do chmury, a nie aplikacji lokalnej, co może mieć wiele korzyści. Azure Functions obsługuje kilka języków programistycznych, w tym C#, F#, Node.js, Java i PHP. Aby uzyskać więcej informacji, odwiedź stronę Azure Functions.

Azure Tables to usługa w chmurze firmy Microsoft, która umożliwia deweloperom przechowywanie ustrukturyzowanych danych innych niż SQL w chmurze, dzięki czemu jest łatwo dostępna w dowolnym miejscu. Usługa oferuje bez schematowy projekt, co pozwala na ewolucję tabel zgodnie z potrzebami, a tym samym jest bardzo elastyczna. Aby uzyskać więcej informacji, odwiedź stronęTabele platformy Azure

Po ukończeniu tego kursu będziesz mieć aplikację immersywną zestawu słuchawkowego rzeczywistości mieszanej oraz aplikację klasyczną, która będzie mogła wykonać następujące czynności:

  1. Aplikacja komputerów stacjonarnych umożliwi użytkownikowi przeniesienie obiektu w przestrzeń 2D (X i Y) przy użyciu myszy.

  2. Ruch obiektów w aplikacji komputera zostanie wysłany do chmury przy użyciu formatu JSON, który będzie w postaci ciągu zawierającego identyfikator obiektu, typ i informacje o przekształcaniu (współrzędne X i Y).

  3. Aplikacja rzeczywistości mieszanej, która ma identyczną scenę z aplikacją klasyczną, otrzyma powiadomienia dotyczące przenoszenia obiektów z usługi Notification Hubs (która została właśnie zaktualizowana przez aplikację komputerów stacjonarnych).

  4. Po otrzymaniu powiadomienia, które będzie zawierać identyfikator obiektu, typ i informacje o przekształcaniu, aplikacja rzeczywistości mieszanej zastosuje odebrane informacje do własnej sceny.

W aplikacji należy do Ciebie, jak zintegrować wyniki z projektem. Ten kurs został zaprojektowany, aby nauczyć cię, jak zintegrować usługę platformy Azure z projektem aparatu Unity. Twoim zadaniem jest wykorzystanie wiedzy uzyskanych z tego kursu w celu ulepszenia aplikacji rzeczywistości mieszanej. Ten kurs jest samodzielnym samouczkiem, który nie obejmuje bezpośrednio żadnych innych Mixed Reality Labs.

Obsługa urządzeń

Kurs HoloLens Immersyjne zestawy słuchawkowe
MR i Azure 308: powiadomienia między urządzeniami ✔️ ✔️

Uwaga

Chociaż ten kurs koncentruje się przede wszystkim na zestawach słuchawkowych Windows Mixed Reality immersywnych (VR), możesz również zastosować to, czego nauczysz się w tym kursie, aby Microsoft HoloLens. Zgodnie z kursem zobaczysz notatki dotyczące wszelkich zmian, które mogą być konieczne, aby obsługiwać urządzenie HoloLens. Podczas korzystania z urządzenia HoloLens można zauważyć echo podczas przechwytywania głosu.

Wymagania wstępne

Uwaga

Ten samouczek jest przeznaczony dla deweloperów, którzy mają podstawowe doświadczenie w językach Unity i C#. Należy również pamiętać, że wymagania wstępne i pisemne instrukcje zawarte w tym dokumencie reprezentują to, co zostało przetestowane i zweryfikowane w momencie pisania (maj 2018 r.). Możesz bezpłatnie korzystać z najnowszego oprogramowania, jak pokazano w artykule dotyczącym instalacji narzędzi , choć nie należy zakładać, że informacje w tym kursie doskonale pasują do tego, co znajdziesz w nowszym oprogramowaniu niż wymienione poniżej.

Na potrzeby tego kursu zalecamy następujące oprogramowanie i sprzęt:

Przed rozpoczęciem

  • Aby uniknąć problemów z kompilowaniem tego projektu, zdecydowanie zaleca się utworzenie projektu wymienionego w tym samouczku w folderze głównym lub niemal głównym (długie ścieżki folderów mogą powodować problemy w czasie kompilacji).
  • Musisz być właścicielem portalu deweloperów firmy Microsoft i portalu rejestracji aplikacji. W przeciwnym razie nie będziesz mieć uprawnień dostępu do aplikacji w rozdziale 2.

Rozdział 1 . Tworzenie aplikacji w portalu deweloperów firmy Microsoft

Aby korzystać z usługi Azure Notification Hubs , musisz utworzyć aplikację w portalu deweloperów firmy Microsoft, ponieważ aplikacja musi zostać zarejestrowana, aby mogła wysyłać i odbierać powiadomienia.

  1. Zaloguj się do portalu deweloperów firmy Microsoft.

    Musisz zalogować się do konta Microsoft.

  2. Na pulpicie nawigacyjnym kliknij pozycję Utwórz nową aplikację.

    tworzenie aplikacji

  3. Zostanie wyświetlone wyskakujące okienko, w którym musisz zarezerwować nazwę nowej aplikacji. W polu tekstowym wstaw odpowiednią nazwę; jeśli wybrana nazwa jest dostępna, znacznik pojawi się po prawej stronie pola tekstowego. Po wstawieniu dostępnej nazwy kliknij przycisk Rezerwuj nazwę produktu w lewym dolnym rogu wyskakującego okienka.

    odwróć nazwę

  4. Po utworzeniu aplikacji możesz przejść do następnego rozdziału.

Rozdział 2 . Pobieranie nowych poświadczeń aplikacji

Zaloguj się do portalu rejestracji aplikacji, w którym zostanie wyświetlona nowa aplikacja, i pobierz poświadczenia, które będą używane do konfigurowania usługi Notification Hubs w witrynie Azure Portal.

  1. Przejdź do portalu rejestracji aplikacji.

    portal rejestracji aplikacji

    Ostrzeżenie

    Musisz użyć konta Microsoft do logowania.
    Musi to być konto Microsoft, które zostało użyte w poprzednim rozdziale z portalem deweloperów sklepu Windows Store.

  2. Aplikację znajdziesz w sekcji Moje aplikacje . Po znalezieniu kliknij ją i nastąpi przekierowanie do nowej strony, na której znajduje się nazwa aplikacji i rejestracja.

    nowo zarejestrowana aplikacja

  3. Przewiń w dół stronę rejestracji, aby znaleźć sekcję Wpisy tajne aplikacji i identyfikator SID pakietu dla aplikacji. Skopiuj obie do użycia z konfigurowaniem usługi Azure Notification Hubs w następnym rozdziale.

    wpisy tajne aplikacji

Rozdział 3 — Konfigurowanie witryny Azure Portal: tworzenie usługi Notification Hubs

Po pobraniu poświadczeń aplikacji należy przejść do witryny Azure Portal, w której utworzysz usługę Azure Notification Hubs.

  1. Zaloguj się do witryny Azure Portal.

    Uwaga

    Jeśli nie masz jeszcze konta platformy Azure, musisz go utworzyć. Jeśli obserwujesz ten samouczek w sytuacji w klasie lub laboratorium, poproś instruktora lub jednego z opiekunów o pomoc w skonfigurowaniu nowego konta.

  2. Po zalogowaniu kliknij pozycję Nowy w lewym górnym rogu i wyszukaj pozycję Notification Hub, a następnie kliknij przycisk Enter.

    wyszukiwanie centrum powiadomień

    Uwaga

    Wyraz Nowy mógł zostać zastąpiony ciągiem Create a resource (Utwórz zasób) w nowszych portalach.

  3. Nowa strona zawiera opis usługi Notification Hubs . W lewym dolnym rogu tego monitu wybierz przycisk Utwórz , aby utworzyć skojarzenie z tą usługą.

    tworzenie wystąpienia usługi Notification Hubs

  4. Po kliknięciu pozycji Utwórz:

    1. Wstaw żądaną nazwę dla tego wystąpienia usługi.

    2. Podaj przestrzeń nazw , którą będzie można skojarzyć z tą aplikacją.

    3. Wybierz lokalizację.

    4. Wybierz grupę zasobów lub utwórz nową. Grupa zasobów umożliwia monitorowanie, kontrolowanie dostępu, aprowizowania i zarządzania rozliczeniami dla kolekcji zasobów platformy Azure. Zaleca się przechowywanie wszystkich usług platformy Azure skojarzonych z jednym projektem (np. takich jak te laboratoria) w ramach wspólnej grupy zasobów.

      Jeśli chcesz dowiedzieć się więcej na temat grup zasobów platformy Azure, skorzystaj z tego linku, aby dowiedzieć się, jak zarządzać grupą zasobów.

    5. Wybierz odpowiednią subskrypcję.

    6. Musisz również potwierdzić, że rozumiesz warunki i postanowienia zastosowane do tej usługi.

    7. Wybierz przycisk Utwórz.

      podaj szczegóły usługi

  5. Po kliknięciu pozycji Utwórz trzeba będzie poczekać, aż usługa zostanie utworzona, może to potrwać minutę.

  6. Po utworzeniu wystąpienia usługi w portalu zostanie wyświetlone powiadomienie.

    Powiadomienie

  7. Kliknij przycisk Przejdź do zasobu w powiadomieniu, aby zapoznać się z nowym wystąpieniem usługi. Nastąpi przekierowanie do nowego wystąpienia usługi Notification Hub .

    Zrzut ekranu przedstawiający przycisk

  8. Na stronie przeglądu w połowie strony kliknij pozycję Windows (WNS). Panel po prawej stronie zmieni się, aby wyświetlić dwa pola tekstowe, które wymagają identyfikatora SID pakietu i klucza zabezpieczeń, z skonfigurowanej wcześniej aplikacji.

    nowo utworzona usługa hubs

  9. Po skopiowaniu szczegółów do poprawnych pól kliknij przycisk Zapisz i otrzymasz powiadomienie o pomyślnym zaktualizowaniu centrum powiadomień.

    kopiowanie szczegółów zabezpieczeń

Rozdział 4 . Konfigurowanie witryny Azure Portal: tworzenie usługi Table Service

Po utworzeniu wystąpienia usługi Notification Hubs przejdź z powrotem do witryny Azure Portal, w której utworzysz usługę Azure Tables Service, tworząc zasób magazynu.

  1. Jeśli jeszcze nie zalogowaliśmy się, zaloguj się do witryny Azure Portal.

  2. Po zalogowaniu kliknij pozycję Nowy w lewym górnym rogu i wyszukaj pozycję Konto magazynu, a następnie kliknij przycisk Enter.

    Uwaga

    Wyraz Nowy mógł zostać zastąpiony ciągiem Create a resource (Utwórz zasób) w nowszych portalach.

  3. Wybierz pozycję Konto magazynu — obiekt blob, plik, tabela, kolejka z listy.

    wyszukiwanie konta magazynu

  4. Nowa strona zawiera opis usługi konta magazynu . W lewym dolnym rogu tego monitu wybierz przycisk Utwórz , aby utworzyć wystąpienie tej usługi.

    tworzenie wystąpienia magazynu

  5. Po kliknięciu pozycji Utwórz zostanie wyświetlony panel:

    1. Wstaw żądaną nazwę dla tego wystąpienia usługi (musi mieć wszystkie małe litery).

    2. W obszarze Model wdrażania kliknij pozycję Resource Manager.

    3. W polu Rodzaj konta, korzystając z menu rozwijanego, wybierz pozycję Magazyn (ogólnego przeznaczenia w wersji 1).

    4. Wybierz odpowiednią lokalizację.

    5. W menu rozwijanym Replikacja wybierz pozycję Read-access-geo-redundant storage (RA-GRS).

    6. W obszarze Wydajność kliknij pozycję Standardowa.

    7. W sekcji Wymagany bezpieczny transfer wybierz pozycję Wyłączone.

    8. Z menu rozwijanego Subskrypcja wybierz odpowiednią subskrypcję.

    9. Wybierz grupę zasobów lub utwórz nową. Grupa zasobów umożliwia monitorowanie, kontrolowanie dostępu, aprowizowania i zarządzania rozliczeniami dla kolekcji zasobów platformy Azure. Zaleca się przechowywanie wszystkich usług platformy Azure skojarzonych z jednym projektem (np. takich jak te laboratoria) w ramach wspólnej grupy zasobów.

      Jeśli chcesz dowiedzieć się więcej na temat grup zasobów platformy Azure, skorzystaj z tego linku, aby dowiedzieć się, jak zarządzać grupą zasobów.

    10. Pozostaw pozycję Sieci wirtualnejako Wyłączone , jeśli jest to opcja dla Ciebie.

    11. Kliknij pozycję Utwórz.

      wypełnij szczegóły magazynu

  6. Po kliknięciu pozycji Utwórz trzeba będzie poczekać, aż usługa zostanie utworzona, może to potrwać minutę.

  7. Po utworzeniu wystąpienia usługi w portalu zostanie wyświetlone powiadomienie. Kliknij powiadomienia, aby zapoznać się z nowym wystąpieniem usługi.

    nowe powiadomienie o magazynie

  8. Kliknij przycisk Przejdź do zasobu w powiadomieniu, aby zapoznać się z nowym wystąpieniem usługi. Nastąpi przekierowanie do nowej strony przeglądu wystąpienia usługi Storage.

    Zrzut ekranu przedstawiający przycisk

  9. Na stronie przeglądu po prawej stronie kliknij pozycję Tabele.

    Zrzut ekranu pokazujący, gdzie wybrać pozycję Tabele.

  10. Panel po prawej stronie zmieni się, aby wyświetlić informacje o usłudze Table Service , gdzie należy dodać nową tabelę. Zrób to, klikając + przycisk Tabela w lewym górnym rogu.

    otwórz tabele

  11. Zostanie wyświetlona nowa strona, w której należy wprowadzić nazwę tabeli. Jest to nazwa używana do odwoływania się do danych w aplikacji w kolejnych rozdziałach. Wstaw odpowiednią nazwę i kliknij przycisk OK.

    tworzenie nowej tabeli

  12. Po utworzeniu nowej tabeli będzie można ją zobaczyć na stronie Usługi tabel (u dołu).

    nowa tabela utworzona

Rozdział 5 . Kończenie tabeli platformy Azure w programie Visual Studio

Teraz, gdy konto usługi Table Service Storage zostało skonfigurowane, nadszedł czas, aby dodać do niego dane, które będą używane do przechowywania i pobierania informacji. Edytowanie tabel można wykonać za pośrednictwem programu Visual Studio.

  1. Otwórz program Visual Studio.

  2. W menu kliknij pozycję Wyświetl>Eksploratora chmury.

    otwieranie eksploratora chmury

  3. Eksplorator chmury otworzy się jako zadokowany element (być cierpliwym, ponieważ ładowanie może zająć trochę czasu).

    Uwaga

    Jeśli subskrypcja użyta do utworzenia kont magazynu nie jest widoczna, upewnij się, że masz:

    • Zalogowano się do tego samego konta co użyte w witrynie Azure Portal.

    • Wybrano subskrypcję ze strony zarządzania kontami (może być konieczne zastosowanie filtru z ustawień konta):

      znajdowanie subskrypcji

  4. Zostaną wyświetlone usługi w chmurze platformy Azure. Znajdź konta magazynu i kliknij strzałkę po lewej stronie, aby rozwinąć konta.

    otwieranie kont magazynu

  5. Po rozwinięciu nowo utworzone konto magazynu powinno być dostępne. Kliknij strzałkę po lewej stronie magazynu, a następnie po rozwinięciu znajdź tabele i kliknij strzałkę obok tej pozycji, aby wyświetlić tabelę utworzoną w ostatnim rozdziale. Kliknij dwukrotnie tabelę.

    otwórz tabelę obiektów sceny

  6. Tabela zostanie otwarta w środku okna programu Visual Studio. Kliknij ikonę tabeli z ikoną + (plus) na niej.

    dodawanie nowej tabeli

  7. Zostanie wyświetlone okno z monitem o dodanie jednostki. Utworzysz w sumie trzy jednostki, z których każda ma kilka właściwości. Zauważysz, że są już podane wartości PartitionKey i RowKey , ponieważ są one używane przez tabelę do znajdowania danych.

    klucz partycji i wiersza

  8. Zaktualizuj wartość elementu PartitionKey i RowKey w następujący sposób (pamiętaj, aby to zrobić dla każdej dodawanej właściwości wiersza, choć zwiększa wartość RowKey za każdym razem):

    dodawanie poprawnych wartości

  9. Kliknij pozycję Dodaj właściwość , aby dodać dodatkowe wiersze danych. Utwórz pierwszą pustą tabelę zgodną z poniższą tabelą.

  10. Po zakończeniu kliknij przycisk OK .

    kliknij przycisk OK po zakończeniu

    Ostrzeżenie

    Upewnij się, że zmieniono typ pozycji X, Y i Z na Wartość Podwójna.

  11. Zobaczysz, że tabela ma teraz wiersz danych. Kliknij ponownie ikonę + (plus), aby dodać inną jednostkę.

    pierwszy wiersz

  12. Utwórz dodatkową właściwość, a następnie ustaw wartości nowej jednostki tak, aby były zgodne z wartościami przedstawionymi poniżej.

    dodawanie modułu

  13. Powtórz ostatni krok, aby dodać kolejną jednostkę. Ustaw wartości dla tej jednostki na pokazane poniżej.

    dodawanie cylindra

  14. Tabela powinna teraz wyglądać podobnie do poniższej.

    tabela ukończona

  15. Ukończono ten rozdział. Pamiętaj o zapisaniu.

Rozdział 6 — Tworzenie aplikacji funkcji platformy Azure

Utwórz aplikację funkcji platformy Azure, która zostanie wywołana przez aplikację klasyczną w celu zaktualizowania usługi Table Service i wysłania powiadomienia za pośrednictwem centrum powiadomień.

Najpierw należy utworzyć plik, który umożliwi funkcji platformy Azure ładowanie potrzebnych bibliotek.

  1. Otwórz Notatnik (naciśnij klawisz systemu Windows i wpisz Notatnik).

    otwórz Notatnik

  2. Po otwarciu Notatnika wstaw poniżej strukturę JSON. Po wykonaniu tej czynności zapisz go na pulpicie jako plik project.json. Ważne jest, aby nazewnictwo było poprawne: upewnij się, że nie ma .txt rozszerzenia pliku. Ten plik definiuje biblioteki, których będzie używać funkcja, jeśli użyto narzędzia NuGet, będzie wyglądać znajomo.

    {
    "frameworks": {
        "net46":{
        "dependencies": {
            "WindowsAzure.Storage": "7.0.0",
            "Microsoft.Azure.NotificationHubs" : "1.0.9",
            "Microsoft.Azure.WebJobs.Extensions.NotificationHubs" :"1.1.0"
        }
        }
    }
    }
    
  3. Zaloguj się do witryny Azure Portal.

  4. Po zalogowaniu kliknij pozycję Nowy w lewym górnym rogu i wyszukaj pozycję Aplikacja funkcji, naciśnij klawisz Enter.

    wyszukiwanie aplikacji funkcji

    Uwaga

    Wyraz Nowy mógł zostać zastąpiony ciągiem Create a resource (Utwórz zasób) w nowszych portalach.

  5. Nowa strona zawiera opis usługi App Service funkcji . W lewym dolnym rogu tego monitu wybierz przycisk Utwórz , aby utworzyć skojarzenie z tą usługą.

    wystąpienie aplikacji funkcji

  6. Po kliknięciu pozycji Utwórz wypełnij następujące informacje:

    1. W polu Nazwa aplikacji wstaw żądaną nazwę dla tego wystąpienia usługi.

    2. Wybierz subskrypcję.

    3. Wybierz warstwę cenową odpowiednią dla Ciebie, jeśli jest to pierwszy raz podczas tworzenia App Service funkcji, warstwa bezpłatna powinna być dostępna dla Ciebie.

    4. Wybierz grupę zasobów lub utwórz nową. Grupa zasobów umożliwia monitorowanie, kontrolowanie dostępu, aprowizowania i zarządzania rozliczeniami dla kolekcji zasobów platformy Azure. Zaleca się zachowanie wszystkich usług platformy Azure skojarzonych z jednym projektem (np. takich jak te laboratoria) w ramach wspólnej grupy zasobów.

      Jeśli chcesz dowiedzieć się więcej na temat grup zasobów platformy Azure, skorzystaj z tego linku, aby dowiedzieć się, jak zarządzać grupą zasobów.

    5. W przypadku systemu operacyjnego kliknij pozycję Windows, ponieważ jest to przeznaczona platforma.

    6. Wybierz plan hostingu (w tym samouczku jest używany plan zużycia.

    7. Wybierz lokalizację (wybierz tę samą lokalizację co magazyn utworzony w poprzednim kroku)

    8. W sekcji Magazynmusisz wybrać usługę magazynu utworzoną w poprzednim kroku.

    9. Nie potrzebujesz usługi Application Insights w tej aplikacji, więc możesz pozostawić ją wyłączoną.

    10. Kliknij pozycję Utwórz.

      tworzenie nowego wystąpienia

  7. Po kliknięciu pozycji Utwórz trzeba będzie poczekać na utworzenie usługi, może to potrwać minutę.

  8. Po utworzeniu wystąpienia usługi w portalu zostanie wyświetlone powiadomienie.

    nowe powiadomienie

  9. Kliknij powiadomienia, aby zapoznać się z nowym wystąpieniem usługi.

  10. Kliknij przycisk Przejdź do zasobu w powiadomieniu, aby zapoznać się z nowym wystąpieniem usługi.

    Zrzut ekranu przedstawiający przycisk

  11. Kliknij ikonę + (plus) obok pozycji Funkcje, aby utworzyć nową.

    dodawanie nowej funkcji

  12. W panelu centralnym zostanie wyświetlone okno Tworzenie funkcji . Zignoruj informacje w górnej części panelu, a następnie kliknij pozycję Funkcja niestandardowa znajdująca się w dolnej części (w niebieskim obszarze, jak pokazano poniżej).

    funkcja niestandardowa

  13. Nowa strona w oknie będzie zawierać różne typy funkcji. Przewiń w dół, aby wyświetlić fioletowe typy, a następnie kliknij pozycję ELEMENT HTTP PUT .

    łącze http put

    Ważne

    Może być konieczne przewinięcie w dół strony (a ten obraz może nie wyglądać dokładnie tak samo, jeśli miały miejsce aktualizacje witryny Azure Portal), jednak szukasz elementu o nazwie HTTP PUT.

  14. Zostanie wyświetlone okno HTTP PUT , w którym należy skonfigurować funkcję (zobacz poniżej, aby zapoznać się z obrazem).

    1. W obszarze Język , korzystając z menu rozwijanego, wybierz pozycję C#.

    2. W polu Nazwa wprowadź odpowiednią nazwę.

    3. W menu rozwijanym Poziom uwierzytelniania wybierz pozycję Funkcja.

    4. W sekcji Nazwa tabeli musisz użyć dokładnej nazwy użytej do wcześniejszego utworzenia usługi Table Service (w tym tej samej litery).

    5. W sekcji Połączenie konta magazynu użyj menu rozwijanego i wybierz konto magazynu. Jeśli tam nie ma, kliknij hiperlink Nowy obok tytułu sekcji, aby wyświetlić inny panel, w którym powinno być wyświetlane konto magazynu.

      Zrzut ekranu przedstawiający sekcję Połączenie konta magazynu z wybranym hiperlinkiem

  15. Kliknij przycisk Utwórz i otrzymasz powiadomienie o pomyślnym zaktualizowaniu ustawień.

    create, funkcja

  16. Po kliknięciu przycisku Utwórz nastąpi przekierowanie do edytora funkcji.

    aktualizacja kodu funkcji

  17. Wstaw następujący kod do edytora funkcji (zastępując kod w funkcji):

    #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; }
    }
    

    Uwaga

    Korzystając z dołączonych bibliotek, funkcja odbiera nazwę i lokalizację obiektu, który został przeniesiony w scenie aparatu Unity (jako obiekt C#, o nazwie UnityGameObject). Ten obiekt jest następnie używany do aktualizowania parametrów obiektu w utworzonej tabeli. W tym celu funkcja wywołuje utworzoną usługę Notification Hub, która powiadamia wszystkie subskrybowane aplikacje.

  18. Po kodzie kliknij przycisk Zapisz.

  19. Następnie kliknij ikonę < (strzałka) po prawej stronie strony.

    otwórz panel przekazywania

  20. Panel będzie przesuwał się z prawej strony. Na tym panelu kliknij pozycję Przekaż, a zostanie wyświetlona przeglądarka plików.

  21. Przejdź do pliku project.json utworzonego wcześniej w Notatniku i kliknij go, a następnie kliknij przycisk Otwórz . Ten plik definiuje biblioteki, których będzie używać funkcja.

    przekaż plik json

  22. Po przekazaniu pliku zostanie on wyświetlony w panelu po prawej stronie. Kliknięcie go spowoduje otwarcie go w edytorze funkcji . Musi ona wyglądać dokładnie tak samo jak na następnym obrazie (poniżej kroku 23).

  23. Następnie w panelu po lewej stronie pod pozycją Funkcje kliknij link Integruj .

    integrate, funkcja

  24. Na następnej stronie w prawym górnym rogu kliknij pozycję Edytor zaawansowany (jak pokazano poniżej).

    otwieranie edytora zaawansowanego

  25. Plik function.json zostanie otwarty w panelu środkowym, który należy zastąpić poniższym fragmentem kodu. Definiuje kompilowaną funkcję i parametry przekazywane do funkcji.

    {
    "bindings": [
        {
        "authLevel": "function",
        "type": "httpTrigger",
        "methods": [
            "get",
            "post"
        ],
        "name": "gameObj",
        "direction": "in"
        },
        {
        "type": "table",
        "name": "table",
        "tableName": "SceneObjectsTable",
        "connection": "mrnothubstorage_STORAGE",
        "direction": "in"
        },
        {
        "type": "notificationHub",
        "direction": "out",
        "name": "notification",
        "hubName": "MR_NotHub_ServiceInstance",
        "connection": "MRNotHubNS_DefaultFullSharedAccessSignature_NH",
        "platform": "wns"
        }
    ]
    }
    
  26. Edytor powinien teraz wyglądać podobnie do poniższego obrazu:

    powrót do standardowego edytora

  27. Możesz zauważyć, że wstawione parametry wejściowe mogą nie być zgodne ze szczegółami tabeli i magazynu, dlatego należy je zaktualizować przy użyciu informacji. Nie rób tego tutaj, ponieważ zostanie omówiony w następnej kolejności. Kliknij link Edytor standardowy w prawym górnym rogu strony, aby wrócić.

  28. W edytorze w warstwie Standardowa kliknij pozycję Azure Table Storage (tabela), w obszarze Dane wejściowe.

    Dane wejściowe tabeli

  29. Upewnij się, że informacje zgodne z następującymi informacjami, ponieważ mogą się one różnić (poniżej znajduje się obraz poniżej następujących kroków):

    1. Nazwa tabeli: nazwa tabeli utworzonej w usłudze Azure Storage, Tables.

    2. Połączenie konta magazynu: kliknij przycisk nowy, który pojawi się obok menu rozwijanego, a panel pojawi się po prawej stronie okna.

      Zrzut ekranu przedstawiający okno Konto magazynu z wyróżnioną pozycją

      1. Wybierz konto magazynu utworzone wcześniej do hostowania aplikacji funkcji.

      2. Zauważysz, że utworzono wartość połączenia konta magazynu .

      3. Pamiętaj, aby po zakończeniu nacisnąć przycisk Zapisz .

    3. Strona Dane wejściowe powinna być teraz zgodna z poniższymi informacjami.

      ukończone dane wejściowe

  30. Następnie kliknij pozycję Azure Notification Hub (powiadomienie) — w obszarze Dane wyjściowe. Upewnij się, że informacje są zgodne z następującymi informacjami, ponieważ mogą się różnić (poniżej przedstawiono obraz poniżej następujących kroków):

    1. Nazwa centrum powiadomień: jest to nazwa utworzonego wcześniej wystąpienia usługi Notification Hub .

    2. Połączenie przestrzeni nazw usługi Notification Hubs: kliknij przycisk nowy, który pojawi się obok menu rozwijanego.

      sprawdzanie danych wyjściowych

    3. Zostanie wyświetlone okno podręczne Połączenie (zobacz obraz poniżej), w którym musisz wybrać przestrzeń nazwcentrum powiadomień, która została skonfigurowana wcześniej.

    4. Wybierz nazwę centrum powiadomień z środkowego menu rozwijanego.

    5. Ustaw menu rozwijane Zasady na Wartość DefaultFullSharedAccessSignature.

    6. Kliknij przycisk Wybierz , aby wrócić.

      aktualizacja danych wyjściowych

  31. Strona Dane wyjściowe powinna teraz być zgodna z poniższymi informacjami, ale z informacjami . Pamiętaj, aby nacisnąć przycisk Zapisz.

Ostrzeżenie

Nie edytuj nazwy centrum powiadomień bezpośrednio (należy to zrobić przy użyciu Edytor zaawansowany, pod warunkiem, że wykonano poprzednie kroki prawidłowo.

Zrzut ekranu przedstawiający stronę Dane wyjściowe z ogólnymi informacjami.

  1. W tym momencie należy przetestować funkcję, aby upewnić się, że działa. W tym celu:

    1. Przejdź do strony funkcji jeszcze raz:

      Zrzut ekranu przedstawiający stronę funkcji z wyróżnioną nowo utworzoną funkcją.

    2. Po powrocie na stronę funkcji kliknij kartę Test po prawej stronie, aby otworzyć blok Test :

      Zrzut ekranu przedstawiający stronę funkcji z wyróżnionym napisem

    3. W polu tekstowym Treść żądania bloku wklej poniższy kod:

      {  
          "Type":null,
          "X":3,
          "Y":0,
          "Z":1,
          "PartitionKey":null,
          "RowKey":"Obj2",
          "Timestamp":"0001-01-01T00:00:00+00:00",
          "ETag":null
      }
      
    4. Po uruchomieniu kodu testowego kliknij przycisk Uruchom w prawym dolnym rogu, a test zostanie uruchomiony. Dzienniki wyjściowe testu zostaną wyświetlone w obszarze konsoli poniżej kodu funkcji.

      Zrzut ekranu przedstawiający dzienniki wyjściowe testu w obszarze konsoli.

    Ostrzeżenie

    Jeśli powyższy test zakończy się niepowodzeniem, należy dokładnie sprawdzić, czy wykonano powyższe kroki, szczególnie ustawienia w panelu integracji.

Rozdział 7 — Konfigurowanie projektu aparatu Unity dla komputerów stacjonarnych

Ważne

Aplikacja klasyczna, którą teraz tworzysz, nie będzie działać w Edytorze aparatu Unity. Należy go uruchomić poza edytorem, po utworzeniu aplikacji przy użyciu programu Visual Studio (lub wdrożonej aplikacji).

Poniżej przedstawiono typową konfigurację do opracowywania za pomocą aparatu Unity i rzeczywistości mieszanej, a w związku z tym jest to dobry szablon dla innych projektów.

Skonfiguruj i przetestuj immersywny zestaw słuchawkowy rzeczywistości mieszanej.

Uwaga

Na potrzeby tego kursu nie będzie wymagane kontrolery ruchu. Jeśli potrzebujesz pomocy technicznej dotyczącej konfigurowania immersyjnego zestawu słuchawkowego, skorzystaj z tego linku, aby dowiedzieć się, jak skonfigurować Windows Mixed Reality.

  1. Otwórz aparat Unity i kliknij pozycję Nowy.

    Zrzut ekranu przedstawiający okno Projekty aparatu Unity z ikoną projektu

  2. Musisz podać nazwę projektu aparatu Unity, wstawić element UnityDesktopNotifHub. Upewnij się, że typ projektu ma ustawioną wartość 3D. Ustaw lokalizację na odpowiednią dla Ciebie (pamiętaj, że bliżej katalogów głównych jest lepiej). Następnie kliknij pozycję Utwórz projekt.

    tworzenie projektu

  3. Po otwarciu aparatu Unity warto sprawdzić domyślny edytor skryptów ustawiony na program Visual Studio. Przejdź do pozycji Edytuj>preferencje , a następnie w nowym oknie przejdź do pozycji Narzędzia zewnętrzne. Zmień edytor skryptów zewnętrznych na Visual Studio 2017. Zamknij okno Preferencje .

    ustawianie zewnętrznych narzędzi vs

  4. Następnie przejdź dopozycji Ustawienia kompilacjiplików> i wybierz pozycję platforma uniwersalna systemu Windows, a następnie kliknij przycisk Przełącz platformę, aby zastosować wybór.

    przełączanie platform

  5. Nadal wobszarze Ustawienia kompilacjipliku> upewnij się, że:

    1. Urządzenie docelowe jest ustawione na dowolne urządzenie

      Ta aplikacja będzie przeznaczona dla komputera, więc musi być dowolne urządzenie

    2. Typ kompilacji jest ustawiony na D3D

    3. Zestaw SDK jest ustawiony na najnowszą zainstalowaną

    4. Wersja programu Visual Studio jest ustawiona na najnowszą zainstalowaną

    5. Kompilowanie i uruchamianie jest ustawione na komputer lokalny

    6. W tym miejscu warto zapisać scenę i dodać ją do kompilacji.

      1. Zrób to, wybierając pozycję Dodaj otwarte sceny. Zostanie wyświetlone okno zapisywania.

        Zrzut ekranu przedstawiający wyróżnioną pozycję

      2. Utwórz nowy folder dla tego i dowolnego przyszłego sceny, a następnie wybierz przycisk Nowy folder , aby utworzyć nowy folder, nadaj mu nazwę Sceny.

        Zrzut ekranu przedstawiający nowy folder Sceny utworzony za pomocą polecenia

      3. Otwórz nowo utworzony folder Sceny , a następnie w polu Nazwa pliku: tekst wpisz NH_Desktop_Scene, a następnie naciśnij przycisk Zapisz.

        nowy NH_Desktop_Scene

    7. Pozostałe ustawienia w obszarze Ustawienia kompilacji powinny być pozostawione jako domyślne na razie.

  6. W tym samym oknie kliknij przycisk Ustawienia odtwarzacza , spowoduje to otwarcie powiązanego panelu w przestrzeni, w której znajduje się inspektor .

  7. W tym panelu należy zweryfikować kilka ustawień:

    1. Na karcie Inne ustawienia :

      1. Wersja środowiska uruchomieniowego skryptów powinna być eksperymentalna (odpowiednik platformy.NET 4.6)

      2. Zaplecze skryptów powinno mieć wartość .NET

      3. Poziom zgodności interfejsu API powinien mieć wartość .NET 4.6

        Wersja netto 4.6

    2. Na karcie Ustawienia publikowania w obszarze Możliwości sprawdź:

      • InternetClient

        Zrzut ekranu przedstawiający element InternetClient wybrany w obszarze Możliwości.

  8. W obszarze Ustawienia kompilacjiProjekty aparatu Unity C# nie są już wyszarzone; zaznacz pole wyboru obok tego.

  9. Zamknij okno Build Settings (Ustawienia kompilacji).

  10. Zapisz scenę i plik> projektuZapisz scenę / plik>Zapisz projekt.

    Ważne

    Jeśli chcesz pominąć składnik Konfiguracji aparatu Unity dla tego projektu (aplikacja klasyczna) i kontynuować bezpośrednio w kodzie, możesz pobrać ten pakiet unitypackage, zaimportować go do projektu jako pakiet niestandardowy, a następnie kontynuować z rozdziału 9. Nadal trzeba będzie dodać składniki skryptu.

Rozdział 8 . Importowanie bibliotek DLL w środowisku Unity

Będziesz używać usługi Azure Storage dla środowiska Unity (która korzysta z zestawu .Net SDK dla platformy Azure). Aby uzyskać więcej informacji, postępuj zgodnie z tym linkiem dotyczącym usługi Azure Storage for Unity.

Obecnie istnieje znany problem w środowisku Unity, który wymaga ponownego skonfigurowania wtyczek po zaimportowaniu. Te kroki (4–7 w tej sekcji) nie będą już wymagane po rozwiązaniu usterki.

Aby zaimportować zestaw SDK do własnego projektu, upewnij się, że pobrano najnowszy pakiet unitypackage z usługi GitHub. Następnie wykonaj następujące czynności:

  1. Dodaj pakiet unitypackage do aparatu Unity przy użyciu opcji menu Importuj pakiet > niestandardowy pakietu Assets>.

  2. W wyświetlonym oknie Importuj pakiet aparatu Unity możesz wybrać wszystko w obszarze Wtyczka>Storage. Usuń zaznaczenie wszystkiego innego, ponieważ nie jest to potrzebne na potrzeby tego kursu.

    importowanie do pakietu

  3. Kliknij przycisk Importuj , aby dodać elementy do projektu.

  4. Przejdź do folderu Storage w obszarze Wtyczki w widoku Projekt i wybierz tylko następujące wtyczki:

    • Microsoft.Data.Edm
    • Microsoft.Data.OData
    • Microsoft.WindowsAzure.Storage
    • Newtonsoft.Json
    • System.Spatial

usuń zaznaczenie pola wyboru Dowolna platforma

  1. Po wybraniu tych określonych wtyczekusuń zaznaczenie pola wyboru Dowolna platforma i usuń zaznaczenie pola wyboruWSAPlayer, a następnie kliknij przycisk Zastosuj.

    stosowanie bibliotek dll platformy

    Uwaga

    Oznaczamy te konkretne wtyczki, które mają być używane tylko w edytorze aparatu Unity. Jest to spowodowane tym, że istnieją różne wersje tych samych wtyczek w folderze WSA, które będą używane po wyeksportowaniu projektu z aparatu Unity.

  2. W folderze Wtyczka magazynu wybierz tylko następujące opcje:

    • Microsoft.Data.Services.Client

      set don't process for dlls (zestaw nie przetwarzaj bibliotek dll)

  3. Zaznacz pole Nie przetwarzaj w obszarze Ustawienia platformy i kliknij przycisk Zastosuj.

    bez zastosowania przetwarzania

    Uwaga

    Oznaczamy tę wtyczkę "Nie przetwarzaj", ponieważ poprawka zestawu aparatu Unity ma trudności z przetwarzaniem tej wtyczki. Wtyczka będzie nadal działać, mimo że nie jest przetwarzana.

Rozdział 9 — Tworzenie klasy TableToScene w projekcie aparatu Unity dla komputerów stacjonarnych

Teraz należy utworzyć skrypty zawierające kod, aby uruchomić tę aplikację.

Pierwszy skrypt, który należy utworzyć, to TableToScene, który jest odpowiedzialny za:

  • Odczytywanie jednostek w tabeli platformy Azure.
  • Przy użyciu danych tabeli określ obiekty do zduplikowania i w jakiej pozycji.

Drugi skrypt, który należy utworzyć, to CloudScene, który jest odpowiedzialny za:

  • Zarejestrowanie zdarzenia kliknięcia po lewej stronie w celu umożliwienia użytkownikowi przeciągania obiektów wokół sceny.
  • Serializowanie danych obiektu z tej sceny aparatu Unity i wysyłanie ich do aplikacji funkcji platformy Azure.

Aby utworzyć tę klasę:

  1. Kliknij prawym przyciskiem myszy folder elementów zawartości znajdujący się w panelu projektu , Utwórz>folder. Nadaj folderowi nazwę Scripts( Skrypty).

    folder create scripts

    utwórz folder skryptów 2

  2. Kliknij dwukrotnie właśnie utworzony folder, aby go otworzyć.

  3. Kliknij prawym przyciskiem myszy wewnątrz folderu Scripts (Skrypty), a następnie kliknij polecenie CreateC# Script (Utwórz > skrypt języka C#). Nadaj skryptowi nazwę TableToScene.

    Zrzut ekranu przedstawiający sposób tworzenia nowego skryptu Nazwa tabeli TableToScene

  4. Kliknij dwukrotnie skrypt, aby otworzyć go w programie Visual Studio 2017.

  5. Dodaj następujące przestrzenie nazw:

    using Microsoft.WindowsAzure.Storage;
    using Microsoft.WindowsAzure.Storage.Auth;
    using Microsoft.WindowsAzure.Storage.Table;
    using UnityEngine;
    
  6. W klasie wstaw następujące zmienne:

        /// <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 -- ";
    

    Uwaga

    Zastąp wartość accountName nazwą usługi Azure Storage i wartością accountKey wartością klucza znajdującą się w usłudze Azure Storage w witrynie Azure Portal (zobacz obraz poniżej).

    pobieranie klucza konta

  7. Teraz dodaj metody Start() i Awake(), aby zainicjować klasę.

        /// <summary>
        /// Triggers before initialization
        /// </summary>
        void Awake()
        {
            // static instance of this class
            instance = this;
        }
    
        /// <summary>
        /// Use this for initialization
        /// </summary>
        void Start()
        {  
            // Call method to populate the scene with new objects as 
            // pecified in the Azure Table
            PopulateSceneFromTableAsync();
        }
    
  8. W klasie TableToScene dodaj metodę, która pobierze wartości z tabeli platformy Azure i użyje ich do zduplikowania odpowiednich elementów pierwotnych w scenie.

        /// <summary>    
        /// Populate the scene with new objects as specified in the Azure Table    
        /// </summary>    
        private async void PopulateSceneFromTableAsync()
        {
            // Obtain credentials for the Azure Storage
            StorageCredentials creds = new StorageCredentials(accountName, accountKey);
    
            // Storage account
            CloudStorageAccount account = new CloudStorageAccount(creds, useHttps: true);
    
            // Storage client
            CloudTableClient client = account.CreateCloudTableClient(); 
    
            // Table reference
            CloudTable table = client.GetTableReference("SceneObjectsTable");
    
            TableContinuationToken token = null;
    
            // Query the table for every existing Entity
            do
            {
                // Queries the whole table by breaking it into segments
                // (would happen only if the table had huge number of Entities)
                TableQuerySegment<AzureTableEntity> queryResult = await table.ExecuteQuerySegmentedAsync(new TableQuery<AzureTableEntity>(), token); 
    
                foreach (AzureTableEntity entity in queryResult.Results)
                {
                    GameObject newSceneGameObject = null;
                    Color newColor;
    
                    // check for the Entity Type and spawn in the scene the appropriate Primitive
                    switch (entity.Type)
                    {
                        case "Cube":
                            // Create a Cube in the scene
                            newSceneGameObject = GameObject.CreatePrimitive(PrimitiveType.Cube);
                            newColor = Color.blue;
                            break;
    
                        case "Sphere":
                            // Create a Sphere in the scene
                            newSceneGameObject = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                            newColor = Color.red;
                            break;
    
                        case "Cylinder":
                            // Create a Cylinder in the scene
                            newSceneGameObject = GameObject.CreatePrimitive(PrimitiveType.Cylinder);
                            newColor = Color.yellow;
                            break;
                        default:
                            newColor = Color.white;
                            break;
                    }
    
                    newSceneGameObject.name = entity.RowKey;
    
                    newSceneGameObject.GetComponent<MeshRenderer>().material = new Material(Shader.Find("Diffuse"))
                    {
                        color = newColor
                    };
    
                    //check for the Entity X,Y,Z and move the Primitive at those coordinates
                    newSceneGameObject.transform.position = new Vector3((float)entity.X, (float)entity.Y, (float)entity.Z);
                }
    
                // if the token is null, it means there are no more segments left to query
                token = queryResult.ContinuationToken;
            }
    
            while (token != null);
        }
    
  9. Poza klasą TableToScene należy zdefiniować klasę używaną przez aplikację do serializacji i deserializacji jednostek tabeli.

        /// <summary>
        /// This objects is used to serialize and deserialize the Azure Table Entity
        /// </summary>
        [System.Serializable]
        public class AzureTableEntity : TableEntity
        {
            public AzureTableEntity(string partitionKey, string rowKey)
                : base(partitionKey, rowKey) { }
    
            public AzureTableEntity() { }
            public string Type { get; set; }
            public double X { get; set; }
            public double Y { get; set; }
            public double Z { get; set; }
        }
    
  10. Przed powrotem do edytora aparatu Unity upewnij się, że polecenie Zapisz .

  11. Kliknij kamerę główną z panelu Hierarchia , aby jego właściwości pojawiały się w inspektorze.

  12. Po otwarciu folderu Scripts wybierz plik TableToScene skryptu i przeciągnij go do aparatu głównego. Wynik powinien być następujący:

    dodawanie skryptu do aparatu głównego

Rozdział 10 — Tworzenie klasy CloudScene w projekcie aparatu Unity dla komputerów stacjonarnych

Drugi skrypt, który należy utworzyć, to CloudScene, który jest odpowiedzialny za:

  • Zarejestrowanie zdarzenia kliknięcia po lewej stronie w celu umożliwienia użytkownikowi przeciągania obiektów wokół sceny.

  • Serializowanie danych obiektu z tej sceny aparatu Unity i wysyłanie ich do aplikacji funkcji platformy Azure.

Aby utworzyć drugi skrypt:

  1. Kliknij prawym przyciskiem myszy wewnątrz folderu Scripts (Skrypty ), kliknij polecenie Create (Utwórz), C# Script (Skrypt języka C#). Nadaj skryptowi nazwę CloudScene

    Zrzut ekranu przedstawiający sposób tworzenia nowego skryptu zmienianie nazwy cloudScene

  2. Dodaj następujące przestrzenie nazw:

    using Newtonsoft.Json;
    using System.Collections;
    using System.Text;
    using System.Threading.Tasks;
    using UnityEngine;
    using UnityEngine.Networking;
    
  3. Wstaw następujące zmienne:

        /// <summary>
        /// Allows this class to behave like a singleton
        /// </summary>
        public static CloudScene instance;
    
        /// <summary>
        /// Insert here you Azure Function Url
        /// </summary>
        private string azureFunctionEndpoint = "--Insert here you Azure Function Endpoint--";
    
        /// <summary>
        /// Flag for object being moved
        /// </summary>
        private bool gameObjHasMoved;
    
        /// <summary>
        /// Transform of the object being dragged by the mouse
        /// </summary>
        private Transform gameObjHeld;
    
        /// <summary>
        /// Class hosted in the TableToScene script
        /// </summary>
        private AzureTableEntity azureTableEntity;
    
  4. Zastąp wartość azureFunctionEndpoint adresem URL aplikacji funkcji platformy Azure znajdującym się w App Service funkcji platformy Azure w witrynie Azure Portal, jak pokazano na poniższej ilustracji:

    get function URL (uzyskiwanie adresu URL funkcji)

  5. Teraz dodaj metody Start() i Awake(), aby zainicjować klasę.

        /// <summary>
        /// Triggers before initialization
        /// </summary>
        void Awake()
        {
            // static instance of this class
            instance = this;
        }
    
        /// <summary>
        /// Use this for initialization
        /// </summary>
        void Start()
        {
            // initialise an AzureTableEntity
            azureTableEntity = new AzureTableEntity();
        }
    
  6. W metodzie Update() dodaj następujący kod, który wykryje wprowadzanie i przeciąganie myszą, co z kolei spowoduje przeniesienie obiektów GameObject w scenie. Jeśli użytkownik przeciągnął i upuścił obiekt, przekaże nazwę i współrzędne obiektu do metody UpdateCloudScene(), która wywoła usługę Azure Function App Service, która zaktualizuje tabelę platformy Azure i wyzwoli powiadomienie.

        /// <summary>
        /// Update is called once per frame
        /// </summary>
        void Update()
        {
            //Enable Drag if button is held down
            if (Input.GetMouseButton(0))
            {
                // Get the mouse position
                Vector3 mousePosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10);
    
                Vector3 objPos = Camera.main.ScreenToWorldPoint(mousePosition);
    
                Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    
                RaycastHit hit;
    
                // Raycast from the current mouse position to the object overlapped by the mouse
                if (Physics.Raycast(ray, out hit))
                {
                    // update the position of the object "hit" by the mouse
                    hit.transform.position = objPos;
    
                    gameObjHasMoved = true;
    
                    gameObjHeld = hit.transform;
                }
            }
    
            // check if the left button mouse is released while holding an object
            if (Input.GetMouseButtonUp(0) && gameObjHasMoved)
            {
                gameObjHasMoved = false;
    
                // Call the Azure Function that will update the appropriate Entity in the Azure Table
                // and send a Notification to all subscribed Apps
                Debug.Log("Calling Azure Function");
    
                StartCoroutine(UpdateCloudScene(gameObjHeld.name, gameObjHeld.position.x, gameObjHeld.position.y, gameObjHeld.position.z));
            }
        }
    
  7. Teraz dodaj metodę UpdateCloudScene(), jak pokazano poniżej:

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

  9. Przeciągnij skrypt CloudScene na aparat główny.

    1. Kliknij kamerę główną z panelu Hierarchia , aby jego właściwości pojawiały się w inspektorze.

    2. Po otwarciu folderu Scripts (Skrypty ) wybierz skrypt CloudScene i przeciągnij go do głównego aparatu fotograficznego. Wynik powinien być następujący:

      przeciąganie skryptu chmury na kamerę główną

Rozdział 11 — Kompilowanie projektu klasycznego do platformy UWP

Wszystko, co jest potrzebne w sekcji aparatu Unity tego projektu, zostało ukończone.

  1. Przejdź do pozycji Ustawienia kompilacji (ustawienia kompilacjipliku>).

  2. W oknie Ustawienia kompilacji kliknij pozycję Kompiluj.

    Zrzut ekranu przedstawiający okno Ustawienia kompilacji z wybraną platforma uniwersalna systemu Windows i przyciskiem

  3. Zostanie wyświetlone okno Eksplorator plików z monitem o lokalizację kompilacji. Utwórz nowy folder (klikając pozycję Nowy folder w lewym górnym rogu) i nadaj mu nazwę BUILDS.

    nowy folder do kompilacji

    1. Otwórz nowy folder BUILDS i utwórz kolejny folder (przy użyciu nowego folderu po raz kolejny) i nadaj mu nazwę NH_Desktop_App.

      nazwa folderu NH_Desktop_App

    2. Po wybraniu NH_Desktop_App . kliknij pozycję Wybierz folder. Kompilacja projektu może potrwać kilka minut.

  4. Po zakończeniu kompilacji Eksplorator plików zostanie wyświetlona lokalizacja nowego projektu. Nie trzeba go jednak otwierać, ponieważ musisz najpierw utworzyć inny projekt aparatu Unity, w kilku następnych rozdziałach.

Rozdział 12 — Konfigurowanie projektu Mixed Reality Unity

Poniżej przedstawiono typową konfigurację do opracowywania za pomocą rzeczywistości mieszanej, a w związku z tym jest to dobry szablon dla innych projektów.

  1. Otwórz aparat Unity i kliknij pozycję Nowy.

    Zrzut ekranu przedstawiający okno Projekty aparatu Unity z wyróżnioną pozycją

  2. Teraz musisz podać nazwę projektu aparatu Unity, wstawić aparat UnityMRNotifHub. Upewnij się, że typ projektu jest ustawiony na wartość 3D. Ustaw lokalizację na odpowiednią dla Siebie (pamiętaj, że bliżej katalogów głównych jest lepiej). Następnie kliknij pozycję Utwórz projekt.

    name UnityMRNotifHub

  3. Po otwarciu aparatu Unity warto sprawdzić, czy domyślny edytor skryptów jest ustawiony na program Visual Studio. Przejdź do pozycji Edytuj>preferencje , a następnie w nowym oknie przejdź do pozycji Narzędzia zewnętrzne. Zmień edytor skryptów zewnętrznych na Visual Studio 2017. Zamknij okno Preferencje .

    ustaw edytor zewnętrzny na vs

  4. Następnie przejdź dopozycji Ustawienia kompilacjiplików> i przełącz platformę na platforma uniwersalna systemu Windows, klikając przycisk Przełącz platformę.

    przełączanie platform na platformę UWP

  5. Przejdź dopozycji Ustawienia kompilacjipliku> i upewnij się, że:

    1. Urządzenie docelowe jest ustawione na dowolne urządzenie

      W przypadku Microsoft HoloLens ustaw wartość Urządzenie docelowe na HoloLens.

    2. Typ kompilacji jest ustawiony na D3D

    3. Zestaw SDK jest ustawiony na najnowszą zainstalowaną

    4. Wersja programu Visual Studio jest ustawiona na najnowszą zainstalowaną

    5. Kompilowanie i uruchamianie jest ustawione na komputer lokalny

    6. W tym miejscu warto zapisać scenę i dodać ją do kompilacji.

      1. Zrób to, wybierając pozycję Dodaj otwarte sceny. Zostanie wyświetlone okno zapisywania.

        Zrzut ekranu przedstawiający okno Ustawienia kompilacji z przyciskiem

      2. Utwórz nowy folder dla tego i dowolnego przyszłego sceny, a następnie wybierz przycisk Nowy folder , aby utworzyć nowy folder, nadaj mu nazwę Sceny.

        Zrzut ekranu przedstawiający pozycję

      3. Otwórz nowo utworzony folder Sceny , a następnie w polu Nazwa pliku: tekst wpisz NH_MR_Scene, a następnie naciśnij przycisk Zapisz.

        nowa scena — NH_MR_Scene

    7. Pozostałe ustawienia w obszarze Ustawienia kompilacji powinny być pozostawione jako domyślne na razie.

  6. W tym samym oknie kliknij przycisk Ustawienia odtwarzacza , spowoduje to otwarcie powiązanego panelu w przestrzeni, w której znajduje się inspektor .

    otwórz ustawienia odtwarzacza

  7. W tym panelu należy zweryfikować kilka ustawień:

    1. Na karcie Inne ustawienia :

      1. Wersja środowiska uruchomieniowego skryptów powinna być eksperymentalna (odpowiednik platformy.NET 4.6)

      2. Zaplecze skryptów powinno mieć wartość .NET

      3. Poziom zgodności interfejsu API powinien mieć wartość .NET 4.6

        zgodność interfejsu API

    2. W dalszej części panelu w obszarze Ustawienia XR (znaleziono poniżej ustawień publikowania), zaznacz pole Virtual Reality Supported (Obsługiwana rzeczywistość wirtualna), upewnij się, że dodano zestaw SDK Windows Mixed Reality

      aktualizowanie ustawień xr

    3. Na karcie Ustawienia publikowania w obszarze Możliwości sprawdź:

      • InternetClient

        Zrzut ekranu przedstawiający kartę Ustawienia publikowania z zaznaczoną pozycją InternetClient.

  8. Po powrocie do ustawień kompilacjiprojekty języka C# aparatu Unity nie są już wyszarzone: zaznacz pole wyboru obok tego.

  9. Po wykonaniu tych zmian zamknij okno Ustawienia kompilacji.

  10. Zapisz scenę i plik> projektuZapisz scenę / plik>Zapisz projekt.

    Ważne

    Jeśli chcesz pominąć składnik Unity Set up dla tego projektu (aplikacja rzeczywistości mieszanej) i kontynuować bezpośrednio w kodzie, możesz pobrać ten pakiet unitypackage, zaimportować go do projektu jako pakiet niestandardowy, a następnie kontynuować z rozdziału 14. Nadal trzeba będzie dodać składniki skryptu.

Rozdział 13 — Importowanie bibliotek DLL w projekcie Mixed Reality Unity

Będziesz używać biblioteki usługi Azure Storage dla aparatu Unity (która korzysta z zestawu SDK platformy .Net dla platformy Azure). Skorzystaj z tego linku, aby dowiedzieć się, jak używać usługi Azure Storage z aparatem Unity. Obecnie istnieje znany problem w środowisku Unity, który wymaga ponownego skonfigurowania wtyczek po zaimportowaniu. Te kroki (4–7 w tej sekcji) nie będą już wymagane po rozwiązaniu usterki.

Aby zaimportować zestaw SDK do własnego projektu, upewnij się, że pobrano najnowszy pakiet unitypackage. Następnie wykonaj następujące czynności:

  1. Dodaj pakiet unitypackage pobrany z powyższej strony do aparatu Unity przy użyciu opcji menu Importujpakiet>niestandardowypakietu zasobów>.

  2. W wyświetlonym oknie Importuj pakiet aparatu Unity możesz wybrać wszystko w obszarze Wtyczka>Storage.

    importowanie pakietu

  3. Kliknij przycisk Importuj , aby dodać elementy do projektu.

  4. Przejdź do folderu Storage w obszarze Wtyczki w widoku Projektu i wybierz tylko następujące wtyczki:

    • Microsoft.Data.Edm
    • Microsoft.Data.OData
    • Microsoft.WindowsAzure.Storage
    • Newtonsoft.Json
    • System.Spatial

    wybieranie wtyczek

  5. Po wybraniu tych określonych wtyczekusuń zaznaczenie polaWyboru Dowolna platforma i usuń zaznaczeniepola wyboru WSAPlayer , a następnie kliknij przycisk Zastosuj.

    stosowanie zmian platformy

    Uwaga

    Oznaczasz te konkretne wtyczki, które mają być używane tylko w edytorze aparatu Unity. Dzieje się tak, ponieważ istnieją różne wersje tych samych wtyczek w folderze WSA, które będą używane po wyeksportowaniu projektu z aparatu Unity.

  6. W folderze Wtyczka magazynu wybierz tylko:

    • Microsoft.Data.Services.Client

      wybieranie klienta usług danych

  7. Zaznacz pole Nie przetwarzaj w obszarze Ustawienia platformy i kliknij przycisk Zastosuj.

    nie przetwarzaj

    Uwaga

    Oznaczasz tę wtyczkę "Nie przetwarzaj", ponieważ patcher zestawu aparatu Unity ma trudności z przetwarzaniem tej wtyczki. Wtyczka nadal będzie działać, mimo że nie jest przetworzona.

Rozdział 14 — Tworzenie klasy TableToScene w projekcie aparatu Unity rzeczywistości mieszanej

Klasa TableToScene jest identyczna z klasą objaśnianą w rozdziale 9. Utwórz tę samą klasę w projekcie unity rzeczywistości mieszanej zgodnie z tą samą procedurą opisaną w rozdziale 9.

Po zakończeniu tego rozdziału oba projekty aparatu Unity będą miały tę klasę skonfigurowaną na głównym aparacie.

Rozdział 15 — Tworzenie klasy NotificationReceiver w projekcie aparatu Unity Mixed Reality

Drugi skrypt, który należy utworzyć, to NotificationReceiver, który jest odpowiedzialny za:

  • Zarejestrowanie aplikacji przy użyciu centrum powiadomień podczas inicjowania.
  • Nasłuchiwanie powiadomień pochodzących z centrum powiadomień.
  • Deserializowanie danych obiektu z odebranych powiadomień.
  • Przenieś obiekty GameObjects w scenie na podstawie deserializacji danych.

Aby utworzyć skrypt NotificationReceiver :

  1. Kliknij prawym przyciskiem myszy wewnątrz folderu Scripts (Skrypty ), kliknij pozycję Create (Utwórz), C# Script (Skrypt języka C#). Nadaj skryptowi nazwę NotificationReceiver.

    utwórz nową nazwę skryptu w języku c#NotificationReceiver

  2. Kliknij dwukrotnie skrypt, aby go otworzyć.

  3. Dodaj następujące przestrzenie nazw:

    //using Microsoft.WindowsAzure.Messaging;
    using Newtonsoft.Json;
    using System;
    using System.Collections;
    using UnityEngine;
    
    #if UNITY_WSA_10_0 && !UNITY_EDITOR
    using Windows.Networking.PushNotifications;
    #endif
    
  4. Wstaw następujące zmienne:

        /// <summary>
        /// allows this class to behave like a singleton
        /// </summary>
        public static NotificationReceiver instance;
    
        /// <summary>
        /// Value set by the notification, new object position
        /// </summary>
        Vector3 newObjPosition;
    
        /// <summary>
        /// Value set by the notification, object name
        /// </summary>
        string gameObjectName;
    
        /// <summary>
        /// Value set by the notification, new object position
        /// </summary>
        bool notifReceived;
    
        /// <summary>
        /// Insert here your Notification Hub Service name 
        /// </summary>
        private string hubName = " -- Insert the name of your service -- ";
    
        /// <summary>
        /// Insert here your Notification Hub Service "Listen endpoint"
        /// </summary>
        private string hubListenEndpoint = "-Insert your Notification Hub Service Listen endpoint-";
    
  5. Zastąp wartość hubName nazwą usługi Notification Hub i wartością hubListenEndpoint wartością punktu końcowego znajdującą się na karcie Zasady dostępu, Usługą Azure Notification Hub w witrynie Azure Portal (zobacz obraz poniżej).

    Wstawianie punktu końcowego zasad usługi Notification Hubs

  6. Teraz dodaj metody Start() i Awake(), aby zainicjować klasę.

        /// <summary>
        /// Triggers before initialization
        /// </summary>
        void Awake()
        {
            // static instance of this class
            instance = this;
        }
    
        /// <summary>
        /// Use this for initialization
        /// </summary>
        void Start()
        {
            // Register the App at launch
            InitNotificationsAsync();
    
            // Begin listening for notifications
            StartCoroutine(WaitForNotification());
        }
    
  7. Dodaj metodę WaitForNotification , aby umożliwić aplikacji odbieranie powiadomień z biblioteki centrum powiadomień bez starcia z wątkiem głównym:

        /// <summary>
        /// This notification listener is necessary to avoid clashes 
        /// between the notification hub and the main thread   
        /// </summary>
        private IEnumerator WaitForNotification()
        {
            while (true)
            {
                // Checks for notifications each second
                yield return new WaitForSeconds(1f);
    
                if (notifReceived)
                {
                    // If a notification is arrived, moved the appropriate object to the new position
                    GameObject.Find(gameObjectName).transform.position = newObjPosition;
    
                    // Reset the flag
                    notifReceived = false;
                }
            }
        }
    
  8. Następująca metoda , InitNotificationAsync(), zarejestruje aplikację w usłudze notification Hub podczas inicjowania. Kod jest komentowany, ponieważ aparat Unity nie będzie mógł skompilować projektu. Komentarze zostaną usunięte podczas importowania pakietu NuGet usługi Azure Messaging w programie Visual Studio.

        /// <summary>
        /// Register this application to the Notification Hub Service
        /// </summary>
        private async void InitNotificationsAsync()
        {
            // PushNotificationChannel channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
    
            // NotificationHub hub = new NotificationHub(hubName, hubListenEndpoint);
    
            // Registration result = await hub.RegisterNativeAsync(channel.Uri);
    
            // If registration was successful, subscribe to Push Notifications
            // if (result.RegistrationId != null)
            // {
            //     Debug.Log($"Registration Successful: {result.RegistrationId}");
            //     channel.PushNotificationReceived += Channel_PushNotificationReceived;
            // }
        }
    
  9. Poniższa procedura obsługi , Channel_PushNotificationReceived(), zostanie wyzwolona za każdym razem, gdy zostanie odebrane powiadomienie. Spowoduje to deserializacji powiadomienia, które będzie jednostką tabeli platformy Azure przeniesioną w aplikacji klasycznej, a następnie przenieś odpowiedni obiekt GameObject w scenie MR na tę samą pozycję.

    Ważne

    Kod jest komentowany, ponieważ kod odwołuje się do biblioteki Azure Messaging, którą dodasz po utworzeniu projektu aparatu Unity przy użyciu Menedżera pakietów Nuget w programie Visual Studio. W związku z tym projekt aparatu Unity nie będzie mógł skompilować, chyba że zostanie on skomentowany. Pamiętaj, że jeśli skompilujesz projekt, a następnie chcesz powrócić do aparatu Unity, musisz ponownie oznaczyć ten kod jako komentarz.

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

  11. Kliknij kamerę główną z panelu Hierarchia , aby jego właściwości pojawiały się w inspektorze.

  12. Po otwarciu folderu Scripts wybierz skrypt NotificationReceiver i przeciągnij go do aparatu głównego. Wynik powinien być następujący:

    przeciąganie skryptu odbiornika powiadomień do aparatu

    Uwaga

    Jeśli opracowujesz tę aplikację dla Microsoft HoloLens, musisz zaktualizować składnik Kamery głównej, tak aby:

    • Wyczyść flagi: kolor jednolity
    • Tło: czarny

Rozdział 16 — Tworzenie projektu Mixed Reality do platformy UWP

Ten rozdział jest identyczny z procesem kompilacji dla poprzedniego projektu. Wszystko, co jest potrzebne w sekcji aparatu Unity tego projektu, zostało ukończone, więc nadszedł czas, aby utworzyć go z poziomu aparatu Unity.

  1. Przejdź do obszaru Ustawienia kompilacji (Ustawienia kompilacjipliku> ).

  2. W menu Ustawienia kompilacji upewnij się, że pozycja Projekty C# aparatu Unity* jest zaznaczona (co umożliwi edytowanie skryptów w tym projekcie po kompilacji).

  3. Po zakończeniu kliknij pozycję Kompiluj.

    Zrzut ekranu przedstawiający okno Ustawienia kompilacji z przyciskiem

  4. Zostanie wyświetlone okno Eksplorator plików z monitem o lokalizację kompilacji. Utwórz nowy folder (klikając pozycję Nowy folder w lewym górnym rogu) i nadaj mu nazwę BUILDS.

    tworzenie folderu builds

    1. Otwórz nowy folder BUILDS i ponownie utwórz inny folder (przy użyciu nowego folderu ) i nadaj mu nazwę NH_MR_App.

      tworzenie folderu NH_MR_Apps

    2. Po wybraniu NH_MR_App . kliknij pozycję Wybierz folder. Kompilacja projektu może potrwać kilka minut.

  5. Po kompilacji zostanie otwarte okno Eksplorator plików w lokalizacji nowego projektu.

Rozdział 17 — Dodawanie pakietów NuGet do rozwiązania UnityMRNotifHub

Ostrzeżenie

Pamiętaj, że po dodaniu następujących pakietów NuGet (i usunięciu komentarza z kodu w następnym rozdziale) kod, po ponownym otwarciu w projekcie aparatu Unity, będą przedstawiać błędy. Jeśli chcesz wrócić i kontynuować edycję w edytorze aparatu Unity, musisz dodać komentarz do błędnego kodu, a następnie ponownie usunąć komentarz później, po powrocie do programu Visual Studio.

Po zakończeniu kompilacji rzeczywistości mieszanej przejdź do utworzonego projektu rzeczywistości mieszanej, a następnie kliknij dwukrotnie plik rozwiązania (sln) w tym folderze, aby otworzyć rozwiązanie za pomocą programu Visual Studio 2017. Teraz musisz dodać pakiet NuGet WindowsAzure.Messaging.managed ; jest to biblioteka używana do odbierania powiadomień z centrum powiadomień.

Aby zaimportować pakiet NuGet:

  1. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy rozwiązanie

  2. Kliknij pozycję Zarządzaj pakietami NuGet.

    otwórz menedżera nuget

  3. Wybierz kartę Przeglądaj i wyszukaj ciąg WindowsAzure.Messaging.managed.

    znajdowanie pakietu obsługi komunikatów platformy Azure w systemie Windows

  4. Wybierz wynik (jak pokazano poniżej), a następnie w oknie po prawej stronie zaznacz pole wyboru obok pozycji Projekt. Spowoduje to umieszczenie znacznika w polu wyboru obok pozycji Project (Projekt) wraz z polem wyboru obok projektu Assembly-CSharp i UnityMRNotifHub .

    zaznacz wszystkie projekty

  5. Początkowo podana wersja może nie być zgodna z tym projektem. W związku z tym kliknij menu rozwijane obok pozycji Wersja, a następnie kliknij pozycję Wersja 0.1.7.9, a następnie kliknij przycisk Zainstaluj.

  6. Zakończono instalowanie pakietu NuGet. Znajdź kod komentarza wprowadzony w klasie NotificationReceiver i usuń komentarze.

Rozdział 18 — Edytowanie aplikacji UnityMRNotifHub, klasy NotificationReceiver

Po dodaniu pakietów NuGet należy usunąć komentarz z kodu w klasie NotificationReceiver .

Obejmuje on:

  1. Przestrzeń nazw u góry:

    using Microsoft.WindowsAzure.Messaging;
    
  2. Cały kod w metodzie InitNotificationsAsync():

        /// <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;
            }
        }
    

Ostrzeżenie

Powyższy kod zawiera komentarz: upewnij się, że komentarz nie został przypadkowo usunięty z komentarza (ponieważ kod nie zostanie skompilowany, jeśli masz!).

  1. I wreszcie zdarzenie Channel_PushNotificationReceived :

        /// <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;
            }
        }
    

Po wybraniu tych komentarzów upewnij się, że zapiszesz, a następnie przejdź do następnego rozdziału.

Rozdział 19 — Kojarzenie projektu rzeczywistości mieszanej z aplikacją ze Sklepu

Teraz musisz skojarzyć projekt rzeczywistości mieszanej z aplikacją ze sklepu utworzoną na początku laboratorium.

  1. Otwórz rozwiązanie.

  2. Kliknij prawym przyciskiem myszy projekt aplikacji platformy uniwersalnej systemu Windows w panelu Eksplorator rozwiązań, przejdź do sklepu i skojarz aplikację ze sklepem....

    skojarzenie sklepu open store

  3. Zostanie wyświetlone nowe okno o nazwie Kojarzenie aplikacji ze Sklepem Windows. Kliknij przycisk Dalej.

    przejdź do następnego ekranu

  4. Spowoduje to załadowanie wszystkich aplikacji skojarzonych z kontem, które zostało zalogowane. Jeśli nie zalogowano się na koncie, możesz zalogować się na tej stronie.

  5. Znajdź nazwę aplikacji ze sklepu utworzoną na początku tego samouczka i wybierz ją. Następnie kliknij przycisk Dalej.

    znajdź i wybierz nazwę sklepu

  6. Kliknij pozycję Skojarz.

    kojarzenie aplikacji

  7. Twoja aplikacja jest teraz skojarzona z aplikacją ze sklepu. Jest to niezbędne do włączenia powiadomień.

Rozdział 20 — Wdrażanie aplikacji UnityMRNotifHub i UnityDesktopNotifHub

Ten rozdział może być łatwiejszy w przypadku dwóch osób, ponieważ w rezultacie zostaną uruchomione obie aplikacje, jedna uruchomiona na komputerze, a druga w immersywnym zestawie słuchawkowym.

Aplikacja immersywnego zestawu nagłownego oczekuje na odebranie zmian w scenie (zmiany położenia lokalnych obiektów GameObject), a aplikacja klasyczna będzie wprowadzać zmiany w ich lokalnej scenie (zmiany położenia), które zostaną udostępnione aplikacji MR. Najpierw należy wdrożyć aplikację MR, a następnie aplikację klasyczną, aby odbiornik mógł rozpocząć nasłuchiwanie.

Aby wdrożyć aplikację UnityMRNotifHub na komputerze lokalnym:

  1. Otwórz plik rozwiązania aplikacji UnityMRNotifHub w programie Visual Studio 2017.

  2. W polu Platforma rozwiązania wybierz pozycję x86, Komputer lokalny.

  3. W obszarze Konfiguracja rozwiązania wybierz pozycję Debuguj.

    Zrzut ekranu przedstawiający ustawienie Konfiguracja rozwiązania na wartość

  4. Przejdź do menu Kompilacja i kliknij pozycję Wdróż rozwiązanie , aby załadować aplikację bezpośrednio na maszynę.

  5. Aplikacja powinna być teraz wyświetlana na liście zainstalowanych aplikacji gotowych do uruchomienia.

Aby wdrożyć aplikację UnityDesktopNotifHub na komputerze lokalnym:

  1. Otwórz plik rozwiązania aplikacji UnityDesktopNotifHub w programie Visual Studio 2017.

  2. W polu Platforma rozwiązania wybierz pozycję x86, Komputer lokalny.

  3. W obszarze Konfiguracja rozwiązania wybierz pozycję Debuguj.

    Zrzut ekranu przedstawiający ustawienie Konfiguracja rozwiązania na wartość

  4. Przejdź do menu Kompilacja i kliknij pozycję Wdróż rozwiązanie , aby załadować aplikację bezpośrednio na maszynę.

  5. Aplikacja powinna być teraz wyświetlana na liście zainstalowanych aplikacji gotowych do uruchomienia.

  6. Uruchom aplikację rzeczywistości mieszanej, a następnie aplikację klasyczną.

Po uruchomieniu obu aplikacji przenieś obiekt w scenie pulpitu (przy użyciu przycisku myszy po lewej stronie). Te zmiany pozycyjne zostaną wprowadzone lokalnie, serializowane i wysyłane do usługi aplikacji funkcji. Następnie usługa Aplikacji funkcji zaktualizuje tabelę wraz z centrum powiadomień. Po otrzymaniu aktualizacji centrum powiadomień wyśle zaktualizowane dane bezpośrednio do wszystkich zarejestrowanych aplikacji (w tym przypadku aplikacji immersyjnego zestawu nagłownego), która następnie zdeserializuje dane przychodzące i zastosuje nowe dane pozycyjne do obiektów lokalnych, przenosząc je w scenie.

Ukończono aplikację usługi Azure Notification Hubs

Gratulacje, utworzono aplikację rzeczywistości mieszanej, która korzysta z usługi Azure Notification Hubs i zezwala na komunikację między aplikacjami.

końcowy produkt — koniec

Ćwiczenia dodatkowe

Ćwiczenie 1

Czy możesz wypracować, jak zmienić kolor obiektów GameObjects i wysłać to powiadomienie do innych aplikacji wyświetlających scenę?

Ćwiczenie 2

Czy możesz dodać ruch obiektów GameObjects do aplikacji MR i zobaczyć zaktualizowaną scenę w aplikacji klasycznej?