Sdílet prostřednictvím


HoloLens (1. generace) a Azure 308: Oznámení mezi zařízeními


Poznámka:

Kurzy Mixed Reality Academy byly navrženy s HoloLensem (1. generace) a imerzivními náhlavními soupravami hybridní reality. Proto máme pocit, že je důležité nechat tyto kurzy zavedené pro vývojáře, kteří stále hledají pokyny při vývoji těchto zařízení. Tyto kurzy nebudou aktualizovány nejnovějšími sadami nástrojů ani interakcemi používanými pro HoloLens 2. Budou zachovány, aby pokračovaly v práci na podporovaných zařízeních. Bude k dispozici nová série kurzů, které budou publikovány v budoucnu, které předvádějí, jak vyvíjet pro HoloLens 2. Toto oznámení se při publikování aktualizuje odkazem na tyto kurzy.


konečný produkt -start

V tomto kurzu se dozvíte, jak přidat funkce Notification Hubs do aplikace hybridní reality pomocí Azure Notification Hubs, tabulek Azure a Azure Functions.

Azure Notification Hubs je služba Microsoftu, která vývojářům umožňuje odesílat cílená a přizpůsobená nabízená oznámení na libovolnou platformu, která je všechna založená na cloudu. Díky tomu můžou vývojáři komunikovat s koncovými uživateli nebo dokonce komunikovat mezi různými aplikacemi v závislosti na scénáři. Další informace najdete na stránce Azure Notification Hubs.

Azure Functions je služba Microsoftu, která vývojářům umožňuje spouštět v Azure malé části kódu "functions". To poskytuje způsob, jak delegovat práci do cloudu místo místní aplikace, což může mít mnoho výhod. Azure Functions podporuje několik vývojových jazyků, včetně jazyků C#, F#, Node.js, Java a PHP. Další informace najdete na stránce Azure Functions.

Azure Tables je cloudová služba Microsoftu, která vývojářům umožňuje ukládat strukturovaná data mimo SQL do cloudu, takže jsou snadno přístupná kdekoli. Služba se může pochlubit návrhem bez schématu, který umožňuje vývoj tabulek podle potřeby, a proto je velmi flexibilní. Další informace najdete na stránce Tabulky Azure.

Po dokončení tohoto kurzu budete mít imerzivní aplikaci pro imerzivní náhlavní soupravu hybridní reality a desktopovou pc aplikaci, která bude moct provést následující akce:

  1. Aplikace Desktop PC umožní uživateli přesunout objekt ve 2D prostoru (X a Y) pomocí myši.

  2. Přesun objektů v rámci počítačové aplikace se odešle do cloudu pomocí formátu JSON, který bude ve formě řetězce, který bude obsahovat ID objektu, typ a transformovat informace (souřadnice X a Y).

  3. Aplikace hybridní reality, která má stejnou scénu jako desktopová aplikace, obdrží oznámení týkající se pohybu objektů ze služby Notification Hubs (která byla právě aktualizována aplikací Desktop PC).

  4. Po přijetí oznámení, které bude obsahovat ID objektu, typ a transformovat informace, aplikace hybridní reality použije přijaté informace na vlastní scénu.

V aplikaci je na vás, jak integrovat výsledky s návrhem. Tento kurz je navržený tak, aby vás naučil, jak integrovat službu Azure s projektem Unity. Vaším úkolem je využít znalosti získané z tohoto kurzu k vylepšení aplikace hybridní reality. Tento kurz je samostatný kurz, který přímo nezahrnuje žádná další cvičení hybridní reality.

Podpora zařízení

Kurz HoloLens Imerzivní náhlavní soupravy
MR a Azure 308: Oznámení mezi zařízeními ✔️ ✔️

Poznámka:

I když se tento kurz primárně zaměřuje na imerzivní náhlavní soupravy Windows Mixed Reality (VR), můžete také použít to, co se v tomto kurzu naučíte, na Microsoft HoloLens. Při sledování kurzu uvidíte poznámky o všech změnách, které možná budete potřebovat k podpoře HoloLensu. Při použití HoloLensu si můžete během hlasového zachycení všimnout určité ozvěny.

Požadavky

Poznámka:

Tento kurz je určený pro vývojáře, kteří mají základní zkušenosti s Unity a C#. Mějte také na paměti, že požadavky a písemné pokyny v tomto dokumentu představují to, co bylo otestováno a ověřeno v době psaní (květen 2018). Můžete používat nejnovější software, jak je uvedeno v článku o instalaci nástrojů , i když by se nemělo předpokládat, že informace v tomto kurzu budou dokonale odpovídat tomu, co najdete v novějším softwaru, než je uvedeno níže.

Pro tento kurz doporučujeme následující hardware a software:

Než začnete

  • Abyste se vyhnuli problémům při sestavování tohoto projektu, důrazně doporučujeme vytvořit projekt uvedený v tomto kurzu v kořenové nebo téměř kořenové složce (dlouhé cesty ke složkám můžou způsobovat problémy v době sestavení).
  • Musíte být vlastníkem portálu Microsoft Developer Portal a portálu pro registraci aplikací, jinak nebudete mít oprávnění k přístupu k aplikaci v kapitole 2.

Kapitola 1 – Vytvoření aplikace na portálu Microsoft Developer Portal

Pokud chcete používat službu Azure Notification Hubs , budete muset vytvořit aplikaci na portálu Microsoft Developer Portal, protože vaše aplikace bude potřeba zaregistrovat, aby bylo možné odesílat a přijímat oznámení.

  1. Přihlaste se k portálu Microsoft Developer Portal.

    Budete se muset přihlásit ke svému účtu Microsoft.

  2. Na řídicím panelu klikněte na Vytvořit novou aplikaci.

    vytvoření aplikace

  3. Zobrazí se automaticky otevírané okno, kde si musíte rezervovat název nové aplikace. Do textového pole vložte odpovídající název; pokud je vybraný název dostupný, vpravo od textového pole se zobrazí zaškrtnutí. Po vložení dostupného názvu klikněte na tlačítko Rezervovat název produktu v levém dolním rohu místní nabídky.

    obrácení názvu

  4. Když jste teď aplikaci vytvořili, jste připraveni přejít na další kapitolu.

Kapitola 2 – Načtení přihlašovacích údajů pro nové aplikace

Přihlaste se k portálu pro registraci aplikací, kde bude uvedená nová aplikace, a načtěte přihlašovací údaje, které se použijí k nastavení služby Notification Hubs na webu Azure Portal.

  1. Přejděte na portál pro registraci aplikací.

    portál pro registraci aplikací

    Upozorňující

    K přihlášení budete muset použít svůj účet Microsoft.
    Musí se jednat o účet Microsoft, který jste použili v předchozí kapitole, s portálem pro vývojáře pro Windows Store.

  2. Aplikaci najdete v části Moje aplikace . Jakmile ho najdete, klikněte na něj a přejdete na novou stránku s názvem aplikace a registrací.

    vaše nově registrovaná aplikace

  3. Posuňte se dolů na registrační stránku a vyhledejte oddíl Tajné kódy aplikace a IDENTIFIKÁTOR SID balíčku pro vaši aplikaci. Zkopírujte obojí pro použití s nastavením služby Azure Notification Hubs v další kapitole.

    tajné kódy aplikací

Kapitola 3 – Nastavení webu Azure Portal: vytvoření služby Notification Hubs

Po načtení přihlašovacích údajů aplikací budete muset přejít na web Azure Portal, kde vytvoříte službu Azure Notification Hubs.

  1. Přihlaste se k webu Azure Portal.

    Poznámka:

    Pokud ještě nemáte účet Azure, budete ho muset vytvořit. Pokud tento kurz sledujete v situaci v učebně nebo testovacím prostředí, požádejte svého instruktora nebo některého z proktorů, aby vám pomohli nastavit nový účet.

  2. Po přihlášení klikněte v levém horním rohu na Nový a vyhledejte Centrum oznámení a klikněte na Enter.

    vyhledání centra oznámení

    Poznámka:

    Slovo Nový mohlo být nahrazeno vytvořením prostředku na novějších portálech.

  3. Nová stránka bude poskytovat popis služby Notification Hubs . V levém dolním rohu této výzvy vyberte tlačítko Vytvořit a vytvořte přidružení k této službě.

    vytvoření instance centra oznámení

  4. Po kliknutí na Vytvořit:

    1. Vložte požadovaný název pro tuto instanci služby.

    2. Zadejte obor názvů, který budete moct přidružit k této aplikaci.

    3. Vyberte Umístění.

    4. Zvolte skupinu prostředků nebo vytvořte novou. Skupina prostředků poskytuje způsob, jak monitorovat, řídit přístup, zřizovat a spravovat fakturaci pro kolekci prostředků Azure. Doporučujeme zachovat všechny služby Azure přidružené k jednomu projektu (například k těmto testovacím prostředím) v rámci společné skupiny prostředků).

      Pokud si chcete přečíst další informace o skupinách prostředků Azure, postupujte podle tohoto odkazu, jak spravovat skupinu prostředků.

    5. Vyberte příslušné předplatné.

    6. Budete také muset potvrdit, že jste porozuměli podmínkám a ujednáním použitým pro tuto službu.

    7. Vyberte Vytvořit.

      vyplňte podrobnosti o službě.

  5. Jakmile kliknete na Vytvořit, budete muset počkat, až se služba vytvoří, může to chvíli trvat.

  6. Po vytvoření instance služby se na portálu zobrazí oznámení.

    oznámení

  7. Kliknutím na tlačítko Přejít k prostředku v oznámení můžete prozkoumat novou instanci služby. Budete přesměrováni do nové instance služby Notification Hub .

    Snímek obrazovky znázorňující tlačítko Přejít k prostředku zvýrazněné v okně oznámení

  8. Na stránce přehledu v polovině stránky klikněte na Windows (WNS). Panel vpravo se změní tak, aby zobrazoval dvě textová pole, která vyžadují identifikátor SID balíčku a klíč zabezpečení z aplikace, kterou jste nastavili dříve.

    nově vytvořená služba hubs

  9. Po zkopírování podrobností do správných polí klikněte na Uložit a po úspěšné aktualizaci centra oznámení se zobrazí oznámení.

    kopírování podrobností o zabezpečení

Kapitola 4 – Nastavení webu Azure Portal: vytvoření služby Table Service

Po vytvoření instance služby Notification Hubs přejděte zpět na web Azure Portal, kde vytvoříte službu Azure Tables Service vytvořením prostředku úložiště.

  1. Pokud ještě nejste přihlášení, přihlaste se k webu Azure Portal.

  2. Po přihlášení klikněte v levém horním rohu na Nový a vyhledejte účet úložiště a klikněte na Enter.

    Poznámka:

    Slovo Nový mohlo být nahrazeno vytvořením prostředku na novějších portálech.

  3. Ze seznamu vyberte Účet úložiště – objekt blob, soubor, tabulka, fronta .

    vyhledejte účet úložiště.

  4. Na nové stránce se zobrazí popis služby účtu úložiště. V levém dolním rohu této výzvy vyberte tlačítko Vytvořit a vytvořte instanci této služby.

    vytvoření instance úložiště

  5. Po kliknutí na Vytvořit se zobrazí panel:

    1. Vložte požadovaný název pro tuto instanci služby (musí to být všechna malá písmena).

    2. V případě modelu nasazení klikněte na Resource Manager.

    3. V případě typu Účet v rozevírací nabídce vyberte Úložiště (obecné účely v1).

    4. Vyberte příslušné umístění.

    5. V rozevírací nabídce Replikace vyberte geograficky redundantní úložiště jen pro čtení (RA-GRS).

    6. V případě výkonu klepněte na tlačítko Standard.

    7. V části Vyžaduje se zabezpečený přenos vyberte Zakázáno.

    8. V rozevírací nabídce Předplatné vyberte příslušné předplatné.

    9. Zvolte skupinu prostředků nebo vytvořte novou. Skupina prostředků poskytuje způsob, jak monitorovat, řídit přístup, zřizovat a spravovat fakturaci pro kolekci prostředků Azure. Doporučujeme zachovat všechny služby Azure přidružené k jednomu projektu (například k těmto testovacím prostředím) v rámci společné skupiny prostředků).

      Pokud si chcete přečíst další informace o skupinách prostředků Azure, postupujte podle tohoto odkazu, jak spravovat skupinu prostředků.

    10. Pokud se jedná o možnost pro vás, ponechte virtuální sítě jako zakázané .

    11. Klikněte na Vytvořit.

      vyplňte podrobnosti o úložišti.

  6. Jakmile kliknete na Vytvořit, budete muset počkat, až se služba vytvoří, může to chvíli trvat.

  7. Po vytvoření instance služby se na portálu zobrazí oznámení. Kliknutím na oznámení můžete prozkoumat novou instanci služby.

    nové oznámení o úložišti

  8. Kliknutím na tlačítko Přejít k prostředku v oznámení můžete prozkoumat novou instanci služby. Přejdete na novou stránku s přehledem instance služby Storage.

    Snímek obrazovky znázorňující tlačítko Přejít k prostředku zvýrazněné v okně Nasazení bylo úspěšné

  9. Na stránce přehledu klikněte na pravé straně na Tabulky.

    Snímek obrazovky, který ukazuje, kde vybrat tabulky

  10. Panel vpravo se změní tak, aby zobrazoval informace o službě Table Service , kde je potřeba přidat novou tabulku. Uděláte to tak, že kliknete na + tlačítko Tabulka do levého horního rohu.

    otevření tabulek

  11. Zobrazí se nová stránka, kde je třeba zadat název tabulky. Toto je název, který použijete k odkazování na data v aplikaci v pozdějších kapitolách. Vložte odpovídající název a klikněte na tlačítko OK.

    vytvoření nové tabulky

  12. Po vytvoření nové tabulky ji uvidíte na stránce služby Table Service (dole).

    Vytvořená nová tabulka

Kapitola 5 – Dokončení tabulky Azure v sadě Visual Studio

Teď, když je váš účet úložiště služby Table Service nastaven, je čas do něj přidat data, která se použijí k ukládání a načítání informací. Úpravy tabulek můžete provádět prostřednictvím sady Visual Studio.

  1. Otevřete Visual Studio.

  2. V nabídce klikněte na Zobrazit>Průzkumníka cloudu.

    otevření Průzkumníka cloudu

  3. Průzkumník cloudu se otevře jako ukotvená položka (buďte trpěliví, protože načítání může nějakou dobu trvat).

    Poznámka:

    Pokud předplatné, které jste použili k vytvoření účtů úložiště, není viditelné, ujistěte se, že máte:

    • Přihlásili jste se ke stejnému účtu jako účet, který jste použili pro Azure Portal.

    • Na stránce pro správu účtů jste vybrali své předplatné (možná budete muset použít filtr z nastavení účtu):

      najít předplatné

  4. Zobrazí se vaše cloudové služby Azure. Vyhledejte účty úložiště a kliknutím na šipku vlevo od této možnosti rozbalte své účty.

    otevření účtů úložiště

  5. Po rozbalení by měl být nově vytvořený účet úložiště dostupný. Klikněte na šipku vlevo od úložiště a potom po rozbalení vyhledejte tabulky a klikněte na šipku vedle této tabulky, aby se zobrazila tabulka , kterou jste vytvořili v poslední kapitole. Poklikejte na tabulku.

    open scene objects table

  6. Tabulka se otevře uprostřed okna sady Visual Studio. Klikněte na ikonu tabulky s + (plus) na ní.

    přidání nové tabulky

  7. Zobrazí se okno s výzvou k přidání entity. V součtu vytvoříte tři entity s několika vlastnostmi. Všimněte si, že partitionKey a RowKey jsou již k dispozici, protože je tabulka používá k vyhledání dat.

    klíč oddílu a řádku

  8. Aktualizujte hodnotu PartitionKey a RowKey následujícím způsobem (nezapomeňte to udělat pro každou vlastnost řádku, kterou přidáte, ale pokaždé navyšte hodnotu RowKey):

    přidání správných hodnot

  9. Chcete-li přidat další řádky dat, klikněte na přidat vlastnost Přidat. Vytvořte první prázdnou tabulku tak, aby odpovídala následující tabulce.

  10. Po dokončení klikněte na tlačítko OK.

    Po dokončení klikněte na ok.

    Upozorňující

    Ujistěte se, že jste změnili typ položek X, Y a Z na Double.

  11. Všimněte si, že tabulka teď obsahuje řádek dat. Dalším kliknutím na + ikonu (plus) přidáte další entitu.

    první řádek

  12. Vytvořte další vlastnost a nastavte hodnoty nové entity tak, aby odpovídaly níže uvedeným hodnotám.

    přidat datová krychle

  13. Opakujte poslední krok a přidejte další entitu. Nastavte hodnoty pro tuto entitu na hodnoty uvedené níže.

    přidání válce

  14. Tabulka by teď měla vypadat jako dole.

    tabulka je dokončená.

  15. Dokončili jste tuto kapitolu. Nezapomeňte uložit.

Kapitola 6 – Vytvoření aplikace funkcí Azure

Vytvořte aplikaci Funkcí Azure, která bude volána desktopovou aplikací, aby aktualizovala službu Table Service a odeslala oznámení prostřednictvím centra oznámení.

Nejprve musíte vytvořit soubor, který vaší funkci Azure Functions umožní načíst potřebné knihovny.

  1. Otevřete Poznámkový blok (stiskněte klávesu Windows a zadejte poznámkový blok).

    otevření poznámkového bloku

  2. Otevřete Poznámkový blok a vložte do něj níže strukturu JSON. Až to uděláte, uložte ho na plochu jako project.json. Je důležité, aby pojmenování bylo správné: ujistěte se, že nemá příponu .txt souboru. Tento soubor definuje knihovny, které bude vaše funkce používat, pokud jste použili NuGet, bude vypadat dobře.

    {
    "frameworks": {
        "net46":{
        "dependencies": {
            "WindowsAzure.Storage": "7.0.0",
            "Microsoft.Azure.NotificationHubs" : "1.0.9",
            "Microsoft.Azure.WebJobs.Extensions.NotificationHubs" :"1.1.0"
        }
        }
    }
    }
    
  3. Přihlaste se k webu Azure Portal.

  4. Jakmile se přihlásíte, klikněte v levém horním rohu na Nový a vyhledejte aplikaci Function App, stiskněte Enter.

    vyhledání aplikace funkcí

    Poznámka:

    Slovo Nový mohlo být nahrazeno vytvořením prostředku na novějších portálech.

  5. Na nové stránce se zobrazí popis služby Function App Service. V levém dolním rohu této výzvy vyberte tlačítko Vytvořit a vytvořte přidružení k této službě.

    instance aplikace funkcí

  6. Po kliknutí na Vytvořit vyplňte následující:

    1. Jako název aplikace vložte požadovaný název pro tuto instanci služby.

    2. Vyberte nějaké předplatné.

    3. Vyberte cenovou úroveň, která je pro vás vhodná, pokud se jedná o první vytvoření služby Function App Service, měla by vám být k dispozici bezplatná úroveň.

    4. Zvolte skupinu prostředků nebo vytvořte novou. Skupina prostředků poskytuje způsob, jak monitorovat, řídit přístup, zřizovat a spravovat fakturaci pro kolekci prostředků Azure. Doporučujeme zachovat všechny služby Azure přidružené k jednomu projektu (například k těmto testovacím prostředím) v rámci společné skupiny prostředků).

      Pokud si chcete přečíst další informace o skupinách prostředků Azure, postupujte podle tohoto odkazu, jak spravovat skupinu prostředků.

    5. V případě operačního systému klikněte na Windows, protože se jedná o zamýšlenou platformu.

    6. Vyberte plán hostování (v tomto kurzu se používá plán Consumption).

    7. Vyberte umístění (zvolte stejné umístění jako úložiště, které jste vytvořili v předchozím kroku).

    8. V části Úložiště musíte vybrat službu úložiště, kterou jste vytvořili v předchozím kroku.

    9. V této aplikaci nebudete potřebovat Application Insights , takže ji můžete nechat vypnutou.

    10. Klikněte na Vytvořit.

      vytvoření nové instance

  7. Po kliknutí na Vytvořit budete muset počkat, až se služba vytvoří, může to chvíli trvat.

  8. Po vytvoření instance služby se na portálu zobrazí oznámení.

    nové oznámení

  9. Kliknutím na oznámení můžete prozkoumat novou instanci služby.

  10. Kliknutím na tlačítko Přejít k prostředku v oznámení můžete prozkoumat novou instanci služby.

    Snímek obrazovky znázorňující úspěšné nasazení se zvýrazněným tlačítkem Přejít k prostředku

  11. Kliknutím na + ikonu (plus) vedle funkce vytvořte novou.

    add new function

  12. V centrálním panelu se zobrazí okno pro vytvoření funkce . Ignorujte informace v horní polovině panelu a klikněte na Vlastní funkce, která se nachází v dolní části (v modré oblasti, jak je uvedeno níže).

    vlastní funkce

  13. Na nové stránce v okně se zobrazí různé typy funkcí. Posuňte se dolů a zobrazte fialové typy a klikněte na element HTTP PUT .

    http put link

    Důležité

    Možná budete muset posunout stránku dolů (a tento obrázek nemusí vypadat úplně stejně, pokud proběhly aktualizace webu Azure Portal), ale hledáte prvek s názvem HTTP PUT.

  14. Zobrazí se okno HTTP PUT , kde je potřeba nakonfigurovat funkci (viz obrázek níže).

    1. V rozevírací nabídce jazyka vyberte C#.

    2. Jako název zadejte odpovídající název.

    3. V rozevírací nabídce Úroveň ověřování vyberte Funkce.

    4. V části Název tabulky musíte použít přesný název, který jste použili k vytvoření služby Table Service dříve (včetně stejného písmena).

    5. V části Připojení k účtu úložiště použijte rozevírací nabídku a vyberte svůj účet úložiště. Pokud tam není, klikněte na nový hypertextový odkaz vedle názvu oddílu a zobrazte další panel, kde by měl být uvedený váš účet úložiště.

      Snímek obrazovky znázorňující oddíl připojení účtu úložiště s vybraným hypertextovým odkazem Nový

  15. Klikněte na Vytvořit a zobrazí se oznámení, že se vaše nastavení úspěšně aktualizovalo.

    create function

  16. Po kliknutí na Vytvořit budete přesměrováni do editoru funkcí.

    update function code

  17. Do editoru funkcí vložte následující kód (nahraďte kód ve funkci):

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

    Poznámka:

    Pomocí zahrnutých knihoven funkce obdrží název a umístění objektu, který byl přesunut ve scéně Unity (jako objekt C#, označovaný jako UnityGameObject). Tento objekt se pak použije k aktualizaci parametrů objektu v rámci vytvořené tabulky. Za tímto účelem funkce volá vytvořenou službu Notification Hub, která upozorní všechny odebírané aplikace.

  18. S kódem na místě klikněte na Uložit.

  19. Potom klikněte na < ikonu (šipka) na pravé straně stránky.

    otevření panelu pro nahrání

  20. Panel se posune zprava. Na panelu klikněte na Nahrát a zobrazí se prohlížeč souborů.

  21. Přejděte na soubor project.json, který jste vytvořili v Poznámkovém bloku, a klikněte na tlačítko Otevřít. Tento soubor definuje knihovny, které bude vaše funkce používat.

    Nahrání kódu JSON

  22. Po nahrání se soubor zobrazí na panelu vpravo. Kliknutím ho otevřete v editoru funkcí . Musí vypadat úplně stejně jako na dalším obrázku (pod krokem 23).

  23. Potom na panelu vlevo pod funkcí klikněte na odkaz Integrovat.

    integrace funkce

  24. Na další stránce v pravém horním rohu klikněte na Rozšířený editor (jak je uvedeno níže).

    otevření rozšířeného editoru

  25. Na prostředním panelu se otevře function.json soubor, který je potřeba nahradit následujícím fragmentem kódu. Tím se definuje funkce, kterou vytváříte, a parametry předané do funkce.

    {
    "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. Editor by teď měl vypadat jako na následujícím obrázku:

    zpět do standardního editoru

  27. Můžete si všimnout, že vstupní parametry, které jste právě vložili, nemusí odpovídat tabulce a podrobnostem o úložišti, a proto bude nutné je aktualizovat informacemi. Tady to neprodávejte, protože je probíraná dále. Jednoduše klikněte na odkaz Standardní editor v pravém horním rohu stránky a vraťte se zpět.

  28. Zpátky v editoru Standard klikněte na Azure Table Storage (tabulka) v části Vstupy.

    Vstupy tabulek

  29. Ujistěte se, že tyto informace odpovídají vašim informacím, protože se můžou lišit (pod následujícími kroky je obrázek):

    1. Název tabulky: název tabulky, kterou jste vytvořili ve službě Azure Storage, Table Service.

    2. Připojení účtu úložiště: Klikněte na nový, který se zobrazí vedle rozevírací nabídky, a vpravo od okna se zobrazí panel.

      Snímek obrazovky znázorňující okno Účet úložiště se zvýrazněnou možností Vytvořit nový na panelu napravo od okna

      1. Vyberte svůj účet úložiště, který jste vytvořili dříve pro hostování aplikací Function Apps.

      2. Všimněte si, že se vytvořila hodnota připojení účtu úložiště.

      3. Až budete hotovi, nezapomeňte stisknout klávesu Uložit .

    3. Stránka Vstupy by se teď měla shodovat s níže svojí informací.

      vstupy jsou dokončeny.

  30. Dále klikněte na Azure Notification Hub (oznámení) – v části Výstupy. Ujistěte se, že se následující informace shodují s vašimi informacemi, protože se můžou lišit (pod následujícím postupem je obrázek):

    1. Název centra oznámení: toto je název vaší instance služby Notification Hub , kterou jste vytvořili dříve.

    2. Připojení oboru názvů Notification Hubs: Klikněte na nový, který se zobrazí vedle rozevírací nabídky.

      kontrola výstupů

    3. Zobrazí se místní okno Připojení (viz obrázek níže), kde potřebujete vybrat obor názvů centra oznámení, který jste nastavili dříve.

    4. V prostřední rozevírací nabídce vyberte název centra oznámení.

    5. Nastavte rozevírací nabídku Zásady na DefaultFullSharedAccessSignature.

    6. Kliknutím na tlačítko Vybrat se vrátíte zpět.

      výstupní aktualizace

  31. Stránka Výstupy by se teď měla shodovat s níže postupem, ale s vašimi informacemi. Nezapomeňte stisknout uložit.

Upozorňující

Název centra oznámení neupravujte přímo (měli byste to udělat pomocí Rozšířený editor, pokud jste postupovali správně podle předchozích kroků.

Snímek obrazovky znázorňující stránku Výstupy s obecnými informacemi

  1. V tomto okamžiku byste měli funkci otestovat, abyste měli jistotu, že funguje. Akce:

    1. Přejděte ještě jednou na stránku funkce:

      Snímek obrazovky znázorňující stránku funkcí se zvýrazněnou nově vytvořenou funkcí

    2. Zpátky na stránce funkce kliknutím na kartu Test na pravé straně stránky otevřete okno Test :

      Snímek obrazovky se stránkou funkcí se zvýrazněnou možností Test na pravé straně

    3. Do textového pole Požadavku v okně vložte následující kód:

      {  
          "Type":null,
          "X":3,
          "Y":0,
          "Z":1,
          "PartitionKey":null,
          "RowKey":"Obj2",
          "Timestamp":"0001-01-01T00:00:00+00:00",
          "ETag":null
      }
      
    4. Se zavedeným testovacím kódem klikněte na tlačítko Spustit v pravém dolním rohu a test se spustí. Výstupní protokoly testu se zobrazí v oblasti konzoly pod kódem funkce.

      Snímek obrazovky znázorňující výstupní protokoly testu v oblasti konzoly

    Upozorňující

    Pokud výše uvedený test selže, budete muset pečlivě zkontrolovat, jestli jste přesně postupovali podle výše uvedených kroků, zejména nastavení na panelu integrace.

Kapitola 7 – Nastavení desktopového projektu Unity

Důležité

Desktopová aplikace, kterou teď vytváříte, nebude v Unity Editoru fungovat. Musí být spuštěna mimo Editor, a to po sestavení aplikace pomocí sady Visual Studio (nebo nasazené aplikace).

Následuje typická sada pro vývoj pomocí Unity a hybridní reality, a proto je dobrou šablonou pro jiné projekty.

Nastavte a otestujte imerzivní náhlavní soupravu hybridní reality.

Poznámka:

Pro tento kurz nebudete vyžadovat ovladače pohybu. Pokud potřebujete podporu nastavení imerzivní náhlavní soupravy, postupujte podle tohoto odkazu, jak nastavit Windows Mixed Reality.

  1. Otevřete Unity a klikněte na Nový.

    Snímek obrazovky okna Projekty Unity se zvýrazněnou ikonou projektu Nový v pravém horním rohu

  2. Musíte zadat název projektu Unity, vložit UnityDesktopNotifHub. Ujistěte se, že je typ projektu nastavený na 3D. Nastavte umístění na místo, které je pro vás vhodné (nezapomeňte, že blíže ke kořenovým adresářům je lepší). Potom klikněte na Vytvořit projekt.

    vytvoření projektu

  3. Při otevření Unity stojí za to zkontrolovat, jestli je výchozí editor skriptů nastavený na Visual Studio. Přejděte na Upravit>předvolby a pak v novém okně přejděte na Externí nástroje. Změňte editor externích skriptů na Visual Studio 2017. Zavřete okno Předvolby.

    nastavení externích nástrojů VS

  4. Dále přejděte do Nastavení sestavení souboru>a vyberte Univerzální platforma Windows a potom kliknutím na tlačítko Přepnout platformu použijte svůj výběr.

    přepínání platforem

  5. Zůstaňte v nastavení sestavení souborů>a ujistěte se, že:

    1. Cílové zařízení je nastavené na libovolné zařízení.

      Tato aplikace bude určená pro vaši plochu, takže musí být jakékoli zařízení.

    2. Typ sestavení je nastavený na D3D.

    3. Sada SDK je nastavená na nejnovější nainstalovanou verzi.

    4. Verze sady Visual Studio je nastavená na nejnovější nainstalovanou verzi.

    5. Sestavení a spuštění je nastavené na místní počítač.

    6. I když je tady, stojí za to uložit scénu a přidat ji do sestavení.

      1. Uděláte to tak, že vyberete Přidat otevřené scény. Zobrazí se okno pro uložení.

        Snímek obrazovky znázorňující zvýrazněnou možnost Přidat otevřenou scénu v pravém horním rohu

      2. Vytvořte novou složku pro tuto a jakoukoli budoucí scénu a pak vyberte tlačítko Nová složka a vytvořte novou složku, pojmenujte ji Scény.

        Snímek obrazovky znázorňující novou složku Scény vytvořenou se zvýrazněnou možností Nová složka v levém horním rohu

      3. Otevřete nově vytvořenou složku Scény a potom do textového pole Název souboru zadejte NH_Desktop_Scene a stiskněte uložit.

        nové NH_Desktop_Scene

    7. Zbývající nastavení v nastavení sestavení by teď měla zůstat ve výchozím nastavení.

  6. Ve stejném okně klikněte na tlačítko Nastavení přehrávače, otevře se související panel v prostoru, kde se nachází inspektor .

  7. Na tomto panelu je potřeba ověřit několik nastavení:

    1. Na kartě Další nastavení:

      1. Skriptovací verze modulu runtime by měla být experimentální (ekvivalent .NET 4.6)

      2. Back-end skriptování by měl být .NET.

      3. Úroveň kompatibility rozhraní API by měla být .NET 4.6

        4.6 net verze

    2. Na kartě Nastavení publikování v části Možnosti zaškrtněte:

      • InternetClient

        Snímek obrazovky s vybranou položkou InternetClient v části Možnosti

  8. Zpět v projektech Unity Nastavení sestavení v jazyce C# se už nezobrazuje šedě. Zaškrtněte políčko vedle tohoto příkazu.

  9. Zavřete okno Nastavení sestavení.

  10. Uložte scénu a soubor projektu >a uložte scénu / projekt ukládání souborů.>

    Důležité

    Pokud chcete přeskočit komponentu Nastavení Unity pro tento projekt (desktopová aplikace) a pokračovat přímo do kódu, můžete si tento balíček .unitypackage stáhnout, importovat ho do projektu jako vlastní balíček a pokračovat z kapitoly 9. Stále budete muset přidat komponenty skriptu.

Kapitola 8 – Import knihoven DLL v Unity

Budete používat Službu Azure Storage pro Unity (která sama využívá sadu .Net SDK pro Azure). Další informace najdete na tomto odkazu o službě Azure Storage for Unity.

V Unity je v současné době známý problém, který vyžaduje, aby se po importu překonfigurovaly moduly plug-in. Tyto kroky (4 až 7 v této části) se už po vyřešení chyby nevyžadují.

Pokud chcete sadu SDK importovat do vlastního projektu, ujistěte se, že jste si stáhli nejnovější balíček .unitypackage z GitHubu. Pak proveďte tyto akce:

  1. Přidejte do Unity balíček .unitypackage pomocí možnosti nabídky Vlastní balíček > importu prostředků>.

  2. V okně Importovat balíček Unity, které se zobrazí, můžete vybrat vše v části Úložiště modulů plug-in>. Zrušte zaškrtnutí všech ostatních polí, protože pro tento kurz není potřeba.

    import do balíčku

  3. Kliknutím na tlačítko Importovat přidáte položky do projektu.

  4. Přejděte do složky Úložiště v části Moduly plug-in v zobrazení Projektu a vyberte pouze následující moduly plug-in:

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

zrušení zaškrtnutí políčka Libovolná platforma

  1. Pokud jsou vybrány tyto konkrétní moduly plug-in, zrušte zaškrtnutí políčka Libovolná platforma a zrušte zaškrtnutí políčka WSAPlayer a klepněte na tlačítko Použít.

    Použití knihoven DLL platformy

    Poznámka:

    Tyto konkrétní moduly plug-in označujeme, aby se používaly jenom v Unity Editoru. Důvodem je to, že ve složce WSA existují různé verze stejných modulů plug-in, které se po exportu projektu z Unity použijí.

  2. Ve složce modulu plug-in Storage vyberte pouze:

    • Microsoft.Data.Services.Client

      set don't process for dlls

  3. Zaškrtněte políčko Nezpracovávejte v části Nastavení platformy a klikněte na Použít.

    použití žádného zpracování

    Poznámka:

    Tento modul plug-in označujeme jako "Nezpracovávejte", protože patcher sestavení Unity má potíže se zpracováním tohoto modulu plug-in. Modul plug-in bude i nadále fungovat, i když se nezpracuje.

Kapitola 9 – Vytvoření třídy TableToScene v projektu Desktop Unity

Teď potřebujete vytvořit skripty obsahující kód pro spuštění této aplikace.

Prvním skriptem, který potřebujete vytvořit, je TableToScene, který zodpovídá za:

  • Čtení entit v tabulce Azure
  • Pomocí dat tabulky určete, které objekty se mají vytvořit a ve které pozici.

Druhým skriptem, který potřebujete vytvořit, je CloudScene, který zodpovídá za:

  • Registrace události kliknutí levým tlačítkem, aby uživatel mohl přetahovat objekty kolem scény.
  • Serializace dat objektu z této scény Unity a jejich odeslání do aplikace funkcí Azure.

Vytvoření této třídy:

  1. Klikněte pravým tlačítkem na složku assetu umístěnou na panelu projektu a vytvořte>složku. Pojmenujte složky Skripty.

    vytvoření složky skriptů

    create scripts folder 2

  2. Poklikáním na právě vytvořenou složku otevřete.

  3. Klikněte pravým tlačítkem do složky Scripts (Skripty) a klikněte na Create C# Script (Vytvořit>skript jazyka C#). Pojmenujte skript TableToScene.

    Snímek obrazovky, který ukazuje, jak vytvořit nový skript TableToScenePřejmenování TableToScene

  4. Poklikáním na skript ho otevřete v sadě Visual Studio 2017.

  5. Přidejte následující obory názvů:

    using Microsoft.WindowsAzure.Storage;
    using Microsoft.WindowsAzure.Storage.Auth;
    using Microsoft.WindowsAzure.Storage.Table;
    using UnityEngine;
    
  6. Do třídy vložte následující proměnné:

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

    Poznámka:

    Hodnotu accountName nahraďte názvem služby Azure Storage a hodnotou accountKey hodnotou klíče, kterou najdete ve službě Azure Storage, na webu Azure Portal (viz obrázek níže).

    Načtení klíče účtu

  7. Nyní přidejte metody Start() a Awake() pro inicializaci třídy.

        /// <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. Do třídy TableToScene přidejte metodu, která načte hodnoty z tabulky Azure a použije je k vytvoření odpovídajících primitiv ve scéně.

        /// <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. Mimo TableToScene třídy je nutné definovat třídu, kterou aplikace používá k serializaci a deserializaci Tabulkové entity.

        /// <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. Než se vrátíte do Editoru Unity, nezapomeňte uložit .

  11. Klikněte na hlavní kameru z panelu Hierarchie, aby se jeho vlastnosti zobrazily v inspektoru.

  12. V otevřené složce Scripts vyberte soubor TableToScene skriptu a přetáhněte ho na hlavní kameru. Výsledek by měl být následující:

    přidání skriptu do hlavní kamery

Kapitola 10 – Vytvoření třídy CloudScene v desktopovém projektu Unity

Druhým skriptem, který potřebujete vytvořit, je CloudScene, který zodpovídá za:

  • Registrace události kliknutí levým tlačítkem, aby uživatel mohl přetahovat objekty kolem scény.

  • Serializace dat objektu z této scény Unity a jejich odeslání do aplikace funkcí Azure.

Vytvoření druhého skriptu:

  1. Klikněte pravým tlačítkem do složky Skripty a klikněte na Příkaz Vytvořit, Skript jazyka C#. Pojmenujte skript CloudScene

    Snímek obrazovky, který ukazuje, jak vytvořit nový skript CloudScenepřejmenování CloudScene

  2. Přidejte následující obory názvů:

    using Newtonsoft.Json;
    using System.Collections;
    using System.Text;
    using System.Threading.Tasks;
    using UnityEngine;
    using UnityEngine.Networking;
    
  3. Vložte následující proměnné:

        /// <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. Nahraďte hodnotu azureFunctionEndpoint adresou URL vaší aplikace funkcí Azure nalezenou ve službě Azure Function App Service na webu Azure Portal, jak je znázorněno na následujícím obrázku:

    získat adresu URL funkce

  5. Nyní přidejte metody Start() a Awake() pro inicializaci třídy.

        /// <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. Do metody Update() přidejte následující kód, který rozpozná vstup myši a přetáhne, což pak přesune GameObjects ve scéně. Pokud uživatel přetáhl a zahodil objekt, předá mu název a souřadnice objektu do metody UpdateCloudScene(), která zavolá službu Azure Function App Service, která aktualizuje tabulku Azure a aktivuje oznámení.

        /// <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. Teď přidejte metodu UpdateCloudScene(), jak je znázorněno níže:

        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. Uložte kód a vraťte se do Unity.

  9. Přetáhněte skript CloudScene na hlavní kameru.

    1. Klikněte na hlavní kameru z panelu Hierarchie, aby se jeho vlastnosti zobrazily v inspektoru.

    2. V otevřené složce Scripts vyberte skript CloudScene a přetáhněte ho na hlavní kameru. Výsledek by měl být následující:

      přetažením cloudového skriptu na hlavní kameru

Kapitola 11 – Sestavení desktopového projektu do UPW

Všechno potřebné pro oddíl Unity tohoto projektu bylo dokončeno.

  1. Přejděte na Nastavení sestavení (Nastavení sestavení souboru>).

  2. V okně Nastavení sestavení klikněte na Sestavit.

    Snímek obrazovky znázorňující okno Nastavení sestavení s vybranou Univerzální platforma Windows a zvýrazněným tlačítkem Sestavit v pravém dolním rohu

  3. Zobrazí se okno Průzkumník souborů s výzvou k zadání umístění pro sestavení. Vytvořte novou složku (kliknutím na Nová složka v levém horním rohu) a pojmenujte ji BUILDS.

    nová složka pro sestavení

    1. Otevřete novou složku BUILDS a vytvořte další složku (pomocí nové složky ještě jednou) a pojmenujte ji NH_Desktop_App.

      název složky NH_Desktop_App

    2. Vyberte NH_Desktop_App. klikněte na Vybrat složku. Sestavení projektu bude trvat minutu nebo tak.

  4. Po sestavení se Průzkumník souborů zobrazí umístění nového projektu. Nemusíte ho ale otevírat, protože v několika dalších kapitolách potřebujete nejprve vytvořit druhý projekt Unity.

Kapitola 12 – Nastavení projektu Mixed Reality Unity

Následuje typická sada pro vývoj s hybridní realitou a jako taková je vhodná šablona pro jiné projekty.

  1. Otevřete Unity a klikněte na Nový.

    Snímek obrazovky znázorňující okno Projekty Unity se zvýrazněným tlačítkem Nový v pravém horním rohu

  2. Teď budete muset zadat název projektu Unity, vložit UnityMRNotifHub. Ujistěte se, že je typ projektu nastavený na 3D. Nastavte umístění na místo, které je pro vás vhodné (nezapomeňte, že blíže ke kořenovým adresářům je lepší). Potom klikněte na Vytvořit projekt.

    název UnityMRNotifHub

  3. Při otevření Unity stojí za to zkontrolovat, jestli je výchozí editor skriptů nastavený na Visual Studio. Přejděte na Upravit>předvolby a pak v novém okně přejděte na Externí nástroje. Změňte editor externích skriptů na Visual Studio 2017. Zavřete okno Předvolby.

    Nastavení externího editoru na VS

  4. Dále přejděte do Nastavení sestavení souborů>a přepněte platformu na Univerzální platforma Windows kliknutím na tlačítko Přepnout platformu.

    přepnutí platforem na UPW

  5. Přejděte do nastavení sestavení souborů>a ujistěte se, že:

    1. Cílové zařízení je nastavené na libovolné zařízení.

      Pro Microsoft HoloLens nastavte cílové zařízení na HoloLens.

    2. Typ sestavení je nastavený na D3D.

    3. Sada SDK je nastavená na nejnovější nainstalovanou verzi.

    4. Verze sady Visual Studio je nastavená na nejnovější nainstalovanou verzi.

    5. Sestavení a spuštění je nastavené na místní počítač.

    6. I když je tady, stojí za to uložit scénu a přidat ji do sestavení.

      1. Uděláte to tak, že vyberete Přidat otevřené scény. Zobrazí se okno pro uložení.

        Snímek obrazovky znázorňující okno Nastavení sestavení se zvýrazněným tlačítkem Přidat scény v pravém horním rohu

      2. Vytvořte novou složku pro tuto a jakoukoli budoucí scénu a pak vyberte tlačítko Nová složka a vytvořte novou složku, pojmenujte ji Scény.

        Snímek obrazovky se zvýrazněnou možností Nová složka v levém horním rohu v okně Uložit scénu

      3. Otevřete nově vytvořenou složku Scény a potom do textového pole Název souboru zadejte NH_MR_Scene a stiskněte klávesu Uložit.

        nová scéna – NH_MR_Scene

    7. Zbývající nastavení v nastavení sestavení by teď měla zůstat ve výchozím nastavení.

  6. Ve stejném okně klikněte na tlačítko Nastavení přehrávače, otevře se související panel v prostoru, kde se nachází inspektor .

    otevření nastavení přehrávače

  7. Na tomto panelu je potřeba ověřit několik nastavení:

    1. Na kartě Další nastavení:

      1. Skriptovací verze modulu runtime by měla být experimentální (ekvivalent .NET 4.6)

      2. Back-end skriptování by měl být .NET.

      3. Úroveň kompatibility rozhraní API by měla být .NET 4.6

        Kompatibilita rozhraní API

    2. Dále dolů na panelu v nastavení XR (v části Nastavení publikování níže) zaškrtněte možnost Podpora virtuální reality a ujistěte se, že je přidaná sada WINDOWS Mixed Reality SDK .

      Aktualizace nastavení xr

    3. Na kartě Nastavení publikování v části Možnosti zaškrtněte:

      • InternetClient

        Snímek obrazovky znázorňující kartu Nastavení publikování se zaškrtnutou možností InternetClient

  8. Zpět v nastavení sestavení už projekty Unity C# nejsou šedě: zaškrtněte políčko vedle tohoto nastavení.

  9. Po provedení těchto změn zavřete okno Nastavení sestavení.

  10. Uložte scénu a soubor projektu >a uložte scénu / projekt ukládání souborů.>

    Důležité

    Pokud chcete přeskočit komponentu Nastavení Unity pro tento projekt (aplikace hybridní reality) a pokračovat přímo do kódu, můžete si stáhnout tento balíček .unitypackage, importovat ho do projektu jako vlastní balíček a pokračovat z kapitoly 14. Stále budete muset přidat komponenty skriptu.

Kapitola 13 – Import knihoven DLL v projektu Mixed Reality Unity

Budete používat knihovnu Azure Storage pro Unity (která používá sadu .Net SDK pro Azure). Na tomto odkazu se dozvíte, jak používat Azure Storage s Unity. V Unity je v současné době známý problém, který vyžaduje, aby se po importu překonfigurovaly moduly plug-in. Tyto kroky (4 až 7 v této části) se už po vyřešení chyby nevyžadují.

Pokud chcete sadu SDK importovat do vlastního projektu, ujistěte se, že jste stáhli nejnovější balíček .unitypackage. Pak proveďte tyto akce:

  1. Přidejte balíček .unitypackage, který jste stáhli z výše uvedeného, do Unity pomocí možnosti nabídky Vlastní balíček>importu prostředků.>

  2. V okně Importovat balíček Unity, které se zobrazí, můžete vybrat vše v části Úložiště modulů plug-in>.

    Import package

  3. Kliknutím na tlačítko Importovat přidáte položky do projektu.

  4. Přejděte do složky Úložiště v části Moduly plug-in v zobrazení Projektu a vyberte pouze následující moduly plug-in:

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

    výběr modulů plug-in

  5. Pokud jsou vybrány tyto konkrétní moduly plug-in, zrušte zaškrtnutí políčka Libovolná platforma a zrušte zaškrtnutí políčka WSAPlayer a klepněte na tlačítko Použít.

    použití změn platformy

    Poznámka:

    Tyto konkrétní moduly plug-in označujete tak, aby se používaly jenom v Unity Editoru. Důvodem je to, že ve složce WSA existují různé verze stejných modulů plug-in, které se po exportu projektu z Unity použijí.

  6. Ve složce modulu plug-in Storage vyberte pouze:

    • Microsoft.Data.Services.Client

      výběr klienta datových služeb

  7. Zaškrtněte políčko Nezpracovávejte v části Nastavení platformy a klikněte na Použít.

    nezpracovávejte

    Poznámka:

    Tento modul plug-in označujete "Nezpracovávejte", protože patcher sestavení Unity má potíže se zpracováním tohoto modulu plug-in. Modul plug-in bude dál fungovat, i když se nezpracuje.

Kapitola 14 – Vytvoření třídy TableToScene v projektu Unity hybridní reality

Třída TableToScene je shodná s třídou vysvětlenou v kapitole 9. Vytvořte stejnou třídu v projektu Unity hybridní reality podle stejného postupu popsaného v kapitole 9.

Po dokončení této kapitoly budou mít oba projekty Unity tuto třídu nastavenou na hlavní kameru.

Kapitola 15 – Vytvoření třídy NotificationReceiver v projektu Mixed Reality Unity

Druhým skriptem, který potřebujete vytvořit, je NotificationReceiver, který zodpovídá za:

  • Registrace aplikace v centru oznámení při inicializaci
  • Naslouchání oznámením přicházejícím z centra oznámení.
  • Deserializace dat objektu z přijatých oznámení.
  • Přesuňte objekty GameObjects ve scéně na základě deserializovaných dat.

Vytvoření skriptu NotificationReceiver:

  1. Klikněte pravým tlačítkem do složky Skripty a klikněte na Příkaz Vytvořit, Skript jazyka C#. Pojmenujte skript NotificationReceiver.

    vytvoření nového skriptu c#name it NotificationReceiver

  2. Poklikáním otevřete skript.

  3. Přidejte následující obory názvů:

    //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. Vložte následující proměnné:

        /// <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. Hodnotu hubName nahraďte názvem služby Notification Hub a hodnotou hubListenEndpoint hodnotou koncového bodu, kterou najdete na kartě Zásady přístupu, službě Azure Notification Hub na webu Azure Portal (viz obrázek níže).

    vložení koncového bodu zásad centra oznámení

  6. Nyní přidejte metody Start() a Awake() pro inicializaci třídy.

        /// <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. Přidejte metodu WaitForNotification , která aplikaci umožní přijímat oznámení z knihovny Centra oznámení bez kolize s hlavním vláknem:

        /// <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. Následující metoda InitNotificationAsync() zaregistruje aplikaci ve službě notification Hub Při inicializaci. Kód se zakomentuje, protože Unity nebude moct sestavit projekt. Komentáře odeberete při importu balíčku NuGet zasílání zpráv Azure v sadě 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. Při každém přijetí oznámení se aktivuje následující obslužná rutina Channel_PushNotificationReceived (). Deserializuje oznámení, což bude entita tabulky Azure, která byla přesunuta v desktopové aplikaci, a pak přesune odpovídající GameObject ve scéně MR na stejnou pozici.

    Důležité

    Kód se zakomentuje, protože kód odkazuje na knihovnu zasílání zpráv Azure, kterou přidáte po vytvoření projektu Unity pomocí Správce balíčků NuGet v sadě Visual Studio. Proto projekt Unity nebude moct sestavit, pokud není zakomentován. Mějte na paměti, že byste měli vytvořit projekt a pak se chcete vrátit do Unity, budete muset tento kód znovu okomentovat.

        ///// <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. Než se vrátíte do Unity Editoru, nezapomeňte změny uložit.

  11. Klikněte na hlavní kameru z panelu Hierarchie, aby se jeho vlastnosti zobrazily v inspektoru.

  12. V otevřené složce Scripts vyberte skript NotificationReceiver a přetáhněte ho na hlavní kameru. Výsledek by měl být následující:

    přetáhněte skript příjemce oznámení do kamery

    Poznámka:

    Pokud to vyvíjíte pro Microsoft HoloLens, budete muset aktualizovat komponentu Kamera hlavní kamery, aby:

    • Vymazat příznaky: plná barva
    • Pozadí: Černá

Kapitola 16 – Sestavení projektu hybridní reality do UPW

Tato kapitola je shodná s procesem sestavení pro předchozí projekt. Všechno potřebné pro oddíl Unity tohoto projektu bylo dokončeno, takže je čas ho sestavit z Unity.

  1. Přejděte na Nastavení sestavení (Nastavení sestavení souboru>).

  2. V nabídce Nastavení sestavení se ujistěte, že jsou zaškrtnuté projekty Unity C# (což vám umožní po sestavení upravovat skripty v tomto projektu).

  3. Po dokončení klikněte na Sestavit.

    Snímek obrazovky znázorňující okno Nastavení sestavení se zvýrazněným tlačítkem Sestavit v pravém dolním rohu

  4. Zobrazí se okno Průzkumník souborů s výzvou k zadání umístění pro sestavení. Vytvořte novou složku (kliknutím na Nová složka v levém horním rohu) a pojmenujte ji BUILDS.

    create builds folder

    1. Otevřete novou složku BUILDS a vytvořte další složku (pomocí nové složky ještě jednou) a pojmenujte ji NH_MR_App.

      vytvoření složky NH_MR_Apps

    2. Vyberte NH_MR_App. klikněte na Vybrat složku. Sestavení projektu bude trvat minutu nebo tak.

  5. Po sestavení se otevře okno Průzkumník souborů v umístění nového projektu.

Kapitola 17 – Přidání balíčků NuGet do řešení UnityMRNotifHub

Upozorňující

Mějte na paměti, že jakmile přidáte následující balíčky NuGet (a zrušíte komentář kódu v další kapitole), kód při opětovném otevření v projektu Unity zobrazí chyby. Pokud se chcete vrátit zpět a pokračovat v úpravách v Unity Editoru, budete potřebovat komentář, který je nerušný kód, a pak znovu komentář později, jakmile budete zpátky v sadě Visual Studio.

Po dokončení sestavení hybridní reality přejděte do projektu hybridní reality, který jste vytvořili, a poklikáním na soubor řešení (.sln) v této složce otevřete řešení v sadě Visual Studio 2017. Teď budete muset přidat balíček NuGet windowsAzure.Messaging.managed . Jedná se o knihovnu, která se používá k příjmu oznámení z centra oznámení.

Import balíčku NuGet:

  1. V Průzkumník řešení klikněte pravým tlačítkem na řešení.

  2. Klikněte na Spravovat balíčky NuGet.

    otevření správce nugetu

  3. Vyberte kartu Procházet a vyhledejte WindowsAzure.Messaging.managed.

    Vyhledání balíčku zasílání zpráv windows Azure

  4. Vyberte výsledek (jak je znázorněno níže) a v okně vpravo zaškrtněte políčko vedle projectu. Tím se zaškrtne políčko vedle projectu spolu se zaškrtávacím políčkam vedle projektu Assembly-CSharp a UnityMRNotifHub .

    zaškrtněte všechny projekty.

  5. Verze, která byla původně poskytnuta , nemusí být kompatibilní s tímto projektem. Proto klepněte na rozevírací nabídku vedle verze a klepněte na tlačítko Verze 0.1.7.9 a klepněte na tlačítko Nainstalovat.

  6. Teď jste dokončili instalaci balíčku NuGet. Vyhledejte okomentovaný kód, který jste zadali do třídy NotificationReceiver , a odeberte komentáře..

Kapitola 18 – Edit UnityMRNotifHub application, NotificationReceiver – třída

Po přidání balíčků NuGet budete muset zrušit komentář některého kódu v rámci Třídy NotificationReceiver .

Sem patří:

  1. Obor názvů v horní části:

    using Microsoft.WindowsAzure.Messaging;
    
  2. Veškerý kód v metodě 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;
            }
        }
    

Upozorňující

Výše uvedený kód obsahuje komentář: ujistěte se, že jste tento komentář omylem neodkomentovali (protože kód nebude kompilován, pokud máte!).

  1. A nakonec Channel_PushNotificationReceived událost:

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

S těmito nekommentovanými se ujistěte, že jste uložili, a pak pokračujte k další kapitole.

Kapitola 19 – Přidružení projektu hybridní reality k aplikaci Pro Store

Teď potřebujete přidružit projekt hybridní reality k aplikaci Storu, ve které jste vytvořili na začátku cvičení.

  1. Otevřete řešení.

  2. Pravým tlačítkem myši klikněte na projekt aplikace PRO UPW na panelu Průzkumník řešení, přejděte do Storu a přidružte aplikaci ke Storu....

    open store association

  3. Zobrazí se nové okno s názvem Přidružit aplikaci k Windows Storu. Klikněte na tlačítko Další.

    přechod na další obrazovku

  4. Načte všechny aplikace přidružené k účtu, ke kterému jste se přihlásili. Pokud nejste přihlášení ke svému účtu, můžete se přihlásit na této stránce.

  5. Najděte název aplikace pro Store, který jste vytvořili na začátku tohoto kurzu, a vyberte ho. Pak klikněte na tlačítko Další.

    najít a vybrat název obchodu

  6. Klikněte na Přidružit.

    přidružení aplikace

  7. Vaše aplikace je teď přidružená k aplikaci pro Store. To je nezbytné pro povolení oznámení.

Kapitola 20 – Nasazení aplikací UnityMRNotifHub a UnityDesktopNotifHub

Tato kapitola může být jednodušší se dvěma lidmi, protože výsledkem bude spuštěná obě aplikace, jedna spuštěná na počítači Desktop a druhá v imerzivní náhlavní soupravě.

Imerzivní aplikace náhlavní soupravy čeká na přijetí změn scény (změny umístění místních objektů GameObjects) a desktopová aplikace provede změny v místní scéně (změny pozice), která se bude sdílet s aplikací MR. Je vhodné nejprve nasadit aplikaci MR, následovanou desktopovou aplikací, aby příjemce mohl začít naslouchat.

Nasazení aplikace UnityMRNotifHub na místním počítači:

  1. Otevřete soubor řešení aplikace UnityMRNotifHub v sadě Visual Studio 2017.

  2. Na platformě řešení vyberte x86, místní počítač.

  3. V konfiguraci řešení vyberte Ladit.

    Snímek obrazovky znázorňující konfiguraci řešení nastavenou na Ladění na panelu nástrojů

  4. Přejděte do nabídky Sestavení a kliknutím na Nasadit řešení aplikaci načtěte do počítače bokem.

  5. Vaše aplikace by se teď měla zobrazit v seznamu nainstalovaných aplikací připravených ke spuštění.

Nasazení aplikace UnityDesktopNotifHub na místním počítači:

  1. Otevřete soubor řešení aplikace UnityDesktopNotifHub v sadě Visual Studio 2017.

  2. Na platformě řešení vyberte x86, místní počítač.

  3. V konfiguraci řešení vyberte Ladit.

    Snímek obrazovky znázorňující konfiguraci řešení nastavenou na Ladění

  4. Přejděte do nabídky Sestavení a kliknutím na Nasadit řešení aplikaci načtěte do počítače bokem.

  5. Vaše aplikace by se teď měla zobrazit v seznamu nainstalovaných aplikací připravených ke spuštění.

  6. Spusťte aplikaci hybridní reality následovanou desktopovou aplikací.

Při spuštění obou aplikací přesuňte objekt ve scéně plochy (pomocí levého tlačítka myši). Tyto poziční změny budou provedeny místně, serializovány a odeslány do služby Function App Service. Služba Function App Service pak aktualizuje tabulku společně s centrem oznámení. Po přijetí aktualizace centrum oznámení odešle aktualizovaná data přímo do všech registrovaných aplikací (v tomto případě imerzivní aplikace náhlavní soupravy), která pak deserializuje příchozí data a použije nová poziční data na místní objekty a přesune je ve scéně.

Vaše dokončená aplikace Azure Notification Hubs

Blahopřejeme, vytvořili jste aplikaci hybridní reality, která využívá službu Azure Notification Hubs a umožňuje komunikaci mezi aplikacemi.

konečný produkt -end

Bonusová cvičení

Cvičení 1

Můžete si vyzkoušet, jak změnit barvu herních objektů a odeslat toto oznámení jiným aplikacím, které si scénu prohlížejí?

Cvičení 2

Můžete do aplikace MR přidat pohyb herních objektů a zobrazit aktualizovanou scénu v desktopové aplikaci?