Udostępnij za pośrednictwem


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


Uwaga

Samouczki akademii rzeczywistości mieszanej zostały zaprojektowane z myślą o urządzeniach HoloLens (1. generacji) i zestawach słuchawkowych immersyjnych rzeczywistości mieszanej. W związku z tym uważamy, że ważne jest pozostawienie tych samouczków na 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 dla urządzenia 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ć urządzenia 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ług Azure Notification Hubs, Azure Tables 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, które są 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. Dzięki temu można delegować pracę do chmury, a nie lokalną aplikację, co może mieć wiele korzyści. Usługa Azure Functions obsługuje kilka języków programowania, w tym C#, F#, Node.js, Java i PHP. Aby uzyskać więcej informacji, odwiedź stronę usługi 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 są łatwo dostępne w dowolnym miejscu. Usługa oferuje bez schematu projekt, umożliwiając 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ą rzeczywistości mieszanej oraz aplikację dla komputerów stacjonarnych, która będzie mogła wykonać następujące czynności:

  1. Aplikacja komputerów stacjonarnych umożliwia użytkownikowi przenoszenie obiektu w obszarze 2D (X i Y) przy użyciu myszy.

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

  3. Aplikacja rzeczywistości mieszanej, która ma identyczną scenę dla aplikacji klasycznej, będzie otrzymywać powiadomienia dotyczące przenoszenia obiektów z usługi Notification Hubs (która właśnie została zaktualizowana przez aplikację komputerową).

  4. Po otrzymaniu powiadomienia, które będzie zawierać identyfikator obiektu, typ i informacje dotyczące przekształcania, 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 laboratoriów rzeczywistości mieszanej.

Obsługa urządzeń

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

Uwaga

Chociaż ten kurs koncentruje się głównie na zestawach nagłownych immersywnych windows Mixed Reality (VR), możesz również zastosować to, czego nauczysz się w tym kursie do urządzenia Microsoft HoloLens. Zgodnie z kursem zobaczysz notatki dotyczące wszelkich zmian, które mogą być konieczne do zastosowania w celu obsługi urządzenia 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 wymieniono w artykule dotyczącym instalacji narzędzi , choć nie należy zakładać, że informacje zawarte 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 podczas tworzenia 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 , należy 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 okno podręczne, w którym musisz zarezerwować nazwę nowej aplikacji. W polu tekstowym wstaw odpowiednią nazwę; Jeśli wybrana nazwa jest dostępna, po prawej stronie pola tekstowego pojawi się znacznik. Po wstawieniu dostępnej nazwy kliknij przycisk Rezerwuj nazwę produktu w lewym dolnym rogu okna podręcznego.

    odwracanie nazwy

  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

    Aby zalogować się, musisz użyć konta Microsoft.
    Musi to być konto Microsoft, które zostało użyte w poprzednim rozdziale z portalem deweloperów Sklepu Windows.

  2. Aplikację znajdziesz w sekcji Moje aplikacje . Po jego znalezieniu kliknij i nastąpi przekierowanie do nowej strony z nazwą aplikacji i rejestracją.

    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 je utworzyć. Jeśli obserwujesz ten samouczek w sytuacji w klasie lub laboratorium, poproś instruktora lub jednego z opiekunów o pomoc przy konfigurowaniu 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ę 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. Wybierz odpowiednią subskrypcję.

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

    7. Wybierz pozycję Utwórz.

      wypełnij szczegóły usługi

  5. Po kliknięciu pozycji Utwórz trzeba będzie poczekać na utworzenie usługi. 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 aplikacji skonfigurowanej wcześniej.

    nowo utworzona usługa koncentratorów

  9. Po skopiowaniu szczegółów do odpowiednich pól kliknij przycisk Zapisz i otrzymasz powiadomienie po 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 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ę 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.

    10. Pozostaw opcję Sieci wirtualne jako Wyłączone , jeśli jest to opcja.

    11. Kliknij pozycję Utwórz.

      wypełnianie szczegółów magazynu

  6. Po kliknięciu pozycji Utwórz trzeba będzie poczekać na utworzenie usługi. 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.

    powiadomienie o nowym 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ć tabele.

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

    otwieranie tabel

  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 pomocą programu Visual Studio.

  1. Otwórz program Visual Studio.

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

    otwieranie eksploratora chmury

  3. Eksplorator chmury zostanie otwarty 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ę na tym samym koncie co konto użyte w witrynie Azure Portal.

    • Wybierz subskrypcję na stronie 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ź pozycję 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ź pozycję 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 łącznie 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ść wartości 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. Zauważysz, że tabela zawiera 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ć inną jednostkę. Ustaw wartości dla tej jednostki na pokazane poniżej.

    dodaj cylindra

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

    tabela ukończona

  15. Ukończono ten rozdział. Pamiętaj, aby zapisać.

Rozdział 6 . Tworzenie aplikacji funkcji platformy Azure

Utwórz aplikację funkcji platformy Azure, która będzie wywoływana 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 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 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 Portalu Azure.

  4. Po zalogowaniu kliknij pozycję Nowy w lewym górnym rogu i wyszukaj pozycję Aplikacja funkcji, naciśnij 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 odpowiednią warstwę cenową , jeśli jest to pierwszy raz podczas tworzenia usługi 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, który został utworzony w poprzednim kroku)

    8. W sekcji Magazyn musisz 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ć purpurowe typy, a następnie kliknij element HTTP PUT .

    link 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 nastąpiły 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 wyświetlić obraz).

    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 należy 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.

    aktualizowanie 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. Po wykonaniu tej czynności 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łki < ) 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 i kliknij plik project.json utworzony wcześniej w Notatniku, 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 pojawi się on w panelu po prawej stronie. Kliknięcie go spowoduje otwarcie go w edytorze funkcji . Musi ona wyglądać dokładnie tak samo jak następnego obrazu (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).

    otwórz edytor zaawansowany

  25. Plik function.json zostanie otwarty w panelu środkowym, który musi zostać zastąpiony następującym fragmentem kodu. Definiuje ona 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 właśnie wstawione parametry wejściowe mogą nie być zgodne ze szczegółami tabeli i magazynu, dlatego należy zaktualizować informacje. Nie rób tego tutaj, ponieważ jest on omówiony dalej. 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 są zgodne z następującymi informacjami, ponieważ mogą się one różnić (poniżej przedstawiono 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 zostanie wyświetlony 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, aby hostować aplikacje 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 następujące informacje są dopasowane do Twoich informacji, 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 zostanie wyświetlony obok menu rozwijanego.

      sprawdzanie danych wyjściowych

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

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

    5. Ustaw menu rozwijane Zasady na DefaultFullSharedAccessSignature.

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

      aktualizacja danych wyjściowych

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

Ostrzeżenie

Nie edytuj bezpośrednio nazwy centrum powiadomień (wszystkie te czynności należy wykonać przy użyciu Edytor zaawansowany, pod warunkiem, że zostały wykonane poprzednie kroki poprawnie.

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. Czynność:

    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óżnioną wartością

    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ą tworzysz, nie będzie działać w Edytorze aparatu Unity. Należy go uruchomić poza edytorem, postępując zgodnie z kompilacją 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 obsługi konfigurowania immersyjnego zestawu słuchawkowego, skorzystaj z tego linku, aby dowiedzieć się, jak skonfigurować środowisko 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ć obiekt UnityDesktopNotifHub. Upewnij się, że typ projektu jest ustawiony na 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ć, 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.

    ustawianie zewnętrznych narzędzi programu VS

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

    przełączanie platform

  5. Nadal w obszarze Ustawienia kompilacji pliku>upewnij się, że:

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

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

    2. Typ kompilacji jest ustawiony na D3D

    3. Zestaw SDK jest ustawiony na najnowszą zainstalowaną

    4. Dla wersji programu Visual Studio jest ustawiona wartość Najnowsza zainstalowana

    5. Kompilowanie i uruchamianie jest ustawione na komputer lokalny

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

      1. W tym celu wybierz pozycję Dodaj otwarte sceny. Zostanie wyświetlone okno zapisywania.

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

      2. Utwórz nowy folder dla tego i dowolnej przyszłości 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.

        nowa 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 miejscu, w którym 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 sieci 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. Po powrocie do ustawień kompilacji Projekty języka C# środowiska Unity nie są już wyszarzone; zaznacz pole wyboru obok tego.

  9. Zamknij okno Build Settings (Ustawienia kompilacji).

  10. Zapisz scenę i plik projektu >Zapisz 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 a unity

Będziesz używać usługi Azure Storage dla aparatu Unity (która korzysta z zestawu .Net SDK dla platformy Azure). Aby uzyskać więcej informacji, użyj tego linku dotyczącego usługi Azure Storage dla aparatu Unity.

Obecnie w środowisku Unity występuje znany problem, 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 Project 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 wtyczek usuń zaznaczenie pola Wyboru Dowolna platforma i usuń zaznaczenie pola wyboru WSAPlayer, a następnie kliknij przycisk Zastosuj.

    stosowanie bibliotek dll platformy

    Uwaga

    Oznaczamy te konkretne wtyczki do użycia 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:

    • Microsoft.Data.Services.Client

      set don't process for dlls (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ż patcher zestawu aparatu Unity ma trudności z przetwarzaniem tej wtyczki. Wtyczka będzie nadal działać, mimo że nie jest przetworzona.

Rozdział 9 . Tworzenie klasy TableToScene w projekcie aparatu Unity pulpitu

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).

    tworzenie folderu skryptów

    tworzenie folderu skryptów 2

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

  3. Kliknij prawym przyciskiem myszy wewnątrz folderu Scripts (Skrypty), kliknij polecenie Create C# 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 kartę Main Camera (Aparat główny) z panelu Hierarchy (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 usłudze Azure Function App Service 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 myszy, co z kolei spowoduje przeniesienie obiektów GameObjects w scenie. Jeśli użytkownik przeciągnął i porzucił 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 kartę Main Camera (Aparat główny) z panelu Hierarchy (Hierarchia), aby jego właściwości pojawiały się w inspektorze.

    2. Po otwarciu folderu Scripts wybierz skrypt CloudScene i przeciągnij go na aparat główny. 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 obszaru Ustawienia kompilacji (ustawienia kompilacji pliku>).

  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 kompilacji

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

      nazwa folderu NH_Desktop_App

    2. Po wybraniu NH_Desktop_App . kliknij pozycję Wybierz folder. Skompilowanie projektu potrwa minutę.

  4. Po kompilacji zostanie wyświetlona Eksplorator plików z lokalizacją 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 aparatu Unity rzeczywistości mieszanej

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 Ciebie (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.

    ustawianie edytora zewnętrznego na program VS

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

    przełączanie platform do platformy UWP

  5. Przejdź do pozycji Ustawienia kompilacji pliku>i upewnij się, że:

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

      W przypadku urządzenia 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. Dla wersji programu Visual Studio jest ustawiona wartość Najnowsza zainstalowana

    5. Kompilowanie i uruchamianie jest ustawione na komputer lokalny

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

      1. W tym celu wybierz 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 dowolnej przyszłości sceny, a następnie wybierz przycisk Nowy folder , aby utworzyć nowy folder, nadaj mu nazwę Sceny.

        Zrzut ekranu przedstawiający

      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 miejscu, w którym 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ługiwane w rzeczywistości wirtualnej), upewnij się, że dodano zestaw WINDOWS Mixed Reality SDK

      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ń kompilacji projekty 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 projektu >Zapisz scenę / Plik>Zapisz projekt.

    Ważne

    Jeśli chcesz pominąć składnik Konfiguracji aparatu Unity 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 aparatu Unity rzeczywistości mieszanej

Będziesz używać biblioteki usługi Azure Storage dla aparatu Unity (która używa 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 w środowisku Unity występuje znany problem, 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ższych elementów 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.

    importowanie pakietu

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

  4. Przejdź do folderu Storage w obszarze Wtyczki w widoku Project 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 wtyczek usuń zaznaczenie pola Wyboru Dowolna platforma i usuń zaznaczenie pola 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. 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.

  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 będzie nadal działać, mimo że nie jest przetworzona.

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

Klasa TableToScene jest taka sama jak klasa wyjaśniona w rozdziale 9. Utwórz tę samą klasę w projekcie aparatu Unity rzeczywistości mieszanej, wykonując tę samą procedurę opisaną w rozdziale 9.

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

Rozdział 15 . Tworzenie klasy NotificationReceiver w projekcie aparatu Unity rzeczywistości mieszanej

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

  • Rejestrowanie aplikacji w 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 zdeserializowanych danych.

Aby utworzyć skrypt NotificationReceiver :

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

    tworzenie nowego skryptu c#nadaj jej nazwę 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. Poniższa 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. Następująca 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 do tej samej pozycji.

    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żer 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. Należy pamiętać, że jeśli utworzysz projekt, a następnie chcesz powrócić do środowiska 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 kartę Main Camera (Aparat główny) z panelu Hierarchy (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 urządzenia Microsoft HoloLens, musisz zaktualizować składnik Aparat główny aparatu fotograficznego, aby:

    • Wyczyść flagi: kolor stały
    • Tło:

Rozdział 16 . Tworzenie projektu rzeczywistości mieszanej na platformie 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 skompilować go z poziomu aparatu Unity.

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

  2. W menu Ustawienia kompilacji upewnij się, że zaznaczono znacznik Projekty języka C# aparatu Unity * (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 kompilacji

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

      tworzenie folderu NH_MR_Apps

    2. Po wybraniu NH_MR_App . kliknij pozycję Wybierz folder. Skompilowanie projektu potrwa 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, gdy wrócisz 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 należy 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 w oknie po prawej stronie zaznacz pole wyboru obok pozycji Project. Spowoduje to umieszczenie znacznika w polu wyboru obok pozycji Project 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ź skomentowany kod 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 to:

  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 UWP 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, w którym się zalogowano. 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. Aplikacja jest teraz skojarzona z aplikacją ze sklepu. Jest to konieczne w przypadku włączania 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 zestawie słuchawkowym immersywnym.

Immersywna aplikacja zestawu słuchawkowego oczekuje na odebranie zmian w scenie (zmiany pozycji lokalnych obiektów GameObjects), a aplikacja klasyczna wprowadza zmiany w ich lokalnej scenie (zmiany pozycji), 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 na scenie pulpitu (przy użyciu przycisku Lewa mysz). Te zmiany pozycyjne zostaną wprowadzone lokalnie, serializowane i wysyłane do usługi App Service funkcji. Następnie usługa App Service 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 słuchawkowego), która następnie zdeserializuje dane przychodzące i zastosuje nowe dane pozycyjne do obiektów lokalnych, przenosząc je w scenę.

Ukończono aplikację usługi Azure Notification Hubs

Gratulacje, utworzono aplikację rzeczywistości mieszanej, która korzysta z usługi Azure Notification Hubs i umożliwia 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?