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.
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:
Aplikace Desktop PC umožní uživateli přesunout objekt ve 2D prostoru (X a Y) pomocí myši.
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).
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).
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:
- Vývojový počítač kompatibilní s Windows Mixed Reality pro vývoj imerzivních náhlavních souprav (VR)
- Windows 10 Fall Creators Update (nebo novější) s povoleným režimem vývojáře
- Nejnovější sada Windows 10 SDK
- Unity 2017.4
- Visual Studio 2017
- Imerzivní náhlavní souprava Windows Mixed Reality (VR) nebo Microsoft HoloLens s povoleným režimem vývojáře
- Přístup k internetu pro nastavení Azure a přístup k Notification Hubs
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í.
Přihlaste se k portálu Microsoft Developer Portal.
Budete se muset přihlásit ke svému účtu Microsoft.
Na řídicím panelu klikněte na Vytvořit novou aplikaci.
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.
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.
Přejděte na 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.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í.
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.
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.
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.
Po přihlášení klikněte v levém horním rohu na Nový a vyhledejte Centrum oznámení a klikněte na Enter.
Poznámka:
Slovo Nový mohlo být nahrazeno vytvořením prostředku na novějších portálech.
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ě.
Po kliknutí na Vytvořit:
Vložte požadovaný název pro tuto instanci služby.
Zadejte obor názvů, který budete moct přidružit k této aplikaci.
Vyberte Umístění.
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ů.
Vyberte příslušné předplatné.
Budete také muset potvrdit, že jste porozuměli podmínkám a ujednáním použitým pro tuto službu.
Vyberte Vytvořit.
Jakmile kliknete na Vytvořit, budete muset počkat, až se služba vytvoří, může to chvíli trvat.
Po vytvoření instance služby se na portálu zobrazí oznámení.
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 .
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.
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í.
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ě.
Pokud ještě nejste přihlášení, přihlaste se k webu Azure Portal.
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.
Ze seznamu vyberte Účet úložiště – objekt blob, soubor, tabulka, fronta .
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.
Po kliknutí na Vytvořit se zobrazí panel:
Vložte požadovaný název pro tuto instanci služby (musí to být všechna malá písmena).
V případě modelu nasazení klikněte na Resource Manager.
V případě typu Účet v rozevírací nabídce vyberte Úložiště (obecné účely v1).
Vyberte příslušné umístění.
V rozevírací nabídce Replikace vyberte geograficky redundantní úložiště jen pro čtení (RA-GRS).
V případě výkonu klepněte na tlačítko Standard.
V části Vyžaduje se zabezpečený přenos vyberte Zakázáno.
V rozevírací nabídce Předplatné vyberte příslušné předplatné.
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ů.
Pokud se jedná o možnost pro vás, ponechte virtuální sítě jako zakázané .
Klikněte na Vytvořit.
Jakmile kliknete na Vytvořit, budete muset počkat, až se služba vytvoří, může to chvíli trvat.
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.
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.
Na stránce přehledu klikněte na pravé straně na Tabulky.
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.
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.
Po vytvoření nové tabulky ji uvidíte na stránce služby Table Service (dole).
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.
Otevřete Visual Studio.
V nabídce klikněte na Zobrazit>Průzkumníka cloudu.
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):
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.
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.
Tabulka se otevře uprostřed okna sady Visual Studio. Klikněte na ikonu tabulky s + (plus) na ní.
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.
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):
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.
Po dokončení klikněte na tlačítko OK.
Upozorňující
Ujistěte se, že jste změnili typ položek X, Y a Z na Double.
Všimněte si, že tabulka teď obsahuje řádek dat. Dalším kliknutím na + ikonu (plus) přidáte další entitu.
Vytvořte další vlastnost a nastavte hodnoty nové entity tak, aby odpovídaly níže uvedeným hodnotám.
Opakujte poslední krok a přidejte další entitu. Nastavte hodnoty pro tuto entitu na hodnoty uvedené níže.
Tabulka by teď měla vypadat jako dole.
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.
Otevřete Poznámkový blok (stiskněte klávesu Windows a zadejte poznámkový blok).
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" } } } }
Přihlaste se k webu Azure Portal.
Jakmile se přihlásíte, klikněte v levém horním rohu na Nový a vyhledejte aplikaci Function App, stiskněte Enter.
Poznámka:
Slovo Nový mohlo být nahrazeno vytvořením prostředku na novějších portálech.
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ě.
Po kliknutí na Vytvořit vyplňte následující:
Jako název aplikace vložte požadovaný název pro tuto instanci služby.
Vyberte nějaké předplatné.
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ň.
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ů.
V případě operačního systému klikněte na Windows, protože se jedná o zamýšlenou platformu.
Vyberte plán hostování (v tomto kurzu se používá plán Consumption).
Vyberte umístění (zvolte stejné umístění jako úložiště, které jste vytvořili v předchozím kroku).
V části Úložiště musíte vybrat službu úložiště, kterou jste vytvořili v předchozím kroku.
V této aplikaci nebudete potřebovat Application Insights , takže ji můžete nechat vypnutou.
Klikněte na Vytvořit.
Po kliknutí na Vytvořit budete muset počkat, až se služba vytvoří, může to chvíli trvat.
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.
Kliknutím na tlačítko Přejít k prostředku v oznámení můžete prozkoumat novou instanci služby.
Kliknutím na + ikonu (plus) vedle funkce vytvořte novou.
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).
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 .
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.
Zobrazí se okno HTTP PUT , kde je potřeba nakonfigurovat funkci (viz obrázek níže).
V rozevírací nabídce jazyka vyberte C#.
Jako název zadejte odpovídající název.
V rozevírací nabídce Úroveň ověřování vyberte Funkce.
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).
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ě.
Klikněte na Vytvořit a zobrazí se oznámení, že se vaše nastavení úspěšně aktualizovalo.
Po kliknutí na Vytvořit budete přesměrováni do editoru funkcí.
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.
S kódem na místě klikněte na Uložit.
Potom klikněte na < ikonu (šipka) na pravé straně stránky.
Panel se posune zprava. Na panelu klikněte na Nahrát a zobrazí se prohlížeč souborů.
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.
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).
Potom na panelu vlevo pod funkcí klikněte na odkaz Integrovat.
Na další stránce v pravém horním rohu klikněte na Rozšířený editor (jak je uvedeno níže).
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" } ] }
Editor by teď měl vypadat jako na následujícím obrázku:
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.
Zpátky v editoru Standard klikněte na Azure Table Storage (tabulka) v části Vstupy.
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):
Název tabulky: název tabulky, kterou jste vytvořili ve službě Azure Storage, Table Service.
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.
Vyberte svůj účet úložiště, který jste vytvořili dříve pro hostování aplikací Function Apps.
Všimněte si, že se vytvořila hodnota připojení účtu úložiště.
Až budete hotovi, nezapomeňte stisknout klávesu Uložit .
Stránka Vstupy by se teď měla shodovat s níže svojí informací.
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):
Název centra oznámení: toto je název vaší instance služby Notification Hub , kterou jste vytvořili dříve.
Připojení oboru názvů Notification Hubs: Klikněte na nový, který se zobrazí vedle rozevírací nabídky.
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.
V prostřední rozevírací nabídce vyberte název centra oznámení.
Nastavte rozevírací nabídku Zásady na DefaultFullSharedAccessSignature.
Kliknutím na tlačítko Vybrat se vrátíte zpět.
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ů.
V tomto okamžiku byste měli funkci otestovat, abyste měli jistotu, že funguje. Akce:
Přejděte ještě jednou na stránku funkce:
Zpátky na stránce funkce kliknutím na kartu Test na pravé straně stránky otevřete okno Test :
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 }
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.
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.
Otevřete Unity a klikněte na Nový.
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.
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.
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.
Zůstaňte v nastavení sestavení souborů>a ujistěte se, že:
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í.
Typ sestavení je nastavený na D3D.
Sada SDK je nastavená na nejnovější nainstalovanou verzi.
Verze sady Visual Studio je nastavená na nejnovější nainstalovanou verzi.
Sestavení a spuštění je nastavené na místní počítač.
I když je tady, stojí za to uložit scénu a přidat ji do sestavení.
Uděláte to tak, že vyberete Přidat otevřené scény. Zobrazí se okno pro uložení.
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.
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.
Zbývající nastavení v nastavení sestavení by teď měla zůstat ve výchozím nastavení.
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 .
Na tomto panelu je potřeba ověřit několik nastavení:
Na kartě Další nastavení:
Skriptovací verze modulu runtime by měla být experimentální (ekvivalent .NET 4.6)
Back-end skriptování by měl být .NET.
Úroveň kompatibility rozhraní API by měla být .NET 4.6
Na kartě Nastavení publikování v části Možnosti zaškrtněte:
InternetClient
Zpět v projektech Unity Nastavení sestavení v jazyce C# se už nezobrazuje šedě. Zaškrtněte políčko vedle tohoto příkazu.
Zavřete okno Nastavení sestavení.
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:
Přidejte do Unity balíček .unitypackage pomocí možnosti nabídky Vlastní balíček > importu prostředků>.
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.
Kliknutím na tlačítko Importovat přidáte položky do projektu.
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
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.
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í.
Ve složce modulu plug-in Storage vyberte pouze:
Microsoft.Data.Services.Client
Zaškrtněte políčko Nezpracovávejte v části Nastavení platformy a klikněte na Použít.
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:
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.
Poklikáním na právě vytvořenou složku otevřete.
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.
Poklikáním na skript ho otevřete v sadě Visual Studio 2017.
Přidejte následující obory názvů:
using Microsoft.WindowsAzure.Storage; using Microsoft.WindowsAzure.Storage.Auth; using Microsoft.WindowsAzure.Storage.Table; using UnityEngine;
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).
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(); }
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); }
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; } }
Než se vrátíte do Editoru Unity, nezapomeňte uložit .
Klikněte na hlavní kameru z panelu Hierarchie, aby se jeho vlastnosti zobrazily v inspektoru.
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í:
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:
Klikněte pravým tlačítkem do složky Skripty a klikněte na Příkaz Vytvořit, Skript jazyka C#. Pojmenujte skript CloudScene
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;
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;
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:
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(); }
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)); } }
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(); } }
Uložte kód a vraťte se do Unity.
Přetáhněte skript CloudScene na hlavní kameru.
Klikněte na hlavní kameru z panelu Hierarchie, aby se jeho vlastnosti zobrazily v inspektoru.
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í:
Kapitola 11 – Sestavení desktopového projektu do UPW
Všechno potřebné pro oddíl Unity tohoto projektu bylo dokončeno.
Přejděte na Nastavení sestavení (Nastavení sestavení souboru>).
V okně Nastavení sestavení klikněte na Sestavit.
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.
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.
Vyberte NH_Desktop_App. klikněte na Vybrat složku. Sestavení projektu bude trvat minutu nebo tak.
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.
Otevřete Unity a klikněte na Nový.
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.
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.
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řejděte do nastavení sestavení souborů>a ujistěte se, že:
Cílové zařízení je nastavené na libovolné zařízení.
Pro Microsoft HoloLens nastavte cílové zařízení na HoloLens.
Typ sestavení je nastavený na D3D.
Sada SDK je nastavená na nejnovější nainstalovanou verzi.
Verze sady Visual Studio je nastavená na nejnovější nainstalovanou verzi.
Sestavení a spuštění je nastavené na místní počítač.
I když je tady, stojí za to uložit scénu a přidat ji do sestavení.
Uděláte to tak, že vyberete Přidat otevřené scény. Zobrazí se okno pro uložení.
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.
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.
Zbývající nastavení v nastavení sestavení by teď měla zůstat ve výchozím nastavení.
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 .
Na tomto panelu je potřeba ověřit několik nastavení:
Na kartě Další nastavení:
Skriptovací verze modulu runtime by měla být experimentální (ekvivalent .NET 4.6)
Back-end skriptování by měl být .NET.
Úroveň kompatibility rozhraní API by měla být .NET 4.6
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 .
Na kartě Nastavení publikování v části Možnosti zaškrtněte:
InternetClient
Zpět v nastavení sestavení už projekty Unity C# nejsou šedě: zaškrtněte políčko vedle tohoto nastavení.
Po provedení těchto změn zavřete okno Nastavení sestavení.
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:
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ů.>
V okně Importovat balíček Unity, které se zobrazí, můžete vybrat vše v části Úložiště modulů plug-in>.
Kliknutím na tlačítko Importovat přidáte položky do projektu.
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
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.
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í.
Ve složce modulu plug-in Storage vyberte pouze:
Microsoft.Data.Services.Client
Zaškrtněte políčko Nezpracovávejte v části Nastavení platformy a klikněte na Použít.
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:
Klikněte pravým tlačítkem do složky Skripty a klikněte na Příkaz Vytvořit, Skript jazyka C#. Pojmenujte skript NotificationReceiver.
Poklikáním otevřete skript.
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
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-";
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).
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()); }
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; } } }
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; // } }
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; // } //}
Než se vrátíte do Unity Editoru, nezapomeňte změny uložit.
Klikněte na hlavní kameru z panelu Hierarchie, aby se jeho vlastnosti zobrazily v inspektoru.
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í:
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.
Přejděte na Nastavení sestavení (Nastavení sestavení souboru>).
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).
Po dokončení klikněte na Sestavit.
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.
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.
Vyberte NH_MR_App. klikněte na Vybrat složku. Sestavení projektu bude trvat minutu nebo tak.
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:
V Průzkumník řešení klikněte pravým tlačítkem na řešení.
Klikněte na Spravovat balíčky NuGet.
Vyberte kartu Procházet a vyhledejte WindowsAzure.Messaging.managed.
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 .
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.
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ří:
Obor názvů v horní části:
using Microsoft.WindowsAzure.Messaging;
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!).
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í.
Otevřete řešení.
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....
Zobrazí se nové okno s názvem Přidružit aplikaci k Windows Storu. Klikněte na tlačítko Další.
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.
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ší.
Klikněte na Přidružit.
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:
Otevřete soubor řešení aplikace UnityMRNotifHub v sadě Visual Studio 2017.
Na platformě řešení vyberte x86, místní počítač.
V konfiguraci řešení vyberte Ladit.
Přejděte do nabídky Sestavení a kliknutím na Nasadit řešení aplikaci načtěte do počítače bokem.
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:
Otevřete soubor řešení aplikace UnityDesktopNotifHub v sadě Visual Studio 2017.
Na platformě řešení vyberte x86, místní počítač.
V konfiguraci řešení vyberte Ladit.
Přejděte do nabídky Sestavení a kliknutím na Nasadit řešení aplikaci načtěte do počítače bokem.
Vaše aplikace by se teď měla zobrazit v seznamu nainstalovaných aplikací připravených ke spuštění.
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.
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?