注意

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


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

最終的な製品-開始

このコースでは、Azure Notification Hubs、Azure テーブル、および Azure Functions を使用して、複合現実のアプリケーションに Notification Hubs の機能を追加する方法を学びます。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 では、します。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 テーブル開発者が、クラウドで構造化された非 SQL データを格納する、Microsoft クラウド サービスを得ることが簡単にアクセスできる任意の場所。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 Tables ページ。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 のアプリが (X および Y) の 2 次元空間でオブジェクトを移動するユーザーを許可する、マウスを使用します。The Desktop PC app will allow the user to move an object in 2D space (X and Y), using the mouse.

  2. PC のアプリ内のオブジェクトの移動では、文字列の形式になります 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 アプリでは、(これは、デスクトップ PC のアプリで更新されただけですが)、Notification Hubs サービスからオブジェクトの移動に関する通知を受け取ります。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. このコースは、Unity プロジェクトで Azure サービスを統合する方法を説明する設計されています。This course is designed to teach you how to integrate an Azure Service with your Unity Project. 複合現実アプリを強化するためには、このコース得た知識を使用することがあります。It is your job to use the knowledge you gain from this course to enhance your mixed reality application. このコースは、他の複合現実ラボに直接関係は自己完結型のチュートリアルです。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.

Chapter 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

新しいアプリが表示され、セットアップに使用される資格情報を取得、アプリケーション登録ポータルにログイン、 Notification Hubs サービス内、 Azure Portalします。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.
    これは、する必要があります、以前使用した Microsoft アカウントである、Windows ストア開発者ポータルを使用しました。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 ポータルのセットアップの章: Notification Hubs サービスの作成します。Chapter 3 - Setup Azure Portal: create Notification Hubs Service

Apps の資格情報を取得するには、Azure Notification Hubs サービスを作成する、Azure Portal に移動する必要があります。With your apps credentials retrieved, you will need to go to the Azure Portal, where you will create an Azure Notification Hubs Service.

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

    注意

    Azure アカウントがいない場合は、1 つを作成する必要があります。If you do not already have an Azure account, you will need to create one. クラスルームまたはラボのような状況では、このチュートリアルをフォローしている場合は、講師または新しいアカウントのセットアップについて proctors のいずれかにお問い合わせください。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、 をクリックEnterOnce you are logged in, click on New in the top left corner, and search for Notification Hub, and click Enter.

    通知ハブの検索

    注意

    単語新規に置き換えられましたリソースの作成、新しいポータルでします。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、作成ボタンは、このサービスとの関連付けを作成します。At the bottom left of this prompt, select the Create button, to create an association with this service.

    notification hubs のインスタンスを作成します。

  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. クリックすると作成サービスを作成するを待機する必要があります、これは少し時間がかかる場合があります。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). 右側のパネルを必要とする 2 つの表示テキスト フィールドに変更は、パッケージ SIDセキュリティ キー、以前設定したアプリから。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 ポータルのセットアップの章: Table Service の作成します。Chapter 4 - Setup Azure Portal: create Table Service

Notification Hubs のサービス インスタンスを作成した後は、ストレージ リソースを作成して、Azure テーブル サービスを作成する、Azure ポータルに戻る移動します。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.

    注意

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

  3. 選択ストレージ アカウント - blob、ファイル、テーブル、キュー一覧から。Select Storage account - blob, file, table, queue from the list.

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

  4. 新しいページがの説明を入力、ストレージ アカウントサービス。The new page will provide a description of the Storage account service. このプロンプトの左下にある at、作成ボタンは、このサービスのインスタンスを作成します。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. デプロイ モデル、 をクリックしてResource managerします。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. クリックすると作成サービスを作成するを待機する必要があります、これは少し時間がかかる場合があります。Once you have clicked on Create, you will have to wait for the service to be created, this might take a minute.

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

    新しい記憶域の通知

  8. をクリックして、リソースに移動通知では、新しいサービス インスタンスを表示するボタンをクリックします。Click the Go to resource button in the notification to explore your new Service instance. 新しい記憶域のサービス インスタンスの概要ページが表示されます。You will be taken to your new Storage Service instance overview page.

    リソースに移動します。

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

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

    テーブルを開く

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

    新しいテーブルを作成します。

  12. 新しいテーブルが作成されたら、できなく内を確認する、 Table service (下部) のページ。Once the new table has been created, you will be able to see it within the Table service page (at the bottom).

    新しいテーブルの作成

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

これで、 Table serviceストレージ アカウントを設定したら、情報格納および取得するために使用するデータを追加する時間。Now that your Table service storage account has been setup, it is time to add data to it, which will be used to store and retrieve information. テーブルの編集を実行できますVisual Studioします。The editing of your Tables can be done through Visual Studio.

  1. 開いているVisual Studioします。Open Visual Studio.

  2. メニューから、次のようにクリックします。ビュー > Cloud Explorerします。From the menu, click View > Cloud Explorer.

    クラウド エクスプ ローラーを開く

  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 クラウド サービスが表示されます。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] をクリックします。

    警告

    変更したことを確認、XY、およびZ、エントリを二重します。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 を作成、テーブルサービスし、の通知を送信、 Notification Hubします。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.jsonします。Once you have done that, save it on your desktop as project.json. 名前の付け方が正しいことが重要になります: はことを確認 、.txt が付いていないファイル拡張子。It is important that the naming is correct: ensure it does NOT have a .txt file extension. 分かります NuGet を使用している場合、このファイルは、関数を使用するには、ライブラリを定義します。This file defines the libraries your function will use, if you have used NuGet it will look familiar.

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

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

    関数アプリの検索

    注意

    単語新規に置き換えられましたリソースの作成、新しいポータルでします。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、作成ボタンは、このサービスとの関連付けを作成します。At the bottom left of this prompt, select the Create button, to create an association with this service.

    関数アプリ インスタンス

  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. クリックすると作成サービスを作成するを待機する必要があります、これは少し時間がかかる場合があります。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 のリンクを配置します。

    重要

    さらに、リストをスクロールする必要があります、ページ (と、このイメージが正確に同じですが、Azure ポータルの更新が行われた場合) と呼ばれる要素を検索するただし、 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. をクリックしない場合、*新規*と共に、ストレージ アカウントが表示されるはずのもう 1 つのパネルを表示する、セクション タイトルのハイパーリンクです。If it is not there, click the New hyperlink alongside the section title, to show another panel, where your storage account should be listed.

      新しい記憶域

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

    関数を作成します。

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

    関数コードを更新します。

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

    #r "Microsoft.WindowsAzure.Storage"
    
    using System;
    using Microsoft.WindowsAzure.Storage;
    using Microsoft.WindowsAzure.Storage.Table;
    using Microsoft.Azure.NotificationHubs;
    using Newtonsoft.Json;
    
    public static async Task Run(UnityGameObject gameObj, CloudTable table, IAsyncCollector<Notification> notification, TraceWriter log)
    {
        //RowKey of the table object to be changed
        string rowKey = gameObj.RowKey;
    
        //Retrieve the table object by its RowKey
        TableOperation operation = TableOperation.Retrieve<UnityGameObject>("UnityPartitionKey", rowKey); 
    
        TableResult result = table.Execute(operation);
    
        //Create a UnityGameObject so to set its parameters
        UnityGameObject existingGameObj = (UnityGameObject)result.Result; 
    
        existingGameObj.RowKey = rowKey;
        existingGameObj.X = gameObj.X;
        existingGameObj.Y = gameObj.Y;
        existingGameObj.Z = gameObj.Z;
    
        //Replace the table appropriate table Entity with the value of the UnityGameObject
        operation = TableOperation.Replace(existingGameObj); 
    
        table.Execute(operation);
    
        log.Verbose($"Updated object position");
    
        //Serialize the UnityGameObject
        string wnsNotificationPayload = JsonConvert.SerializeObject(existingGameObj);
    
        log.Info($"{wnsNotificationPayload}");
    
        var headers = new Dictionary<string, string>();
    
        headers["X-WNS-Type"] = @"wns/raw";
    
        //Send the raw notification to subscribed devices
        await notification.AddAsync(new WindowsNotification(wnsNotificationPayload, headers)); 
    
        log.Verbose($"Sent notification");
    }
    
    // This UnityGameObject represent a Table Entity
    public class UnityGameObject : TableEntity
    {
        public string Type { get; set; }
        public double X { get; set; }
        public double Y { get; set; }
        public double Z { get; set; }
        public string RowKey { get; set; }
    }
    

    注意

    含まれるライブラリを使用して、関数が受け取った移動されたオブジェクトの場所と名前、Unity シーンで (として、C#と呼ばれるオブジェクトUnityGameObject)。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.jsonファイルで、で作成したメモ帳以前は、順にクリックします、オープンボタンをクリックします。Navigate to, and click, the project.json file, which you created in Notepad previously, and then click the Open button. このファイルは、関数が使用するライブラリを定義します。This file defines the libraries that your function will use.

    json をアップロードします。

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

  23. その後、左側のパネルで、下にある関数、 をクリックして、統合リンク。Then, in the panel on the left, beneath Functions, click the Integrate link.

    関数を統合します。

  24. 画面右隅で、次のページで次のようにクリックします。高度なエディター (以下のとおり)。On the next page, in the top right corner, click Advanced editor (as below).

    詳細エディターの起動

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

    {
    "bindings": [
        {
        "authLevel": "function",
        "type": "httpTrigger",
        "methods": [
            "get",
            "post"
        ],
        "name": "gameObj",
        "direction": "in"
        },
        {
        "type": "table",
        "name": "table",
        "tableName": "SceneObjectsTable",
        "connection": "mrnothubstorage_STORAGE",
        "direction": "in"
        },
        {
        "type": "notificationHub",
        "direction": "out",
        "name": "notification",
        "hubName": "MR_NotHub_ServiceInstance",
        "connection": "MRNotHubNS_DefaultFullSharedAccessSignature_NH",
        "platform": "wns"
        }
    ]
    }
    
  26. エディターは、次の図のようになります。Your editor should now look like the image below:

    標準のエディターに戻る

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

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

    テーブルの入力

  29. 次の一致することを確認 についてと異なる場合があります (は、イメージを次の手順を以下)。Ensure the following match to your information, as they may be different (there is an image below the following steps):

    1. テーブル名: Azure Storage、Table サービス内で作成したテーブルの名前。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 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. 接続ポップアップが表示されます (下図を参照) を選択する必要がある、 NamespaceNotification Hub、以前に設定します。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. 選択、 Notification Hub中間のドロップダウン メニューから名前。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 を使用した開発と複合現実は、一般的な設定して、そのため、他のプロジェクトの適切なテンプレートには。The following is a typical set up for developing with Unity and mixed reality, and as such, is a good template for other projects.

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

注意

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

  1. 開いているUnityクリック新規します。Open Unity and click New.

    新しい unity プロジェクト

  2. 挿入、Unity プロジェクト名を指定する必要があるUnityDesktopNotifHubします。You need to provide a Unity Project name, insert UnityDesktopNotifHub. 必ず、プロジェクトの種類に設定されて3Dします。Make sure the project type is set to 3D. 設定、場所に該当する別の場所 (ただし、ルート ディレクトリに近づけるためのより良い)。Set the Location to somewhere appropriate for you (remember, closer to root directories is better). をクリックし、プロジェクトの作成です。Then, click Create project.

    プロジェクトを作成します。

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

    VS tools の外部セット

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

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

  5. ファイル > Build Settings、ことを確認します。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. ビルドの種類に設定されているD3DBuild 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_デスクトップ_シーン、キーを押します保存します。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. 設定に残っているBuild Settings、ここでは既定値として残しておく必要があります。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. ランタイム バージョンをスクリプトべき試験的 (.NET 4.6 Equivalent)Scripting Runtime Version should be Experimental (.NET 4.6 Equivalent)

      2. バックエンドの scriptingべき .NETScripting Backend should be .NET

      3. API の互換性レベルべき .NET 4.6API Compatibility Level should be .NET 4.6

        net 4.6 のバージョン

    2. 内で、発行の設定] タブの [機能、確認してください。Within the Publishing Settings tab, under Capabilities, check:

      • InternetClientInternetClient

        ティックのインターネット クライアント

  8. 戻りBuild Settings Unity C#プロジェクトが不要になったグレー; これの横にあるチェック ボックスをオンにします。Back in Build Settings Unity C# Projects is no longer greyed out; tick the checkbox next to this.

  9. 閉じる、 Build Settingsウィンドウ。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

Unity の Azure ストレージを使用する (それ自体を活用して、.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 をインポートすることを最新バージョンをダウンロードしていることを確認して .unitypackage GitHub から。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. これら特定のプラグイン選択すると、をオフに Any プラットフォームをオフに 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. WSA フォルダー Unity からプロジェクトはエクスポート後に使用される同じプラグインのさまざまなバージョンがあるためにです。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 アセンブリのパッチャがあるこのプラグインを処理できないのためです。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 - デスクトップの 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 関数アプリに送信します。Serializing the object data from this Unity scene, and sending it to the Azure Function App.

このクラスを作成します。To create this class:

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

    scripts フォルダーを作成します。

    2 の scripts フォルダーを作成します。

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

  3. 内側を右クリックし、スクリプトフォルダー、をクリックして作成 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 ストレージ サービスの名前と値およびaccountKey (「次の図) Azure Portal で、Azure ストレージ サービスで見つかったキー値を持つ値。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()Awake() クラスを初期化するメソッド。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. をクリックして、 Main Cameraから、階層 パネルにそのプロパティが表示されるように、インスペクターします。Click the Main Camera from the Hierarchy panel, so that its properties appear in the Inspector.

  12. スクリプトフォルダーを開き、スクリプトを選択するTableToScene ファイル上にドラッグし、 Main Cameraします。With the Scripts folder open, select the script TableToScene file and drag it onto the Main Camera. 結果は、以下のとおり。The result should be as below:

    メイン カメラにスクリプトを追加します。

章 10 - デスクトップの 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 関数アプリに送信します。Serializing the object data from this Unity scene, and sending it to the Azure Function App.

2 番目のスクリプトを作成します。To create the second script:

  1. 内側を右クリックし、スクリプトフォルダー、をクリックして作成C#スクリプトRight-click inside the Scripts folder, click Create, C# Script. スクリプトの名前CloudSceneName the script CloudScene

    新しい c# スクリプト CloudScene の名前を変更new 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. 代替、 azureFunctionEndpoint Azure 関数アプリの URL を次の図に示すように、Azure Portal で、Azure Function App サービスで見つかった値。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()Awake() クラスを初期化するメソッド。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() メソッド、ドラッグで、シーンの Gameobject を移動はさらに、マウス入力を検出する次のコードを追加します。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 テーブルおよびトリガーを更新する Azure Function App サービスを呼び出すが、通知します。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にスクリプト、 Main Cameraします。Drag the CloudScene script onto the Main Camera.

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

    2. スクリプトフォルダーを開き、選択、 CloudSceneスクリプトを作成し、上にドラッグ、 Main Cameraします。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. Build Settingsウィンドウで、をクリックしてビルドします。From the Build Settings window, click Build.

    プロジェクトをビルドします。

  3. Aファイル エクスプ ローラービルドする場所の入力を求めるウィンドウがポップアップします。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_デスクトップ_アプリします。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 章 - 混合現実の Unity プロジェクトの設定Chapter 12 - Set up Mixed Reality Unity Project

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

  1. 開いているUnityクリック新規します。Open Unity and click New.

    新しい unity プロジェクト

  2. Unity プロジェクト名を指定する必要がありますこれで挿入UnityMRNotifHubします。You will now need to provide a Unity Project name, insert UnityMRNotifHub. 必ず、プロジェクトの種類に設定されて3Dします。Make sure the project type is set to 3D. 設定、場所に該当する別の場所 (ただし、ルート ディレクトリに近づけるためのより良い)。Set the Location to somewhere appropriate for you (remember, closer to root directories is better). をクリックし、プロジェクトの作成です。Then, click Create project.

    名前 UnityMRNotifHub

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

    VS セット外部エディター

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

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

  5. 移動してファイル > Build Settingsことを確認してください。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. ビルドの種類に設定されているD3DBuild 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. 設定に残っているBuild Settings、ここでは既定値として残しておく必要があります。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. ランタイム バージョンをスクリプトべき試験的(.NET 4.6 Equivalent)Scripting Runtime Version should be Experimental (.NET 4.6 Equivalent)

      2. バックエンドの scriptingべき .NETScripting Backend should be .NET

      3. API の互換性レベルべき .NET 4.6API Compatibility Level should be .NET 4.6

        api の互換性

    2. パネル、下の方にXR 設定(次に示します発行設定)、ティック仮想現実サポート、ことを確認、 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. 戻りBuild Settings 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 を設定するコンポーネント (複合現実アプリ)、このプロジェクトのコードにまっすぐコンティニュし、自由にダウンロードこの .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 章 - 複合現実の Unity プロジェクトで、Dll のインポートChapter 13 - Importing the DLLs in the Mixed Reality Unity Project

(Azure 用 .Net SDK を使用) する Unity ライブラリの Azure Storage が使用されます。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. Unity を使用して、上記でダウンロードした .unitypackage を追加、資産 > パッケージのインポート > カスタム パッケージメニュー オプション。Add the .unitypackage you downloaded from the above, to Unity by using the Assets > Import Package > Custom Package menu option.

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

    パッケージのインポート

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

  4. 移動して、ストレージの下のフォルダープラグインプロジェクトを表示し、次のプラグインを選択のみ:Go to the Storage folder under Plugins in the Project view and select the following plugins only:

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

    プラグインを選択します。

  5. これら特定のプラグイン選択すると、をオフに Any プラットフォームをオフに 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. WSA フォルダー Unity からプロジェクトはエクスポート後に使用される同じプラグインのさまざまなバージョンがあるためにです。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

      data services クライアントを選択します。

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

    処理はありません。

    注意

    マークしているこのプラグイン「プロセスはありません」Unity アセンブリのパッチャがあるこのプラグインを処理できないのためです。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 章 – TableToScene クラスの複合現実の Unity プロジェクトの作成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. 同じクラスを作成で Unity プロジェクトの同様の手順が説明されている複合現実で第 9 章します。Create the same class in the mixed reality Unity Project following the same procedure explained in Chapter 9.

この章では、両方が完了したら、 Unity プロジェクトこのクラスの Main Camera を設定する必要があります。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.
  • 逆シリアル化されたデータに基づく、シーン内の Gameobject に移動します。Move the GameObjects in the scene, based on the deserialized data.

作成する、 NotificationReceiverスクリプト。To create the NotificationReceiver script:

  1. 内側を右クリックし、スクリプトフォルダー、をクリックして作成C#スクリプトRight-click inside the Scripts folder, click Create, C# Script. スクリプトの名前NotificationReceiverします。Name the script NotificationReceiver.

    新しい c# スクリプト作成 NotificationReceiver という名前を付けますcreate 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を Notification Hubs サービス名に、値とhubListenEndpointアクセス ポリシー タブで、Azure Notification Hubs のサービスで見つかったエンドポイント値と、Azure Portal (下図を参照してください)。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).

    通知ハブのポリシー エンドポイントを挿入します。

  6. ここで追加、 Start()Awake() クラスを初期化するメソッド。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アプリは、メイン スレッドと競合せず、通知ハブのライブラリからの通知を受信できるようにするメソッド。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()、通知ハブのサービスの初期化時にアプリケーションを登録します。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. 次のハンドラーチャネル_PushNotificationReceived() 通知が受信されるたびにトリガーされます。The following handler, Channel_PushNotificationReceived(), will be triggered every time a notification is received. デスクトップ アプリケーションに移動された Azure テーブル エンティティになるし、MR シーン内の同じ位置に対応する GameObject を移動すると、通知を逆シリアル化にされます。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. をクリックして、 Main Cameraから、階層 パネルにそのプロパティが表示されるように、インスペクターします。Click the Main Camera from the Hierarchy panel, so that its properties appear in the Inspector.

  12. スクリプトフォルダーを開き、選択、 NotificationReceiverスクリプトを作成し、上にドラッグ、 Main Cameraします。With the Scripts folder open, select the NotificationReceiver script and drag it onto the Main Camera. 結果は、以下のとおり。The result should be as below:

    カメラに通知の受信側のスクリプトをドラッグします。

    注意

    これは、Microsoft HoloLens の開発は、更新する必要があります、 Main Cameraカメラコンポーネント、ように。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

第 16 章 – UWP への複合現実プロジェクトをビルド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. Build Settings ] メニューの [確認UnityC#プロジェクト* がオンになって (これにより、ビルドの後に、このプロジェクト内のスクリプトを編集すること)。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ファイル エクスプ ローラービルドする場所の入力を求めるウィンドウがポップアップします。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_アプリします。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.

第 17 章 – UnityMRNotifHub ソリューションの NuGet パッケージの追加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 エディターで編集を続行する場合は、その errosome コードにコメントし、したら、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.

複合現実のビルドが完了したら、ビルドした複合現実プロジェクトに移動し、Visual Studio 2017 でのソリューションを開くには、そのフォルダー内のソリューション (.sln) ファイルをダブルクリックします。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.Messaging.managed 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.Messaging.managedします。Select the Browse tab and search for WindowsAzure.Messaging.managed.

    windows azure のメッセージング パッケージを検索します。

  4. (次に示す) の結果を選択し、右側のウィンドウでに横にチェック ボックスをオンプロジェクトします。Select the result (as shown below), and in the window to the right, select the checkbox next to Project. ティックを横にチェック ボックスをオンに配置これはプロジェクト、横のチェック ボックスと共に、アセンブリ CSharpUnityMRNotifHubプロジェクト。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 章 - 編集 UnityMRNotifHub アプリケーション、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 章 – ストア アプリに複合現実プロジェクトに関連付けるChapter 19 - Associate the mixed reality project to the Store app

これで、関連付ける必要があります、複合現実ラボの開始時に作成したストア アプリにプロジェクト。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

この章は、実行中のアプリ、デスクトップ コンピューターで実行する 1 台の両方と、イマーシブ ヘッドセット内で、その他の結果が含まれますと 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.

イマーシブ ヘッドセット アプリは、シーン (ローカルの Gameobject の位置変更) に変更を受信を待機しているし、ローカル シーン (位置変更)、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. ソリューション ファイルを開き、 UnityMRNotifHubでアプリVisual Studio 2017します。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. ソリューション ファイルを開き、 UnityDesktopNotifHubでアプリVisual Studio 2017します。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. 複合現実アプリケーション、デスクトップ アプリケーションを起動します。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

Gameobject の色を変更し、シーンを表示するその他のアプリに通知を送信する方法を操作することができますか。Can you work out how to change the color of the GameObjects and send that notification to other apps viewing the scene?

手順 2Exercise 2

Gameobject の動きを MR アプリに追加し、デスクトップ アプリの更新されたシーンを参照してくださいか。Can you add movement of the GameObjects to your MR app and see the updated scene in your desktop app?