注意

Mixed Reality Academy チュートリアルは、HoloLens (第1世代) と Mixed Reality イマーシブヘッドセットを念頭に置いて設計されています。The Mixed Reality Academy tutorials were designed with HoloLens (1st gen) and Mixed Reality Immersive Headsets in mind. そのため、これらのデバイスの開発に関するガイダンスをまだ探している開発者には、これらのチュートリアルを残しておくことが重要です。As such, we feel it is important to leave these tutorials in place for developers who are still looking for guidance in developing for those devices. これらのチュートリアルは いない 最新のツールセットや相互作用が使用されている HoloLens 2 で更新されます。These tutorials will not be updated with the latest toolsets or interactions being used for HoloLens 2. サポートされているデバイスでの作業を続行するために管理されます。They will be maintained to continue working on the supported devices. 今後、HoloLens 2 向けの開発方法を示す新しい一連のチュートリアルが掲載されています。There will be a new series of tutorials that will be posted in the future that will demonstrate how to develop for HoloLens 2. この通知は、これらのチュートリアルが投稿されたときのリンクと共に更新されます。This notice will be updated with a link to those tutorials when they are posted.


MR と Azure 308:デバイス間の通知MR and Azure 308: Cross-device notifications

最終製品-開始

このコースでは、Azure Notification Hubs、Azure テーブル、および Azure Functions を使用して、Notification Hubs 機能を mixed reality アプリケーションに追加する方法について説明します。In this course, you will learn how to add Notification Hubs capabilities to a mixed reality application using Azure Notification Hubs, Azure Tables, and Azure Functions.

Azure Notification Hubsは Microsoft のサービスであり、開発者は、クラウド内のすべてのプラットフォームにおいて、対象となるパーソナライズされたプッシュ通知を任意のプラットフォームに送信できます。Azure Notification Hubs is a Microsoft service, which allows developers to send targeted and personalized push notifications to any platform, all powered within the cloud. これにより、開発者はシナリオに応じて、エンドユーザーと通信したり、さまざまなアプリケーション間で通信したりできるようになります。This can effectively allow developers to communicate with end users, or even communicate between various applications, depending on the scenario. 詳細については、 Azure Notification Hubsページを参照してください。For more information, visit the Azure Notification Hubs page.

Azure Functionsは Microsoft のサービスであり、開発者は Azure で小さなコードである "Functions" を実行できます。Azure Functions is a Microsoft service, which allows developers to run small pieces of code, 'functions', in Azure. これにより、ローカルアプリケーションではなく、クラウドに作業を委任することができます。これには多くのメリットがあります。This provides a way to delegate work to the cloud, rather than your local application, which can have many benefits. Azure Functionsは、C#、F#、node.js、Java、PHP など、いくつかの開発言語をサポートしています。Azure Functions supports several development languages, including C#, F#, Node.js, Java, and PHP. 詳細については、 Azure Functionsページを参照してください。For more information, visit the Azure Functions page.

Azure テーブルは Microsoft のクラウドサービスであり、開発者は構造化されていない SQL データをクラウドに保存できるため、どこからでも簡単にアクセスできます。Azure Tables is a Microsoft cloud service, which allows developers to store structured non-SQL data in the cloud, making it easily accessible anywhere. このサービスでは、必要に応じてテーブルを進化させることができるため、スキーマなしの設計が非常に優れているため、非常に柔軟性があります。The service boasts a schemaless design, allowing for the evolution of tables as needed, and thus is very flexible. 詳細については、 Azure のテーブルに関するページを参照してください。For more information, visit the Azure Tables page

このコースを完了すると、現実のイマーシブヘッドセットアプリケーションと、次のようなデスクトップ PC アプリケーションを使用できるようになります。Having completed this course, you will have a mixed reality immersive headset application, and a Desktop PC application, which will be able to do the following:

  1. デスクトップ PC アプリを使用すると、ユーザーはマウスを使用して、2D 空間 (X および Y) 内のオブジェクトを移動できます。The Desktop PC app will allow the user to move an object in 2D space (X and Y), using the mouse.

  2. PC アプリ内のオブジェクトの移動は、JSON を使用してクラウドに送信されます。 JSON は、オブジェクト ID、型、および変換情報 (X および Y 座標) を含む文字列の形式になります。The movement of objects within the PC app will be sent to the cloud using JSON, which will be in the form of a string, containing an object ID, type, and transform information (X and Y coordinates).

  3. デスクトップアプリと同一のシーンを持つ mixed reality アプリは、Notification Hubs サービス (デスクトップ PC アプリによって更新されたばかり) から、オブジェクトの移動に関する通知を受け取ります。The mixed reality app, which has an identical scene to the desktop app, will receive notifications regarding object movement, from the Notification Hubs service (which has just been updated by the Desktop PC app).

  4. オブジェクト ID、種類、および変換情報が含まれる通知を受け取ると、mixed reality アプリによって、受信した情報が独自のシーンに適用されます。Upon receiving a notification, which will contain the object ID, type, and transform information, the mixed reality app will apply the received information to its own scene.

アプリケーションでは、結果をデザインと統合する方法については、お客様のニーズに合わせてください。In your application, it is up to you as to how you will integrate the results with your design. このコースは、Azure サービスを Unity プロジェクトと統合する方法を説明することを目的としています。This course is designed to teach you how to integrate an Azure Service with your Unity Project. このコースで得られた知識を使用して、mixed reality アプリケーションを強化することができます。It is your job to use the knowledge you gain from this course to enhance your mixed reality application. このコースは自己完結型のチュートリアルであり、他の Mixed Reality ラボに直接は関与しません。This course is a self-contained tutorial, which does not directly involve any other Mixed Reality Labs.

デバイスのサポートDevice support

までCourse HoloLensHoloLens イマーシブ ヘッドセットImmersive headsets
MR と Azure 308:デバイス間の通知MR and Azure 308: Cross-device notifications ✔️✔️ ✔️✔️

注意

このコースでは主に Windows Mixed Reality イマーシブ (VR) ヘッドセットに焦点を当てていますが、このコースで学習した内容を Microsoft HoloLens に適用することもできます。While this course primarily focuses on Windows Mixed Reality immersive (VR) headsets, you can also apply what you learn in this course to Microsoft HoloLens. このコースに従うと、HoloLens をサポートするために必要となる可能性のある変更に関する注意事項が表示されます。As you follow along with the course, you will see notes on any changes you might need to employ to support HoloLens. HoloLens を使用する場合、音声キャプチャ中にエコーが発生することがあります。When using HoloLens, you may notice some echo during voice capture.

必須コンポーネントPrerequisites

注意

このチュートリアルは、Unity とC#の基本的な経験を持つ開発者向けに設計されています。This tutorial is designed for developers who have basic experience with Unity and C#. また、このドキュメントに記載されている前提条件と記述に記載されている手順は、作成時にテストおよび検証されたものを表します (2018 年5月)。Please also be aware that the prerequisites and written instructions within this document represent what has been tested and verified at the time of writing (May 2018). ツールのインストール」の記事に記載されているように、最新のソフトウェアを自由に使用できます。ただし、このコースの情報は、以下に記載されているものよりも新しいソフトウェアで見つかったものと完全に一致するとは限りません。You are free to use the latest software, as listed within the install the tools article, though it should not be assumed that the information in this course will perfectly match what you'll find in newer software than what's listed below.

このコースでは、次のハードウェアとソフトウェアをお勧めします。We recommend the following hardware and software for this course:

開始前の準備Before you start

  • このプロジェクトのビルドで問題が発生しないように、このチュートリアルで説明されているプロジェクトをルートまたはほぼルートフォルダーに作成することを強くお勧めします (長いフォルダーパスはビルド時に問題を引き起こす可能性があります)。To avoid encountering issues building this project, it is strongly suggested that you create the project mentioned in this tutorial in a root or near-root folder (long folder paths can cause issues at build-time).
  • Microsoft 開発者ポータルとアプリケーション登録ポータルの所有者である必要があります。そうしないと、第2章でアプリにアクセスするためのアクセス許可が付与されません。You must be the owner of your Microsoft Developer Portal and your Application Registration Portal, otherwise you will not have permission to access the app in Chapter 2.

章 1-Microsoft 開発者ポータルでアプリケーションを作成するChapter 1 - Create an application on the Microsoft Developer Portal

Azure Notification Hubsサービスを使用するには、アプリケーションを登録する必要があるため、Microsoft 開発者ポータルでアプリケーションを作成する必要があります。これにより、アプリケーションは通知を送受信できるようになります。To use the Azure Notification Hubs Service, you will need to create an Application on the Microsoft Developer Portal, as your application will need to be registered, so that it can send and receive notifications.

  1. Microsoft 開発者ポータルにログインします。Log in to the Microsoft Developer Portal.

    Microsoft アカウントにログインする必要があります。You will need to log in to your Microsoft Account.

  2. ダッシュボードで、 [新しいアプリの作成] をクリックします。From the Dashboard, click Create a new app.

    アプリを作成する

  3. ポップアップが表示され、新しいアプリの名前を予約する必要があります。A popup will appear, wherein you need to reserve a name for your new app. テキストボックスに、適切な名前を挿入します。選択した名前が使用可能な場合は、テキストボックスの右側にティックが表示されます。In the textbox, insert an appropriate name; if the chosen name is available, a tick will appear to the right of the textbox. 使用可能な名前が挿入されたら、ポップアップの下左側にある [製品名の予約] ボタンをクリックします。Once you have an available name inserted, click the Reserve product name button to the bottom left of the popup.

    名前を反転する

  4. これでアプリが作成されたので、次の章に進むことができます。With the app now created, you are ready to move to the next Chapter.

Chapter 2-新しいアプリの資格情報を取得するChapter 2 - Retrieve your new apps credentials

新しいアプリが一覧表示されるアプリケーション登録ポータルにログインし、 Azure Portal内でNotification Hubs サービスをセットアップするために使用される資格情報を取得します。Log into the Application Registration Portal, where your new app will be listed, and retrieve the credentials which will be used to setup the Notification Hubs Service within the Azure Portal.

  1. アプリケーション登録ポータルに移動します。Navigate to the Application Registration Portal.

    アプリケーション登録ポータル

    警告

    ログインするには、Microsoft アカウントを使用する必要があります。You will need to use your Microsoft Account to Login.
    これは、Windows ストア開発者ポータルを使用して、前ので使用した Microsoft アカウントである必要があります。This must be the Microsoft Account which you used in the previous Chapter, with the Windows Store Developer portal.

  2. アプリは [マイアプリケーション] セクションに表示されます。You will find your app under the My applications section. 見つかったら、それをクリックすると、アプリ名と登録を含む新しいページが表示されます。Once you have found it, click on it and you will be taken to a new page which has the app name plus Registration.

    新しく登録されたアプリ

  3. 登録ページを下にスクロールして、アプリケーションのシークレットセクションとアプリのパッケージ SIDを探します。Scroll down the registration page to find your Application Secrets section and the Package SID for your app. 次の章のAzure Notification Hubs サービスの設定で使用するために両方をコピーします。Copy both for use with setting up the Azure Notification Hubs Service in the next Chapter.

    アプリケーションシークレット

章 3-Azure Portal のセットアップ: Notification Hubs サービスの作成Chapter 3 - Setup Azure Portal: create Notification Hubs Service

アプリの資格情報を取得したら、azure ポータルに移動する必要があります。ここでは、Azure Notification Hubs サービスを作成します。With your apps credentials retrieved, you will need to go to the Azure Portal, where you will create an Azure Notification Hubs Service.

  1. Azure ポータル にログインします。Log into the Azure Portal.

    注意

    まだ Azure アカウントを持っていない場合は、アカウントを作成する必要があります。If you do not already have an Azure account, you will need to create one. このチュートリアルを教室またはラボの状況で行っている場合は、新しいアカウントの設定について、インストラクターまたはそのいずれかの対処を依頼してください。If you are following this tutorial in a classroom or lab situation, ask your instructor or one of the proctors for help setting up your new account.

  2. ログインしたら、左上隅にある [新規] をクリックし、 [Notification Hub] を検索して、 Enter キーを押します。Once you are logged in, click on New in the top left corner, and search for Notification Hub, and click Enter.

    notification hub の検索

    注意

    新しいポータルで、 Newという単語がリソースの作成に置き換えられました。The word New may have been replaced with Create a resource, in newer portals.

  3. 新しいページには、 Notification Hubsサービスの説明が表示されます。The new page will provide a description of the Notification Hubs service. このプロンプトの左下にある [作成] ボタンを選択して、このサービスとの関連付けを作成します。At the bottom left of this prompt, select the Create button, to create an association with this service.

    notification hub インスタンスの作成

  4. 作成:Once you have clicked on Create:

    1. このサービスインスタンスに必要な名前を挿入します。Insert your desired name for this service instance.

    2. このアプリに関連付けることができる名前空間を指定します。Provide a namespace which you will be able to associate with this app.

    3. 場所を選択します。Select a Location.

    4. リソースグループを選択するか、新しいリソースグループを作成します。Choose a Resource Group or create a new one. リソースグループは、Azure 資産のコレクションの課金を監視、制御する方法を提供します。A resource group provides a way to monitor, control access, provision and manage billing for a collection of Azure assets. 1つのプロジェクトに関連付けられているすべての Azure サービス (たとえば、これらのラボなど) を共通のリソースグループに保持することをお勧めします。It is recommended to keep all the Azure services associated with a single project (e.g. such as these labs) under a common resource group).

      Azure リソースグループの詳細については、リソースグループの管理方法に関するリンクを参照してください。If you wish to read more about Azure Resource Groups, please follow this link on how to manage a Resource Group.

    5. 適切なサブスクリプションを選択します。Select an appropriate Subscription.

    6. また、このサービスに適用されている使用条件を理解していることを確認する必要があります。You will also need to confirm that you have understood the Terms and Conditions applied to this Service.

    7. [作成] を選択します。Select Create.

      サービスの詳細を入力

  5. [作成] をクリックした後、サービスが作成されるまで待機する必要があります。これには1分かかることがあります。Once you have clicked on Create, you will have to wait for the service to be created, this might take a minute.

  6. サービスインスタンスが作成されると、ポータルに通知が表示されます。A notification will appear in the portal once the Service instance is created.

    通知 (notification)

  7. 通知の [リソースへのジャンプ] ボタンをクリックして、新しいサービスインスタンスを探索します。Click the Go to resource button in the notification to explore your new Service instance. 新しいNotification Hubサービスインスタンスが表示されます。You will be taken to your new Notification Hub service instance.

    リソースにアクセス

  8. ページの中央にある 概要 ページで、 Windows (WNS) をクリックします。From the overview page, halfway down the page, click Windows (WNS). 右側のパネルが変更され、以前に設定したアプリから、パッケージ SIDセキュリティキーを必要とする2つのテキストフィールドが表示されるようになります。The panel on the right will change to show two text fields, which require your Package SID and Security Key, from the app you set up previously.

    新しく作成されたハブサービス

  9. 詳細を正しいフィールドにコピーしたら、 [保存] をクリックすると、通知ハブが正常に更新されたときに通知が表示されます。Once you have copied the details into the correct fields, click Save, and you will receive a notification when the Notification Hub has been successfully updated.

    セキュリティの詳細をコピーする

第4章-Azure Portal のセットアップ: create Table ServiceChapter 4 - Setup Azure Portal: create Table Service

Notification Hubs サービスインスタンスを作成したら、Azure Portal に戻ります。ここでは、ストレージリソースを作成して Azure Tables Service を作成します。After creating your Notification Hubs Service instance, navigate back to your Azure Portal, where you will create an Azure Tables Service by creating a Storage Resource.

  1. まだサインインしていない場合は、 Azure Portalにログインします。If not already signed in, log into the Azure Portal.

  2. ログインしたら、左上隅にある [新規] をクリックし、 [ストレージアカウント] を検索して、 Enter キーを押します。Once logged in, click on New in the top left corner, and search for Storage account, and click Enter.

    注意

    新しいポータルで、 Newという単語がリソースの作成に置き換えられました。The word New may have been replaced with Create a resource, in newer portals.

  3. 一覧から [ストレージアカウント-blob、file、table、queue] を選択します。Select Storage account - blob, file, table, queue from the list.

    ストレージアカウントの検索

  4. 新しいページには、ストレージアカウントサービスの説明が表示されます。The new page will provide a description of the Storage account service. このプロンプトの左下にある [作成] ボタンを選択して、このサービスのインスタンスを作成します。At the bottom left of this prompt, select the Create button, to create an instance of this service.

    ストレージインスタンスの作成

  5. [作成] をクリックすると、パネルが表示されます。Once you have clicked on Create, a panel will appear:

    1. このサービスインスタンスに必要な名前を挿入します (すべて小文字にする必要があります)。Insert your desired Name for this service instance (must be all lowercase).

    2. [デプロイモデル] で、 [リソースマネージャー] をクリックします。For Deployment model, click Resource manager.

    3. [アカウントの種類] で、ドロップダウンメニューを使用して、 [ストレージ (汎用 v1)] を選択します。For Account kind, using the dropdown menu, select Storage (general purpose v1).

    4. 適切な場所を選択します。Select an appropriate Location.

    5. [レプリケーション] ドロップダウンメニューで、 [読み取りアクセス-geo 冗長ストレージ (RA-GRS)] を選択します。For the Replication dropdown menu, select Read-access-geo-redundant storage (RA-GRS).

    6. [パフォーマンス][標準] をクリックします。For Performance, click Standard.

    7. [安全な転送が必要] セクションで、 [無効] を選択します。Within the Secure transfer required section, select Disabled.

    8. [サブスクリプション] ドロップダウンメニューから、適切なサブスクリプションを選択します。From the Subscription dropdown menu, select an appropriate subscription.

    9. リソースグループを選択するか、新しいリソースグループを作成します。Choose a Resource Group or create a new one. リソースグループは、Azure 資産のコレクションの課金を監視、制御する方法を提供します。A resource group provides a way to monitor, control access, provision and manage billing for a collection of Azure assets. 1つのプロジェクトに関連付けられているすべての Azure サービス (たとえば、これらのラボなど) を共通のリソースグループに保持することをお勧めします。It is recommended to keep all the Azure services associated with a single project (e.g. such as these labs) under a common resource group).

      Azure リソースグループの詳細については、リソースグループの管理方法に関するリンクを参照してください。If you wish to read more about Azure Resource Groups, please follow this link on how to manage a Resource Group.

    10. このオプションが選択されている場合は、仮想ネットワーク を 無効 のままします。Leave Virtual networks as Disabled if this is an option for you.

    11. [作成] をクリックします。Click Create.

      ストレージの詳細の入力

  6. [作成] をクリックした後、サービスが作成されるまで待機する必要があります。これには1分かかることがあります。Once you have clicked on Create, you will have to wait for the service to be created, this might take a minute.

  7. サービスインスタンスが作成されると、ポータルに通知が表示されます。A notification will appear in the portal once the Service instance is created. 通知をクリックして、新しいサービスインスタンスを探索します。Click on the notifications to explore your new Service instance.

    新しいストレージ通知

  8. 通知の [リソースへのジャンプ] ボタンをクリックして、新しいサービスインスタンスを探索します。Click the Go to resource button in the notification to explore your new Service instance. 新しいストレージサービスインスタンスの概要ページが表示されます。You will be taken to your new Storage Service instance overview page.

    リソースにアクセス

  9. 概要 ページで、右側にある テーブル をクリックします。From the overview page, to the right-hand side, click Tables.

  10. 右側のパネルが変化し、 Table service情報が表示されます。新しいテーブルを追加する必要があります。The panel on the right will change to show the Table service information, wherein you need to add a new table. これを行うには + 、左上隅にある [テーブル] ボタンをクリックします。Do this by clicking the + Table button to the top-left corner.

    テーブルを開く

  11. 新しいページが表示されます。ここには、テーブル名を入力する必要があります。A new page will be shown, wherein you need to enter a Table name. これは、後の章でアプリケーション内のデータを参照するために使用する名前です。This is the name you will use to refer to the data in your application in later Chapters. 適切な名前を挿入し、[ OK] をクリックします。Insert an appropriate name and click OK.

    新しいテーブルの作成

  12. 新しいテーブルが作成されると、 [Table service] ページ (下部) に表示されるようになります。Once the new table has been created, you will be able to see it within the Table service page (at the bottom).

    新しいテーブルが作成されました

第5章-Visual Studio での Azure テーブルの完成Chapter 5 - Completing the Azure Table in Visual Studio

Table serviceストレージアカウントがセットアップされたので、それにデータを追加します。これは、情報の格納と取得に使用されます。Now that your Table service storage account has been setup, it is time to add data to it, which will be used to store and retrieve information. テーブルの編集は、 Visual Studioを使用して行うことができます。The editing of your Tables can be done through Visual Studio.

  1. Visual Studioを開きます。Open Visual Studio.

  2. メニューの [Cloud Explorer表示 > ] をクリックします。From the menu, click View > Cloud Explorer.

    cloud explorer を開く

  3. Cloud Explorerがドッキングされたアイテムとして開きます (読み込みに時間がかかる場合があります)。The Cloud Explorer will open as a docked item (be patient, as loading may take time).

    注意

    ストレージアカウントの作成に使用したサブスクリプションが表示されない場合は、次のことを確認してください。If the Subscription you used to create your Storage Accounts is not visible, ensure that you have:

    • Azure Portal で使用したものと同じアカウントにログインします。Logged in to the same account as the one you used for the Azure Portal.

    • [アカウント管理] ページからサブスクリプションを選択しました (アカウントの設定からフィルターを適用する必要がある場合があります)。Selected your Subscription from the Account Management Page (you may need to apply a filter from your account settings):

      サブスクリプションの検索

  4. Azure cloud services が表示されます。Your Azure cloud services will be shown. ストレージアカウントを検索し、左側の矢印をクリックしてアカウントを展開します。Find Storage Accounts and click the arrow to the left of that to expand your accounts.

    ストレージアカウントを開く

  5. 展開されると、新しく作成されたストレージアカウントを使用できるようになります。Once expanded, your newly created Storage account should be available. ストレージの左側にある矢印をクリックし、展開された後、 [テーブル] を見つけて、その横にある矢印をクリックし、最後の章で作成したテーブルを表示します。Click the arrow to the left of your storage, and then once that is expanded, find Tables and click the arrow next to that, to reveal the Table you created in the last Chapter. テーブルをダブルクリックします。Double click your Table.

    シーンオブジェクトテーブルを開く

  6. テーブルが Visual Studio ウィンドウの中央に開きます。Your table will be opened in the center of your Visual Studio window. [テーブル] アイコン + をクリックします。Click the table icon with the + (plus) on it.

    新しいテーブルの追加

  7. エンティティの追加を求めるウィンドウが表示されます。A window will appear prompting for you to Add Entity. 合計3つのエンティティを作成し、それぞれに複数のプロパティを付けます。You will create three entities in total, each with several properties. PartitionkeyRowKeyは既に提供されています。これは、テーブルがデータを検索するために使用されるためです。You will notice that PartitionKey and RowKey are already provided, as these are used by the table to find your data.

    パーティションキーと行キー

  8. PartitionkeyRowKeyを次のように更新します (追加する行プロパティごとにこの操作を行ってください。ただし、RowKey は毎回インクリメントします)。Update the Value of the PartitionKey and RowKey as follows (remember to do this for each row property you add, though increment the RowKey each time):

    正しい値の追加

  9. [プロパティの追加] をクリックして、余分な行のデータを追加します。Click Add property to add extra rows of data. 最初の空のテーブルを次の表のようにします。Make your first empty table match the below table.

  10. 完了したら [ OK] をクリックします。Click OK when you are finished.

    完了したら [ok] をクリックします。

    警告

    XYZの各エントリの種類Doubleに変更したことを確認します。Ensure that you have changed the Type of the X, Y, and Z, entries to Double.

  11. テーブルにデータ行があることがわかります。You will notice your table now has a row of data. (プラス + ) アイコンをもう一度クリックして、別のエンティティを追加します。Click the + (plus) icon again to add another entity.

    最初の行

  12. 追加のプロパティを作成し、次に示すように新しいエンティティの値を設定します。Create an additional property, and then set the values of the new entity to match those shown below.

    キューブの追加

  13. 別のエンティティを追加するには、最後の手順を繰り返します。Repeat the last step to add another entity. このエンティティの値を次に示すように設定します。Set the values for this entity to those shown below.

    円柱の追加

  14. テーブルは次のようになります。Your table should now look like the one below.

    テーブルの完了

  15. これで、この章は終了です。You have completed this Chapter. 必ず保存してください。Make sure to save.

第6章-Azure Function App の作成Chapter 6 - Create an Azure Function App

Azure Function App を作成します。これは、デスクトップアプリケーションによって呼び出され、テーブルサービスを更新し、通知ハブを介して通知を送信します。Create an Azure Function App, which will be called by the Desktop application to update the Table service and send a notification through the Notification Hub.

まず、必要なライブラリを Azure 関数で読み込むことができるファイルを作成する必要があります。First, you need to create a file that will allow your Azure Function to load the libraries you need.

  1. メモ帳を開きます (Windows キーを押し、メモ帳を入力します)。Open Notepad (press Windows Key and type notepad).

    メモ帳を開く

  2. メモ帳を開いた状態で、次の JSON 構造を挿入します。With Notepad open, insert the JSON structure below into it. その作業が完了したら、それをデスクトップにプロジェクトの jsonとして保存します。Once you have done that, save it on your desktop as project.json. 名前が .txt ファイル拡張子を持たないことを確認することが重要です。It is important that the naming is correct: ensure it does NOT have a .txt file extension. このファイルは、関数が使用するライブラリを定義します。 NuGet を使用している場合は、見慣れたものになります。This file defines the libraries your function will use, if you have used NuGet it will look familiar.

    {
    "frameworks": {
        "net46":{
        "dependencies": {
            "WindowsAzure.Storage": "7.0.0",
            "Microsoft.Azure.NotificationHubs" : "1.0.9",
            "Microsoft.Azure.WebJobs.Extensions.NotificationHubs" :"1.1.0"
        }
        }
    }
    }
    
  3. Azure ポータル にログインします。Log in to the Azure Portal.

  4. ログインしたら、左上隅にある [新規] をクリックし、 Function Appを検索して、 enter キーを押します。Once you are logged in, click on New in the top left corner, and search for Function App, press Enter.

    function app の検索

    注意

    新しいポータルで、 Newという単語がリソースの作成に置き換えられました。The word New may have been replaced with Create a resource, in newer portals.

  5. 新しいページには、 Function Appサービスの説明が表示されます。The new page will provide a description of the Function App service. このプロンプトの左下にある [作成] ボタンを選択して、このサービスとの関連付けを作成します。At the bottom left of this prompt, select the Create button, to create an association with this service.

    function app インスタンス

  6. [作成] をクリックしたら、次のように入力します。Once you have clicked on Create, fill in the following:

    1. [アプリ名] に、このサービスインスタンスに必要な名前を挿入します。For App name, insert your desired name for this service instance.

    2. サブスクリプションを選択します。Select a Subscription.

    3. 適切な価格レベルを選択してください。 Function App サービスを初めて作成する場合は、free レベルをご利用いただけます。Select the pricing tier appropriate for you, if this is the first time creating a Function App Service, a free tier should be available to you.

    4. リソースグループを選択するか、新しいリソースグループを作成します。Choose a Resource Group or create a new one. リソースグループは、Azure 資産のコレクションの課金を監視、制御する方法を提供します。A resource group provides a way to monitor, control access, provision and manage billing for a collection of Azure assets. 1つのプロジェクトに関連付けられているすべての Azure サービス (たとえば、これらのラボなど) を共通のリソースグループに保持することをお勧めします。It is recommended to keep all the Azure services associated with a single project (e.g. such as these labs) under a common resource group).

      Azure リソースグループの詳細については、リソースグループの管理方法に関するリンクを参照してください。If you wish to read more about Azure Resource Groups, please follow this link on how to manage a Resource Group.

    5. OSの場合は、[Windows] をクリックします。これは目的のプラットフォームです。For OS, click Windows, as that is the intended platform.

    6. ホスティングプランを選択します (このチュートリアルでは、従量課金プランを使用しています。Select a Hosting Plan (this tutorial is using a Consumption Plan.

    7. 場所を選択します (前の手順で作成したストレージと同じ場所を選択します)。Select a Location (choose the same location as the storage you have built in the previous step)

    8. [ストレージ] セクションでは、前の手順で作成したストレージサービスを選択する必要があります。For the Storage section, you must select the Storage Service you created in the previous step.

    9. このアプリでApplication Insightsは必要ありません。そのままにしておいてもかまいません。You will not need Application Insights in this app, so feel free to leave it Off.

    10. [作成] をクリックします。Click Create.

      新しいインスタンスの作成

  7. [作成] をクリックすると、サービスが作成されるまで待機する必要があります。これには1分かかることがあります。Once you have clicked on Create you will have to wait for the service to be created, this might take a minute.

  8. サービスインスタンスが作成されると、ポータルに通知が表示されます。A notification will appear in the portal once the Service instance is created.

    新しい通知

  9. 通知をクリックして、新しいサービスインスタンスを探索します。Click on the notifications to explore your new Service instance.

  10. 通知の [リソースへのジャンプ] ボタンをクリックして、新しいサービスインスタンスを探索します。Click the Go to resource button in the notification to explore your new Service instance.

    リソースにアクセス

  11. [関数 + ] の横にある (プラス記号) アイコンをクリックして、新しいを作成します。Click the + (plus) icon next to Functions, to Create new.

    新しい関数の追加

  12. 中央のパネル内に [関数の作成] ウィンドウが表示されます。Within the central panel, the Function creation window will appear. パネルの上半分にある情報を無視し、カスタム関数 をクリックします。 カスタム関数 は、下部 (青い領域) の近くにあります。Ignore the information in the upper half of the panel, and click Custom function, which is located near the bottom (in the blue area, as below).

    カスタム関数

  13. ウィンドウ内の新しいページには、さまざまな関数の種類が表示されます。The new page within the window will show various function types. 下にスクロールして紫色の種類を表示し、[ HTTP PUT要素] をクリックします。Scroll down to view the purple types, and click HTTP PUT element.

    http put リンク

    重要

    ページの下にスクロールする必要がある場合があります (Azure Portal の更新が実行されている場合、このイメージは正確には見えない可能性があります)。ただし、 HTTP PUTという要素を探している場合もあります。You may have to scroll further the down the page (and this image may not look exactly the same, if Azure Portal updates have taken place), however, you are looking for an element called HTTP PUT.

  14. [HTTP PUT] ウィンドウが表示されます。ここで、関数を構成する必要があります (イメージについては以下を参照してください)。The HTTP PUT window will appear, where you need to configure the function (see below for image).

    1. [言語] で、ドロップダウンメニューを使用#して [C] を選択します。For Language, using the dropdown menu, select C#.

    2. [名前] には、適切な名前を入力します。For Name, input an appropriate name.

    3. [認証レベル] ドロップダウンメニューで、 [関数] を選択します。In the Authentication level dropdown menu, select Function.

    4. [テーブル名] セクションでは、以前にテーブルサービスの作成に使用したのと同じ名前を使用する必要があります (同じ大文字小文字を含む)。For the Table name section, you need to use the exact name you used to create your Table service previously (including the same letter case).

    5. [ストレージアカウント接続] セクションで、ドロップダウンメニューを使用して、そこからストレージアカウントを選択します。Within the Storage account connection section, use the dropdown menu, and select your storage account from there. 表示されていない場合は、セクションタイトルと共に新しいハイパーリンクをクリックして、ストレージアカウントが表示される別のパネルを表示します。If it is not there, click the New hyperlink alongside the section title, to show another panel, where your storage account should be listed.

      新しいストレージ

  15. [作成] をクリックすると、設定が正常に更新されたことを示す通知が表示されます。Click Create and you will receive a notification that your settings have been updated successfully.

    関数の作成

  16. [作成] をクリックすると、関数エディターにリダイレクトされます。After clicking Create, you will be redirected to the function editor.

    関数コードの更新

  17. 関数エディターに次のコードを挿入します (関数内のコードを置き換えます)。Insert the following code into the function editor (replacing the code in the function):

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

    注意

    関数は、含まれているライブラリを使用して、Unity シーンで移動されたオブジェクトの名前と場所C#を、 unityのオブジェクトと呼ばれるオブジェクトとして受け取ります。Using the included libraries, the function receives the name and location of the object which was moved in the Unity scene (as a C# object, called UnityGameObject). このオブジェクトは、作成されたテーブル内のオブジェクトパラメーターを更新するために使用されます。This object is then used to update the object parameters within the created table. 次に、この関数は、作成された通知ハブサービスを呼び出します。これにより、すべてのサブスクライブ済みアプリケーションが通知されます。Following this, the function makes a call to your created Notification Hub service, which notifies all subscribed applications.

  18. コードを配置したら、 [保存] をクリックします。With the code in place, click Save.

  19. 次に、ページ < の右側にある (矢印) アイコンをクリックします。Next, click the < (arrow) icon, on the right-hand side of the page.

    アップロードパネルを開く

  20. パネルが右側からスライドします。A panel will slide in from the right. そのパネルで [アップロード] をクリックすると、ファイルブラウザーが表示されます。In that panel, click Upload, and a File Browser will appear.

  21. 前のメモ帳で作成したプロジェクトの jsonファイルに移動し、 [開く] ボタンをクリックします。Navigate to, and click, the project.json file, which you created in Notepad previously, and then click the Open button. このファイルは、関数が使用するライブラリを定義します。This file defines the libraries that your function will use.

    json のアップロード

  22. ファイルがアップロードされると、右側のパネルに表示されます。When the file has uploaded, it will appear in the panel on the right. このボタンをクリックすると、関数エディター内で開かれます。Clicking it will open it within the Function editor. この値は、次のイメージとまったく同じである必要があります (手順23以降)。It must look exactly the same as the next image (below step 23).

  23. 次に、左側のパネルの [Functions] の下にある [統合] リンクをクリックします。Then, in the panel on the left, beneath Functions, click the Integrate link.

    integration 関数

  24. 次のページの右上隅にある [詳細エディター] (次の手順を参照) をクリックします。On the next page, in the top right corner, click Advanced editor (as below).

    詳細エディターの起動

  25. 関数の jsonファイルが中央のパネルで開き、次のコードスニペットで置き換える必要があります。A function.json file will be opened in the center panel, which needs to be replaced with the following code snippet. これにより、ビルドする関数と、関数に渡されるパラメーターが定義されます。This defines the function you are building and the parameters passed into the function.

    {
    "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. エディターは次の図のようになります。Your editor should now look like the image below:

    標準エディターに戻る

  27. 先ほど挿入した入力パラメーターがテーブルとストレージの詳細と一致しないため、情報を更新する必要があることがわかります。You may notice the input parameters that you have just inserted might not match your table and storage details and therefore will need to be updated with your information. 次に説明するように、ここではこの操作を行わないでください。Do not do this here, as it is covered next. ページの右上隅にある標準のエディターのリンクをクリックするだけで、戻ることができます。Simply click the Standard editor link, in the top-right corner of the page, to go back.

  28. 標準エディターに戻り、 [入力] の下にある [Azure Table Storage (テーブル)] をクリックします。Back in the Standard editor, click Azure Table Storage (table), under Inputs.

    テーブルの入力

  29. 次の手順に従って、異なる可能性があるため 、情報に対して次の一致があることを確認します。Ensure the following match to your information, as they may be different (there is an image below the following steps):

    1. テーブル名: Azure Storage テーブルサービス内で作成したテーブルの名前。Table name: the name of the table you created within your Azure Storage, Tables service.

    2. ストレージアカウント接続: ドロップダウンメニューと共に表示される [新規] をクリックすると、ウィンドウの右側にパネルが表示されます。Storage account connection: click new, which appears alongside the dropdown menu, and a panel will appear to the right of the window.

      新しいストレージ

      1. 以前に関数アプリをホストするために作成したストレージアカウントを選択します。Select your Storage Account, which you created previously to host the Function Apps.

      2. ストレージアカウントの接続値が作成されていることがわかります。You will notice that the Storage Account connection value has been created.

      3. 完了したら、必ず 保存してください。Make sure to press Save once you are done.

    3. 入力ページが次のようになり 、情報が表示されます。The Inputs page should now match the below, showing your information.

      入力の完了

  30. 次に、 [出力][Azure notification Hub (通知)] をクリックします。Next, click Azure Notification Hub (notification) - under Outputs. 次のものが異なる可能性があるため、以下の内容が情報と一致していることを確認してください (次の手順の下に画像があります)。Ensure the following are matched to your information, as they may be different (there is an image below the following steps):

    1. Notification Hub 名: これは、前に作成したnotification hubサービスインスタンスの名前です。Notification Hub Name: this is the name of your Notification Hub service instance, which you created previously.

    2. Notification Hubs 名前空間接続: ドロップダウンメニューと共に表示される 新規 をクリックします。Notification Hubs namespace connection: click new, which appears alongside the dropdown menu.

      出力の確認

    3. 接続ポップアップが表示されます (下図を参照)。ここでは、以前に設定した通知ハブ名前空間を選択する必要があります。The Connection popup will appear (see image below), where you need to select the Namespace of the Notification Hub, which you set up previously.

    4. 中央のドロップダウンメニューから通知ハブ名を選択します。Select your Notification Hub name from the middle dropdown menu.

    5. [ポリシー] ドロップダウンメニューをDefaultfullsharedaccesssignatureに設定します。Set the Policy dropdown menu to DefaultFullSharedAccessSignature.

    6. 戻るには、 [選択] ボタンをクリックします。Click the Select button to go back.

      出力の更新

  31. 出力ページは次のようになりますが、情報が代わりに使用されます。The Outputs page should now match the below, but with your information instead. 必ず 保存してください。Make sure to press Save.

警告

通知ハブ名を直接編集しない(これは、前の手順を正しく実行した場合に、詳細エディターを使用して行う必要があります。Do not edit the Notification Hub name directly (this should all be done using the Advanced Editor, provided you followed the previous steps correctly.

出力の完了

  1. この時点で、関数が動作していることを確認するために、関数をテストする必要があります。At this point, you should test the function, to ensure it is working. これを行うには :To do this:

    1. 関数のページにもう一度移動します。Navigate to the function page once more:

      出力の完了

    2. 関数のページに戻り、ページの右端にある [テスト] タブをクリックして、[テスト] ブレードを開きます。Back on the function page, click the Test tab on the far right side of the page, to open the Test blade:

      出力の完了

    3. ブレードの [要求本文] ボックスに、次のコードを貼り付けます。Within the Request body textbox of the blade, paste the below code:

      {  
          "Type":null,
          "X":3,
          "Y":0,
          "Z":1,
          "PartitionKey":null,
          "RowKey":"Obj2",
          "Timestamp":"0001-01-01T00:00:00+00:00",
          "ETag":null
      }
      
    4. テストコードを配置した状態で、右下にある [実行] ボタンをクリックすると、テストが実行されます。With the test code in place, click the Run button at the bottom right, and the test will be run. テストの出力ログは、関数コードの下のコンソール領域に表示されます。The output logs of the test will appear in the console area, below your function code.

      出力の完了

    警告

    上記のテストが失敗した場合は、上記の手順に厳密に従っていること、特に [統合] パネル内の設定を確認する必要があります。If the above test fails, you will need to double check that you have followed the above steps exactly, particularly the settings within the integrate panel.

第7章-デスクトップ Unity プロジェクトの設定Chapter 7 - Set up Desktop Unity Project

重要

現在作成中のデスクトップアプリケーションは、Unity エディターでは動作しませんThe Desktop application which you are now creating, will not work in the Unity Editor. これは、Visual Studio (またはデプロイされたアプリケーション) を使用して、アプリケーションのビルド後に、エディターの外部で実行する必要があります。It needs to be run outside of the Editor, following the Building of the application, using Visual Studio (or the deployed application).

次に示すのは、Unity と mixed reality で開発するための一般的な設定であり、そのため、他のプロジェクトに適したテンプレートです。The following is a typical set up for developing with Unity and mixed reality, and as such, is a good template for other projects.

Mixed reality のイマーシブヘッドセットをセットアップしてテストします。Set up and test your mixed reality immersive headset.

注意

このコースでは、モーションコントローラーは必要ありませんYou will not require Motion Controllers for this course. イマーシブヘッドセットの設定をサポートする必要がある場合は、 Windows Mixed Reality のセットアップ方法に関するリンクを参照してください。If you need support setting up the immersive headset, please follow this link on how to set up Windows Mixed Reality.

  1. Unityを開き、 [新規] をクリックします。Open Unity and click New.

    新しい unity プロジェクト

  2. Unity プロジェクト名を指定する必要があります。 UnityDesktopNotifHubを挿入します。You need to provide a Unity Project name, insert UnityDesktopNotifHub. プロジェクトの種類が3dに設定されていることを確認します。Make sure the project type is set to 3D. 場所を適切な場所に設定します (ルートディレクトリの方が適していることに注意してください)。Set the Location to somewhere appropriate for you (remember, closer to root directories is better). 次に、 [プロジェクトの作成] をクリックします。Then, click Create project.

    プロジェクトの作成

  3. 既定値を確認する必要が開いている Unity、 スクリプト エディター に設定されている Visual Studio します。With Unity open, it is worth checking the default Script Editor is set to Visual Studio. [設定編集 > ] に移動し、新しいウィンドウで [外部ツール] に移動します。Go to Edit > Preferences and then from the new window, navigate to External Tools. 変更 External Script EditorVisual Studio 2017 します。Change External Script Editor to Visual Studio 2017. [基本設定] ウィンドウを閉じます。Close the Preferences window.

    外部 VS ツールの設定

  4. 次に、[ファイル > ] [ビルドの設定] に移動して [ユニバーサル Windows プラットフォーム] を選択し、 [プラットフォームの切り替え] ボタンをクリックして選択内容を適用します。Next, go to File > Build Settings and select Universal Windows Platform, then click on the Switch Platform button to apply your selection.

    プラットフォームの切り替え

  5. ファイル > のビルド設定でも、次のことを確認してください。While still in File > Build Settings, make sure that:

    1. ターゲットデバイス任意のデバイスに設定されていますTarget Device is set to Any Device

      このアプリケーションはデスクトップ用であるため、任意のデバイスにする必要がありますThis Application will be for your desktop, so must be Any Device

    2. ビルドの種類D3Dに設定されていますBuild Type is set to D3D

    3. SDKは最新のインストールに設定されていますSDK is set to Latest installed

    4. Visual Studio のバージョンが、インストールされている最新バージョンに設定されていますVisual Studio Version is set to Latest installed

    5. ビルドと実行ローカルコンピューターに設定されていますBuild and Run is set to Local Machine

    6. ここでは、シーンを保存し、ビルドに追加する価値があります。While here, it is worth saving the scene, and adding it to the build.

      1. これを行うには、[開いているシーンの追加] を選択します。Do this by selecting Add Open Scenes. 保存ウィンドウが表示されます。A save window will appear.

        オープンシーンを追加する

      2. この新しいフォルダーを作成し、今後のシーンに加えて、 [新しいフォルダー] ボタンを選択します。新しいフォルダーを作成するには、名前を「シーン」にします。Create a new folder for this, and any future, scene, then select the New folder button, to create a new folder, name it Scenes.

        新しいシーンフォルダー

      3. 新しく作成した [シーン] フォルダーを開き、 [ファイル名:] テキスト フィールドに「 _NH Desktop_Scene」と入力し、 [保存] を押します。Open your newly created Scenes folder, and then in the File name: text field, type NH_Desktop_Scene, then press Save.

        新しい NH_Desktop_Scene

    7. それ以外の設定は、ビルド設定 の 既定 のままにしておきます。The remaining settings, in Build Settings, should be left as default for now.

  6. 同じウィンドウで、[プレーヤーの設定] ボタンをクリックすると、インスペクターが配置されている領域の関連パネルが開きます。In the same window click on the Player Settings button, this will open the related panel in the space where the Inspector is located.

  7. このパネルでは、いくつかの設定を確認する必要があります。In this panel, a few settings need to be verified:

    1. [その他の設定] タブで、次のようにします。In the Other Settings tab:

      1. Scripting Runtime のバージョンは実験的である必要があります (.Net 4.6 と同等)Scripting Runtime Version should be Experimental (.NET 4.6 Equivalent)

      2. バックエンド.netである必要がありますScripting Backend should be .NET

      3. API 互換性レベル.net 4.6である必要がありますAPI Compatibility Level should be .NET 4.6

        4.6 net バージョン

    2. [発行の設定] タブの [機能] で、次の項目を確認します。Within the Publishing Settings tab, under Capabilities, check:

      • InternetClientInternetClient

        インターネットクライアントを刻む

  8. ビルド設定に戻るUnity C#プロジェクトはグレーで表示されなくなりました。この横にあるチェックボックスをオンにします。Back in Build Settings Unity C# Projects is no longer greyed out; tick the checkbox next to this.

  9. [ビルドの設定] ウィンドウを閉じます。Close the Build Settings window.

  10. シーンとプロジェクトファイル > の保存シーン/ファイル > 保存プロジェクトを保存します。Save your Scene and Project File > Save Scene / File > Save Project.

    重要

    このプロジェクトのUnity セットアップコンポーネント (デスクトップアプリ) をスキップし、コードに直接進む場合は、unitypackage をダウンロードして、カスタムパッケージとしてプロジェクトにインポートしてから、次の章から続行してください。 9.If you wish to skip the Unity Set up component for this project (Desktop App), and continue straight into code, feel free to download this .unitypackage, import it into your project as a Custom Package, and then continue from Chapter 9. その場合でも、スクリプトコンポーネントを追加する必要があります。You will still need to add the script components.

章 8-Unity での Dll のインポートChapter 8 - Importing the DLLs in Unity

Azure Storage for Unity を使用します (これ自体が .Net SDK for Azure を利用します)。You will be using Azure Storage for Unity (which itself leverages the .Net SDK for Azure). 詳細については、Unity の Azure Storage に関する次のリンク先を参照してください。For more information follow this link about Azure Storage for Unity.

現在、Unity には、インポート後にプラグインを再構成する必要がある既知の問題があります。There is currently a known issue in Unity which requires plugins to be reconfigured after import. バグが解決された後、これらの手順 (このセクションでは 4-7) は不要になりました。These steps (4 - 7 in this section) will no longer be required after the bug has been resolved.

SDK を独自のプロジェクトにインポートするには、GitHub から最新のunitypackageをダウンロードしていることを確認します。To import the SDK into your own project, make sure you have downloaded the latest .unitypackage from GitHub. その後、次の手順を実行します。Then, do the following:

  1. [ アセット>インポートパッケージ>のカスタムパッケージ] メニューオプションを使用して、 unitypackageを Unity に追加します。Add the .unitypackage to Unity by using the Assets > Import Package > Custom Package menu option.

  2. ポップアップ表示された [Unity パッケージのインポート] ボックスで、* * [プラグイン > * ストレージ] * * * の下にあるすべてを選択できます。In the Import Unity Package box that pops up, you can select everything under **Plugin > *Storage***. このコースでは不要なため、他のすべてをオフにします。Uncheck everything else, as it is not needed for this course.

    パッケージへのインポート

  3. [インポート] ボタンをクリックして、プロジェクトに項目を追加します。Click the Import button to add the items to your project.

  4. プロジェクトビューの [プラグイン] の下にあるストレージフォルダーにアクセスし、次のプラグインのみを選択します。Go to the Storage folder under Plugins in the Project view and select the following plugins only:

    • Microsoft.Data.EdmMicrosoft.Data.Edm
    • Microsoft. Data. ODataMicrosoft.Data.OData
    • Windowsazure.servicebusMicrosoft.WindowsAzure.Storage
    • Newtonsoft. JsonNewtonsoft.Json
    • System.SpatialSystem.Spatial

プラットフォームをすべてオフにする

  1. これらの特定のプラグインを選択した状態で、任意のプラットフォームオフ にし、 [wsaplayer][適用] の順にクリックします。With these specific plugins selected, uncheck Any Platform and uncheck WSAPlayer then click Apply.

    プラットフォーム dll を適用する

    注意

    これらの特定のプラグインを Unity エディターでのみ使用するようにマークしています。We are marking these particular plugins to only be used in the Unity Editor. これは、プロジェクトが Unity からエクスポートされた後に使用される、WSA フォルダー内に同じプラグインの異なるバージョンがあるためです。This is because there are different versions of the same plugins in the WSA folder that will be used after the project is exported from Unity.

  2. [ストレージプラグイン] フォルダーで、[のみ] を選択します。In the Storage plugin folder, select only:

    • Microsoft. Data. Service. ClientMicrosoft.Data.Services.Client

      dll のプロセスを設定しない

  3. [プラットフォームの設定][処理しない] チェックボックスをオンにし、[適用] をクリックします。Check the Don't Process box under Platform Settings and click Apply.

    処理を適用しない

    注意

    Unity アセンブリ patcher はこのプラグインを処理するのが困難であるため、このプラグインを "処理しない" としてマークしています。We are marking this plugin "Don't process", because the Unity assembly patcher has difficulty processing this plugin. このプラグインは、処理されていなくても動作します。The plugin will still work even though it is not processed.

第9章-Desktop Unity プロジェクトで TableToScene クラスを作成するChapter 9 - Create the TableToScene class in the Desktop Unity project

ここで、このアプリケーションを実行するコードを含むスクリプトを作成する必要があります。You now need to create the scripts containing the code to run this application.

作成する必要のある最初のスクリプトはTabletosceneです。これは次の役割を担います。The first script you need to create is TableToScene, which is responsible for:

  • Azure テーブル内のエンティティを読み取っています。Reading entities within the Azure Table.
  • テーブルデータを使用して、生成するオブジェクトとその位置を決定します。Using the Table data, determine which objects to spawn, and in which position.

作成する必要がある2番目のスクリプトはCloudsceneです。これは次の役割を担います。The second script you need to create is CloudScene, which is responsible for:

  • 左クリックイベントを登録して、ユーザーがシーンの周りをドラッグできるようにします。Registering the left-click event, to allow the user to drag objects around the scene.
  • この Unity シーンからオブジェクトデータをシリアル化し、それを Azure Function App に送信します。Serializing the object data from this Unity scene, and sending it to the Azure Function App.

このクラスを作成するには:To create this class:

  1. プロジェクト パネルにある アセット フォルダーを右クリックし、フォルダー作成 > をクリックします。Right-click in the Asset Folder located in the Project Panel, Create > Folder. フォルダーにスクリプトの名前を指定します。Name the folder Scripts.

    スクリプトフォルダーの作成

    スクリプト作成フォルダー2

  2. 先ほど作成したフォルダーをダブルクリックして開きます。Double click on the folder just created, to open it.

  3. Scriptsフォルダー内を右クリックし、[ C#スクリプト作成 > ] をクリックします。Right-click inside the Scripts folder, click Create > C# Script. スクリプトTabletosceneという名前を指定します。Name the script TableToScene.

    新しい c# スクリプト tabletoscene の名前変更new c# script TableToScene rename

  4. スクリプトをダブルクリックして、Visual Studio 2017 で開きます。Double-click on the script to open it in Visual Studio 2017.

  5. 次の名前空間を追加します。Add the following namespaces:

    using Microsoft.WindowsAzure.Storage;
    using Microsoft.WindowsAzure.Storage.Auth;
    using Microsoft.WindowsAzure.Storage.Table;
    using UnityEngine;
    
  6. クラス内に、次の変数を挿入します。Within the class, insert the following variables:

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

    注意

    AccountName値を Azure Storage サービス名とaccountKey値に置き換え、Azure Storage サービスのキー値を Azure Portal (次の図を参照) に置き換えます。Substitute the accountName value with your Azure Storage Service name and accountKey value with the key value found in the Azure Storage Service, in the Azure Portal (See Image below).

    アカウントキーを取得する

  7. ここで、クラスを初期化するStart () および起動() の各メソッドを追加します。Now add the Start() and Awake() methods to initialize the class.

        /// <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. Tabletosceneクラス内で、Azure テーブルから値を取得し、それを使用してシーン内の適切なプリミティブを生成するメソッドを追加します。Within the TableToScene class, add the method that will retrieve the values from the Azure Table and use them to spawn the appropriate primitives in the scene.

        /// <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. Tabletosceneクラスの外部では、テーブルエンティティをシリアル化および逆シリアル化するためにアプリケーションによって使用されるクラスを定義する必要があります。Outside the TableToScene class, you need to define the class used by the application to serialize and deserialize the Table Entities.

        /// <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. Unity エディターに戻る前に、必ず保存してください。Make sure you Save before going back to the Unity Editor.

  11. [階層] パネルからメインカメラをクリックして、そのプロパティがインスペクターに表示されるようにします。Click the Main Camera from the Hierarchy panel, so that its properties appear in the Inspector.

  12. Scriptsフォルダーを開いた状態で、 tabletosceneのスクリプトファイルを選択し、メインカメラにドラッグします。With the Scripts folder open, select the script TableToScene file and drag it onto the Main Camera. 結果は次のようになります。The result should be as below:

    メインカメラにスクリプトを追加する

Chapter 10-Desktop Unity プロジェクトで CloudScene クラスを作成するChapter 10 - Create the CloudScene class in the Desktop Unity Project

作成する必要がある2番目のスクリプトはCloudsceneです。これは次の役割を担います。The second script you need to create is CloudScene, which is responsible for:

  • 左クリックイベントを登録して、ユーザーがシーンの周りをドラッグできるようにします。Registering the left-click event, to allow the user to drag objects around the scene.

  • この Unity シーンからオブジェクトデータをシリアル化し、それを Azure Function App に送信します。Serializing the object data from this Unity scene, and sending it to the Azure Function App.

2番目のスクリプトを作成するには:To create the second script:

  1. Scriptsフォルダー内を右クリックし、 [作成] 、[ C#スクリプト] の順にクリックします。Right-click inside the Scripts folder, click Create, C# Script. スクリプトにCloudsceneという名前を指定しますName the script CloudScene

    新しい c# スクリプト の名前変更 cloudscenenew c# script rename CloudScene

  2. 次の名前空間を追加します。Add the following namespaces:

    using Newtonsoft.Json;
    using System.Collections;
    using System.Text;
    using System.Threading.Tasks;
    using UnityEngine;
    using UnityEngine.Networking;
    
  3. 次の変数を挿入します。Insert the following variables:

        /// <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. 次の図に示すように、azure Portal の azure Function App サービスで見つかった Azure Function App URL でazureFunctionEndpoint値を置き換えます。Substitute the azureFunctionEndpoint value with your Azure Function App URL found in the Azure Function App Service, in the Azure Portal, as shown in the image below:

    関数の URL の取得

  5. ここで、クラスを初期化するStart () および起動() の各メソッドを追加します。Now add the Start() and Awake() methods to initialize the class.

        /// <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. Update () メソッド内に次のコードを追加します。このコードは、マウス入力を検出してドラッグします。これにより、シーン内のオブジェクトが移動されます。Within the Update() method, add the following code that will detect the mouse input and drag, which will in turn move GameObjects in the scene. オブジェクトをドラッグアンドドロップした場合、オブジェクトの名前と座標がメソッドUpdateCloudScene () に渡されます。このメソッドは azure Function App サービスを呼び出します。これにより、azure テーブルが更新され、通知がトリガーされます。If the user has dragged and dropped an object, it will pass the name and coordinates of the object to the method UpdateCloudScene(), which will call the Azure Function App service, which will update the Azure table and trigger the notification.

        /// <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. 次のように、 UpdateCloudScene () メソッドを追加します。Now add the UpdateCloudScene() method, as below:

        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. コードを保存して Unity に戻るSave the code and return to Unity

  9. Cloudsceneスクリプトをメインカメラにドラッグします。Drag the CloudScene script onto the Main Camera.

    1. [階層] パネルからメインカメラをクリックして、そのプロパティがインスペクターに表示されるようにします。Click the Main Camera from the Hierarchy panel, so that its properties appear in the Inspector.

    2. Scriptsフォルダーを開いた状態でcloudsceneスクリプトを選択し、メインカメラにドラッグします。With the Scripts folder open, select the CloudScene script and drag it onto the Main Camera. 結果は次のようになります。The result should be as below:

      メインカメラにクラウドスクリプトをドラッグする

第11章-UWP へのデスクトッププロジェクトのビルドChapter 11 - Build the Desktop Project to UWP

このプロジェクトの Unity セクションに必要なすべてが完了しました。Everything needed for the Unity section of this project has now been completed.

  1. [ビルドの設定] ([ファイル > ビルドの設定]) に移動します。Navigate to Build Settings (File > Build Settings).

  2. [ビルドの設定] ウィンドウで、 [ビルド] をクリックします。From the Build Settings window, click Build.

    プロジェクトのビルド

  3. ファイルエクスプローラーウィンドウがポップアップ表示され、ビルドする場所を入力するように求められます。A File Explorer window will popup, prompting you for a location to Build. (左上隅にある [新しいフォルダー] をクリックして) 新しいフォルダーを作成し、ビルドという名前を指定します。Create a new folder (by clicking New Folder in the top-left corner), and name it BUILDS.

    ビルド用の新しいフォルダー

    1. [新しいビルド] フォルダーを開き、別のフォルダーを作成し (新しいフォルダーをもう一度使用)、 _NH Desktop_Appという名前を指定します。Open the new BUILDS folder, and create another folder (using New Folder once more), and name it NH_Desktop_App.

      フォルダー名 NH_Desktop_App

    2. NH_デスクトップ_アプリを選択します。With the NH_Desktop_App selected. [フォルダーの選択] をクリックします。click Select Folder. プロジェクトがビルドされるまでに1分ほどかかります。The project will take a minute or so to build.

  4. 次のビルドでは、新しいプロジェクトの場所を示すファイルエクスプローラーが表示されます。Following build, File Explorer will appear showing you the location of your new project. ただし、次のいくつかの章では、最初に他の Unity プロジェクトを作成する必要があるため、このファイルを開く必要はありません。No need to open it, though, as you need to create the other Unity project first, in the next few Chapters.

第12章-Mixed Reality Unity プロジェクトの設定Chapter 12 - Set up Mixed Reality Unity Project

次に示すのは、mixed reality で開発するための一般的な設定です。そのため、他のプロジェクトに適したテンプレートです。The following is a typical set up for developing with the mixed reality, and as such, is a good template for other projects.

  1. Unityを開き、 [新規] をクリックします。Open Unity and click New.

    新しい unity プロジェクト

  2. ここで、Unity プロジェクト名を入力し、 UnityMRNotifHubを挿入する必要があります。You will now need to provide a Unity Project name, insert UnityMRNotifHub. プロジェクトの種類が3dに設定されていることを確認します。Make sure the project type is set to 3D. 場所を適切な場所に設定します (ルートディレクトリの方が適していることに注意してください)。Set the Location to somewhere appropriate for you (remember, closer to root directories is better). 次に、 [プロジェクトの作成] をクリックします。Then, click Create project.

    名前 UnityMRNotifHub

  3. 既定値を確認する必要が開いている Unity、 スクリプト エディター に設定されている Visual Studio します。With Unity open, it is worth checking the default Script Editor is set to Visual Studio. [設定編集 > ] に移動し、新しいウィンドウで [外部ツール] に移動します。Go to Edit > Preferences and then from the new window, navigate to External Tools. 変更 External Script EditorVisual Studio 2017 します。Change External Script Editor to Visual Studio 2017. [基本設定] ウィンドウを閉じます。Close the Preferences window.

    外部エディターを VS に設定する

  4. 次に、[ファイル > ] [ビルドの設定] の順に移動し、 [プラットフォームの切り替え] ボタンをクリックして、プラットフォームをユニバーサル Windows プラットフォームに切り替えます。Next, go to File > Build Settings and switch the platform to Universal Windows Platform, by clicking on the Switch Platform button.

    プラットフォームを UWP に切り替える

  5. ファイル > のビルド設定にアクセスして、次のことを確認してください。Go to File > Build Settings and make sure that:

    1. ターゲットデバイス任意のデバイスに設定されていますTarget Device is set to Any Device

      Microsoft HoloLens の場合は、ターゲットデバイスHoloLensに設定します。For the Microsoft HoloLens, set Target Device to HoloLens.

    2. ビルドの種類D3Dに設定されていますBuild Type is set to D3D

    3. SDKは最新のインストールに設定されていますSDK is set to Latest installed

    4. Visual Studio のバージョンが、インストールされている最新バージョンに設定されていますVisual Studio Version is set to Latest installed

    5. ビルドと実行ローカルコンピューターに設定されていますBuild and Run is set to Local Machine

    6. ここでは、シーンを保存し、ビルドに追加する価値があります。While here, it is worth saving the scene, and adding it to the build.

      1. これを行うには、[開いているシーンの追加] を選択します。Do this by selecting Add Open Scenes. 保存ウィンドウが表示されます。A save window will appear.

        オープンシーンを追加する

      2. この新しいフォルダーを作成し、今後のシーンに加えて、 [新しいフォルダー] ボタンを選択します。新しいフォルダーを作成するには、名前を「シーン」にします。Create a new folder for this, and any future, scene, then select the New folder button, to create a new folder, name it Scenes.

        新しいシーンフォルダー

      3. 新しく作成した [シーン] フォルダーを開き、 [ファイル名:] テキスト フィールドに「 _NH MR_シーン」と入力し、 [保存] を押します。Open your newly created Scenes folder, and then in the File name: text field, type NH_MR_Scene, then press Save.

        新しいシーン-NH_MR_Scene

    7. それ以外の設定は、ビルド設定 の 既定 のままにしておきます。The remaining settings, in Build Settings, should be left as default for now.

  6. 同じウィンドウで、[プレーヤーの設定] ボタンをクリックすると、インスペクターが配置されている領域の関連パネルが開きます。In the same window click on the Player Settings button, this will open the related panel in the space where the Inspector is located.

    プレーヤーの設定を開く

  7. このパネルでは、いくつかの設定を確認する必要があります。In this panel, a few settings need to be verified:

    1. [その他の設定] タブで、次のようにします。In the Other Settings tab:

      1. Scripting Runtime のバージョン実験的である必要があります (.net 4.6 と同等)Scripting Runtime Version should be Experimental (.NET 4.6 Equivalent)

      2. バックエンド.netである必要がありますScripting Backend should be .NET

      3. API 互換性レベル.net 4.6である必要がありますAPI Compatibility Level should be .NET 4.6

        api の互換性

    2. パネルの下の [ XR settings (発行の設定] の下にあります) で、 [サポートされている仮想現実] をティックし、 Windows Mixed reality SDKが追加されていることを確認します。Further down the panel, in XR Settings (found below Publish Settings), tick Virtual Reality Supported, make sure the Windows Mixed Reality SDK is added

      xr 設定の更新

    3. [発行の設定] タブの [機能] で、次のようにします。Within the Publishing Settings tab, under Capabilities, heck:

      • InternetClientInternetClient

        インターネットクライアントを刻む

  8. [ビルド設定] に戻り、 Unity C#プロジェクトはグレーで表示されなくなりました。この横にあるチェックボックスをオンにします。Back in Build Settings, Unity C# Projects is no longer greyed out: tick the checkbox next to this.

  9. これらの変更が完了したら、[ビルドの設定] ウィンドウを閉じます。With these changes done, close the Build Settings window.

  10. シーンとプロジェクトファイル > の保存シーン/ファイル > 保存プロジェクトを保存します。Save your Scene and Project File > Save Scene / File > Save Project.

    重要

    このプロジェクトの Unity セットアップ コンポーネント (Mixed reality アプリ) をスキップし、コードに直接移動する場合は、unitypackage をダウンロードし、カスタムパッケージとしてプロジェクトにインポートしてから、次の操作を続行してください。第14章If you wish to skip the Unity Set up component for this project (mixed reality App), and continue straight into code, feel free to download this .unitypackage, import it into your project as a Custom Package, and then continue from Chapter 14. その場合でも、スクリプトコンポーネントを追加する必要があります。You will still need to add the script components.

第13章: Mixed Reality Unity プロジェクトでの Dll のインポートChapter 13 - Importing the DLLs in the Mixed Reality Unity Project

Azure Storage for Unity library (.Net SDK for Azure を使用) が使用されます。You will be using Azure Storage for Unity library (which uses the .Net SDK for Azure). Unity で Azure Storage を使用する方法については、こちらのリンクを参照してください。Please follow this link on how to use Azure Storage with Unity. 現在、Unity には、インポート後にプラグインを再構成する必要がある既知の問題があります。There is currently a known issue in Unity which requires plugins to be reconfigured after import. バグが解決された後、これらの手順 (このセクションでは 4-7) は不要になりました。These steps (4 - 7 in this section) will no longer be required after the bug has been resolved.

SDK を独自のプロジェクトにインポートするには、 unitypackageがダウンロードされていることを確認してください。To import the SDK into your own project, make sure you have downloaded the latest .unitypackage. その後、次の手順を実行します。Then, do the following:

  1. [アセット > インポートパッケージ > カスタムパッケージ] メニューオプションを使用して、上記からダウンロードした unitypackage を Unity に追加します。Add the .unitypackage you downloaded from the above, to Unity by using the Assets > Import Package > Custom Package menu option.

  2. ポップアップ表示される [Unity パッケージのインポート] ボックスで、[プラグイン > ストレージ] の下のすべてを選択できます。In the Import Unity Package box that pops up, you can select everything under Plugin > Storage.

    パッケージのインポート

  3. [インポート] ボタンをクリックして、プロジェクトに項目を追加します。Click the Import button to add the items to your project.

  4. プロジェクトビューの [プラグイン] の下にあるストレージフォルダーにアクセスし、次のプラグインのみを選択します。Go to the Storage folder under Plugins in the Project view and select the following plugins only:

    • Microsoft.Data.EdmMicrosoft.Data.Edm
    • Microsoft. Data. ODataMicrosoft.Data.OData
    • Windowsazure.servicebusMicrosoft.WindowsAzure.Storage
    • Newtonsoft. JsonNewtonsoft.Json
    • System.SpatialSystem.Spatial

    プラグインの選択

  5. これらの特定のプラグインを選択した状態で、任意のプラットフォームオフ にし、 [wsaplayer][適用] の順にクリックします。With these specific plugins selected, uncheck Any Platform and uncheck WSAPlayer then click Apply.

    プラットフォームの変更の適用

    注意

    これらの特定のプラグインを Unity エディターでのみ使用するようにマークしています。You are marking these particular plugins to only be used in the Unity Editor. これは、プロジェクトが Unity からエクスポートされた後に使用される、WSA フォルダー内に同じプラグインの異なるバージョンがあるためです。This is because there are different versions of the same plugins in the WSA folder that will be used after the project is exported from Unity.

  6. [ストレージプラグイン] フォルダーで、[のみ] を選択します。In the Storage plugin folder, select only:

    • Microsoft. Data. Service. ClientMicrosoft.Data.Services.Client

      データサービスクライアントの選択

  7. [プラットフォームの設定][処理しない] チェックボックスをオンにし、 [適用] をクリックします。Check the Don't Process box under Platform Settings and click Apply.

    処理しない

    注意

    Unity アセンブリ patcher がこのプラグインを処理するのが困難であるため、このプラグインを "処理しない" とマークしています。You are marking this plugin "Don't process" because the Unity assembly patcher has difficulty processing this plugin. プラグインは処理されていなくても機能します。The plugin will still work even though it isn't processed.

第14章: mixed reality Unity プロジェクトでの TableToScene クラスの作成Chapter 14 - Creating the TableToScene class in the mixed reality Unity project

Tabletosceneクラスは、「 9 章」で説明したものと同じです。The TableToScene class is identical to the one explained in Chapter 9. 9 章」で説明されている手順に従って、Mixed Reality Unity プロジェクトに同じクラスを作成します。Create the same class in the mixed reality Unity Project following the same procedure explained in Chapter 9.

この章を完了すると、両方のUnity プロジェクトのメインカメラにこのクラスが設定されます。Once you have completed this Chapter, both of your Unity Projects will have this class set up on the Main Camera.

第15章: Mixed Reality Unity プロジェクトで NotificationReceiver クラスを作成するChapter 15 - Creating the NotificationReceiver class in the Mixed Reality Unity Project

作成する必要がある2番目のスクリプトはNotificationreceiverで、次の役割があります。The second script you need to create is NotificationReceiver, which is responsible for:

  • 初期化時にアプリを通知ハブに登録しています。Registering the app with the Notification Hub at initialization.
  • 通知ハブからの通知をリッスンしています。Listening to notifications coming from the Notification Hub.
  • 受信した通知からオブジェクトデータを逆シリアル化します。Deserializing the object data from received notifications.
  • 逆シリアル化されたデータに基づいて、シーン内のオブジェクトを移動します。Move the GameObjects in the scene, based on the deserialized data.

Notificationreceiverスクリプトを作成するには、次のようにします。To create the NotificationReceiver script:

  1. Scriptsフォルダー内を右クリックし、 [作成] 、[ C#スクリプト] の順にクリックします。Right-click inside the Scripts folder, click Create, C# Script. スクリプトにNotificationreceiverという名前を指定します。Name the script NotificationReceiver.

    新しい c# スクリプト 名の作成 notificationreceivercreate new c# script name it NotificationReceiver

  2. スクリプトをダブルクリックして開きます。Double click on the script to open it.

  3. 次の名前空間を追加します。Add the following namespaces:

    //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. 次の変数を挿入します。Insert the following variables:

        /// <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. HubName値を通知ハブのサービス名に置き換え、 hubListenEndpointの値を、Azure Portal の azure notification Hub サービスの [アクセスポリシー] タブにある [エンドポイント] の値に置き換えます (下の図を参照)。Substitute the hubName value with your Notification Hub Service name, and hubListenEndpoint value with the endpoint value found in the Access Policies tab, Azure Notification Hub Service, in the Azure Portal (see image below).

    notification hub ポリシーエンドポイントの挿入

  6. ここで、クラスを初期化するStart () および起動() の各メソッドを追加します。Now add the Start() and Awake() methods to initialize the class.

        /// <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. 次のように、 waitfornotificationメソッドを追加して、アプリがメインスレッドで競合するを使用せずに Notification Hub ライブラリから通知を受け取ることができるようにします。Add the WaitForNotification method to allow the app to receive notifications from the Notification Hub Library without clashing with the Main Thread:

        /// <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. 次のメソッドInitnotificationasync () を実行すると、初期化時にアプリケーションが Notification Hub サービスに登録されます。The following method, InitNotificationAsync(), will register the application with the notification Hub Service at initialization. Unity がプロジェクトをビルドできないため、コードはコメントアウトされています。The code is commented out as Unity will not be able to Build the project. Visual Studio で Azure メッセージング Nuget パッケージをインポートすると、コメントが削除されます。You will remove the comments when you import the Azure Messaging Nuget package in 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. 次のハンドラー ( Channel_pushnotificationreceived ()) は、通知が受信されるたびにトリガーされます。The following handler, Channel_PushNotificationReceived(), will be triggered every time a notification is received. 通知が逆シリアル化されます。これは、デスクトップアプリケーションで移動された Azure Table エンティティであり、MR シーン内の対応するオブジェクトを同じ位置に移動します。It will deserialize the notification, which will be the Azure Table Entity that has been moved on the Desktop Application, and then move the corresponding GameObject in the MR scene to the same position.

    重要

    コードがコメントアウトされるのは、Visual Studio 内で Nuget パッケージマネージャーを使用して Unity プロジェクトをビルドした後に追加する Azure メッセージングライブラリをコードが参照するためです。The code is commented out because the code references the Azure Messaging library, which you will add after building the Unity project using the Nuget Package Manager, within Visual Studio. そのため、Unity プロジェクトは、コメントアウトされていない限り、ビルドできません。プロジェクトをビルドし、Unity に戻る場合は、そのコードにコメントを再記述する必要があることに注意してください。As such, the Unity project will not be able to build, unless it is commented out. Be aware, that should you build your project, and then wish to return to Unity, you will need to re-comment that code.

        ///// <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. Unity エディターに戻る前に、変更内容を保存しておいてください。Remember to save your changes before going back to the Unity Editor.

  11. [階層] パネルからメインカメラをクリックして、そのプロパティがインスペクターに表示されるようにします。Click the Main Camera from the Hierarchy panel, so that its properties appear in the Inspector.

  12. Scriptsフォルダーを開いた状態で、 notificationreceiverスクリプトを選択し、メインカメラにドラッグします。With the Scripts folder open, select the NotificationReceiver script and drag it onto the Main Camera. 結果は次のようになります。The result should be as below:

    通知レシーバースクリプトをカメラにドラッグ

    注意

    Microsoft HoloLens 用にこれを開発している場合は、次のように、メインカメラカメラコンポーネントを更新する必要があります。If you are developing this for the Microsoft HoloLens, you will need to update the Main Camera's Camera component, so that:

    • フラグのクリア:純色Clear Flags: Solid Color
    • 基本黒Background: Black

Chapter 16-UWP に対する Mixed Reality プロジェクトの構築Chapter 16 - Build the Mixed Reality Project to UWP

この章は、前のプロジェクトのビルドプロセスと同じです。This Chapter is identical to build process for the previous project. このプロジェクトの Unity セクションに必要なものはすべて完了したので、Unity から構築します。Everything needed for the Unity section of this project has now been completed, so it is time to build it from Unity.

  1. [ビルドの設定] ([ファイル > ビルドの設定]) に移動します。Navigate to Build Settings ( File > Build Settings ).

  2. [ビルドの設定] メニューで、 [Unity C#プロジェクト] が表示されていることを確認します (ビルド後にこのプロジェクトのスクリプトを編集できます)。From the Build Settings menu, ensure Unity C# Projects* is ticked (which will allow you to edit the scripts in this project, after build).

  3. これが完了したら、 [ビルド] をクリックします。After this is done, click Build.

    プロジェクトのビルド

  4. ファイルエクスプローラーウィンドウがポップアップ表示され、ビルドする場所を入力するように求められます。A File Explorer window will popup, prompting you for a location to Build. (左上隅にある [新しいフォルダー] をクリックして) 新しいフォルダーを作成し、ビルドという名前を指定します。Create a new folder (by clicking New Folder in the top-left corner), and name it BUILDS.

    ビルドフォルダーの作成

    1. 新しい [ビルド] フォルダーを開き、別のフォルダーを作成し ( [新しいフォルダー] をもう一度使用)、「 _NH MR_App」という名前を指定します。Open the new BUILDS folder, and create another folder (using New Folder once more), and name it NH_MR_App.

      NH_MR_Apps フォルダーの作成

    2. NH_MR_アプリを選択します。With the NH_MR_App selected. [フォルダーの選択] をクリックします。click Select Folder. プロジェクトがビルドされるまでに1分ほどかかります。The project will take a minute or so to build.

  5. ビルドの後に、新しいプロジェクトの場所でファイルエクスプローラーウィンドウが開きます。Following the build, a File Explorer window will open at the location of your new project.

Chapter 17-NuGet パッケージを UnityMRNotifHub ソリューションに追加するChapter 17 - Add NuGet packages to the UnityMRNotifHub Solution

警告

次の NuGet パッケージを追加し (次ののコードのコメントを解除すると)、Unity プロジェクト内で再度開いたときに、エラーが表示されることに注意してください。Please remember that, once you add the following NuGet Packages (and uncomment the code in the next Chapter), the Code, when reopened within the Unity Project, will present errors. 引き続き Unity エディターで編集を続行する場合は、Visual Studio に戻ると、コードの一部をコメントにして、後で再度コメントする必要があります。If you wish to go back and continue editing in the Unity Editor, you will need comment that errosome code, and then uncomment again later, once you are back in Visual Studio.

Mixed reality ビルドが完了したら、ビルドした mixed reality プロジェクトに移動し、そのフォルダー内のソリューション (.sln) ファイルをダブルクリックして、Visual Studio 2017 でソリューションを開きます。Once the mixed reality build has been completed, navigate to the mixed reality project, which you built, and double click on the solution (.sln) file within that folder, to open your solution with Visual Studio 2017. 次に、 Windowsazure.servicebus NuGet パッケージを追加する必要があります。これは、通知ハブから通知を受信するために使用されるライブラリです。You will now need to add the WindowsAzure.Messaging.managed NuGet package; this is a library that is used to receive Notifications from the Notification Hub.

NuGet パッケージをインポートするには:To import the NuGet package:

  1. ソリューションエクスプローラーで、ソリューションを右クリックします。In the Solution Explorer, right click on your Solution

  2. [NuGet パッケージの管理] をクリックします。Click on Manage NuGet Packages.

    nuget マネージャーを開く

  3. [参照] タブを選択し、 windowsazure.servicebusを検索します。Select the Browse tab and search for WindowsAzure.Messaging.managed.

    windows azure メッセージングパッケージの検索

  4. 次に示すように結果を選択し、右側のウィンドウで [Project] の横にあるチェックボックスをオンにします。Select the result (as shown below), and in the window to the right, select the checkbox next to Project. これにより、 [プロジェクト] の横にあるチェックボックスと、 UnityMRNotifHub プロジェクトの横のチェックボックスが表示されます。This will place a tick in the checkbox next to Project, along with the checkbox next to the Assembly-CSharp and UnityMRNotifHub project.

    すべてのプロジェクトを目盛りする

  5. 最初に指定されたバージョンは、このプロジェクトと互換性がない可能性があります。The version initially provided may not be compatible with this project. そのため、 [バージョン] の横にあるドロップダウンメニューをクリックし、 [バージョン 0.1.7.9][インストール] の順にクリックします。Therefore, click on the dropdown menu next to Version, and click Version 0.1.7.9, then click Install.

  6. これで、NuGet パッケージのインストールが完了しました。You have now finished installing the NuGet package. Notificationreceiverクラスに入力したコメントが付いているコードを見つけて、コメントを削除します。Find the commented code you entered in the NotificationReceiver class and remove the comments..

第18章-Edit UnityMRNotifHub application, NotificationReceiver クラスChapter 18 - Edit UnityMRNotifHub application, NotificationReceiver class

NuGet パッケージを追加した後、 notificationreceiverクラス内のコードの一部をコメント解除する必要があります。Following having added the NuGet Packages, you will need to uncomment some of the code within the NotificationReceiver class.

この機能には、次が含まれます。This includes:

  1. 先頭にある名前空間:The namespace at the top:

    using Microsoft.WindowsAzure.Messaging;
    
  2. InitNotificationsAsync () メソッド内のすべてのコード:All the code within the InitNotificationsAsync() method:

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

警告

上記のコードにはコメントが含まれています。コメントが誤ってコメント解除されていないことを確認してください (コードがを持っている場合はコンパイルされません)。The code above has a comment in it: ensure that you have not accidentally uncommented that comment (as the code will not compile if you have!).

  1. 最後に、 Channel_PushNotificationReceivedイベントは次のようになります。And, lastly, the Channel_PushNotificationReceived event:

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

これらのコメントを解除したら、必ず保存し、次の章に進みます。With these uncommented, ensure that you save, and then proceed to the next Chapter.

第19章-mixed reality プロジェクトをストアアプリに関連付けるChapter 19 - Associate the mixed reality project to the Store app

ここで、ラボの開始時にで作成したストアアプリにmixed realityプロジェクトを関連付ける必要があります。You now need to associate the mixed reality project to the Store App you created in at the start of the lab.

  1. ソリューションを開きます。Open the solution.

  2. ソリューションエクスプローラーパネルで UWP アプリプロジェクトを右クリックし、[ストアに移行] をクリックして、アプリをストアに関連付けます。Right click on the UWP app Project in the Solution Explorer panel, the go to Store, and Associate App with the Store....

    ストアの関連付けを開く

  3. [アプリを Windows ストアと関連付ける] という新しいウィンドウが表示されます。A new window will appear called Associate Your App with the Windows Store. [次へ] をクリックします。Click Next.

    次の画面に進む

  4. これにより、ログインしたアカウントに関連付けられているすべてのアプリケーションが読み込まれます。It will load up all the Applications associated with the Account which you have logged in. アカウントにログインしていない場合は、このページでログインできます。If you are not logged in to your account, you can Log In on this page.

  5. このチュートリアルの開始時に作成したストアアプリの名前を探し、それを選択します。Find the Store App name that you created at the start of this tutorial and select it. その後、 [次へ] をクリックします。Then click Next.

    ストア名を検索して選択します

  6. [関連付け] をクリックします。Click Associate.

    アプリを関連付ける

  7. これで、アプリがストアアプリに関連付けられました。Your App is now Associated with the Store App. これは、通知を有効にするために必要です。This is necessary for enabling Notifications.

第20章-UnityMRNotifHub アプリケーションと UnityDesktopNotifHub アプリケーションのデプロイChapter 20 - Deploy UnityMRNotifHub and UnityDesktopNotifHub applications

この章では、2人の方で簡単に実行できます。これは、実行中のアプリと、コンピューターのデスクトップで実行されているアプリと、イマーシブヘッドセット内のアプリの両方が含まれるためです。This Chapter may be easier with two people, as the result will include both apps running, one running on your computer Desktop, and the other within your immersive headset.

イマーシブヘッドセットアプリは、シーンへの変更を受信するのを待機しています (ローカルのユーザーオブジェクトの位置の変更)。デスクトップアプリは、ローカルシーン (位置の変更) に変更を加えます。これは MR アプリに共有されます。The immersive headset app is waiting to receive changes to the scene (position changes of the local GameObjects), and the Desktop app will be making changes to their local scene (position changes), which will be shared to the MR app. 最初に MR アプリをデプロイし、次にデスクトップアプリを展開して、受信側がリッスンを開始できるようにすることが理にかなっています。It makes sense to deploy the MR app first, followed by the Desktop app, so that the receiver can begin listening.

ローカルコンピューターにUnityMRNotifHubアプリをデプロイするには、次のようにします。To deploy the UnityMRNotifHub app on your Local Machine:

  1. Visual Studio 2017UnityMRNotifHubアプリのソリューションファイルを開きます。Open the solution file of your UnityMRNotifHub app in Visual Studio 2017.

  2. ソリューションプラットフォームで、 [X86, ローカルコンピューター] を選択します。In the Solution Platform, select x86, Local Machine.

  3. ソリューション構成で、 [デバッグ] を選択します。In the Solution Configuration select Debug.

    プロジェクト構成の設定

  4. [ビルド] メニュー[ソリューションの配置] をクリックして、アプリケーションをコンピューターにサイドロードします。Go to Build menu and click on Deploy Solution to sideload the application to your machine.

  5. アプリがインストール済みのアプリの一覧に表示され、起動できる状態になります。Your App should now appear in the list of installed apps, ready to be launched.

ローカルコンピューターにUnityDesktopNotifHubアプリをデプロイするには:To deploy the UnityDesktopNotifHub app on Local Machine:

  1. Visual Studio 2017UnityDesktopNotifHubアプリのソリューションファイルを開きます。Open the solution file of your UnityDesktopNotifHub app in Visual Studio 2017.

  2. ソリューションプラットフォームで、 [X86, ローカルコンピューター] を選択します。In the Solution Platform, select x86, Local Machine.

  3. ソリューション構成で、 [デバッグ] を選択します。In the Solution Configuration select Debug.

    プロジェクト構成の設定

  4. [ビルド] メニュー[ソリューションの配置] をクリックして、アプリケーションをコンピューターにサイドロードします。Go to Build menu and click on Deploy Solution to sideload the application to your machine.

  5. アプリがインストール済みのアプリの一覧に表示され、起動できる状態になります。Your App should now appear in the list of installed apps, ready to be launched.

  6. Mixed reality アプリケーションを起動し、その後にデスクトップアプリケーションを起動します。Launch the mixed reality application, followed by the Desktop application.

両方のアプリケーションを実行している状態で、(マウスの左ボタンを使用して) デスクトップシーンでオブジェクトを移動します。With both applications running, move an object in the desktop scene (using the Left Mouse Button). これらの位置指定の変更は、ローカルでシリアル化され、Function App サービスに送信されます。These positional changes will be made locally, serialized, and sent to the Function App service. その後、Function App サービスによって、通知ハブと共にテーブルが更新されます。The Function App service will then update the Table along with the Notification Hub. 更新を受信した後、通知ハブは、更新されたデータをすべての登録済みアプリケーション (この場合はイマーシブヘッドセットアプリ) に直接送信します。その後、受信データを逆シリアル化し、新しい位置指定データをローカルオブジェクトに適用します。シーン内での移動。Having received an update, the Notification Hub will send the updated data directly to all the registered applications (in this case the immersive headset app), which will then deserialize the incoming data, and apply the new positional data to the local objects, moving them in scene.

Azure Notification Hubs アプリケーションが完成しましたYour finished your Azure Notification Hubs application

これで、Azure Notification Hubs サービスを活用し、アプリ間の通信を可能にする mixed reality アプリを構築しました。Congratulations, you built a mixed reality app that leverages the Azure Notification Hubs Service and allow communication between apps.

最終製品-終了

ボーナスの演習Bonus exercises

演習1Exercise 1

再生オブジェクトの色を変更し、その通知をシーンを表示している他のアプリに送信する方法はありますか。Can you work out how to change the color of the GameObjects and send that notification to other apps viewing the scene?

演習2Exercise 2

MR アプリへのユーザーの移動を追加して、デスクトップアプリで更新されたシーンを表示できますか。Can you add movement of the GameObjects to your MR app and see the updated scene in your desktop app?