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


注意

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.


最終製品-開始

このコースでは、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 Portal にログインします。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 _ という語が 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 の 表示] をクリックし > 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. これが完了したら、 project.js としてデスクトップに保存します。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 Portal にログインします。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 シーン内で移動されたオブジェクトの名前と場所を受け取ります ( Unityのオブジェクト と呼ばれる C# オブジェクトとして)。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. に移動して、メモ帳 で作成したファイルの project.js をクリックし、[開く] ボタンをクリックします。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. ファイル のfunction.js が中央のパネルに開き、次のコードスニペットで置き換える必要があります。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. [設定の 編集] に移動し、 > Preferences 新しいウィンドウで [外部ツール] に移動します。Go to Edit > Preferences and then from the new window, navigate to External Tools. 外部スクリプトエディターVisual Studio 2017 に変更します。Change External Script Editor to Visual Studio 2017. [ 基本設定 ] ウィンドウを閉じます。Close the Preferences window.

    外部 VS ツールの設定

  4. 次に、[ファイル] [ビルドの設定] に移動して [ユニバーサル Windows プラットフォーム] を選択し、[ > Build Settings プラットフォームの切り替え] ボタンをクリックして選択内容を適用します。 Universal Windows PlatformNext, 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
    • Microsoft.WindowsAzure.StorageMicrosoft.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.Services.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. [プロジェクト] パネルにある [アセット] フォルダーを右クリックし、[フォルダーの 作成] をクリックし > Folder ます。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 フォルダー内を右クリックし、[ Create > 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. [設定の 編集] に移動し、 > Preferences 新しいウィンドウで [外部ツール] に移動します。Go to Edit > Preferences and then from the new window, navigate to External Tools. 外部スクリプトエディターVisual 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 パッケージのインポート] ボックスで、[プラグイン ストレージ] の下のすべてを選択でき > Storage ます。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
    • Microsoft.WindowsAzure.StorageMicrosoft.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.Services.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?