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

MR と Azure 303:自然言語の理解 (LUIS)MR and Azure 303: Natural language understanding (LUIS)

このコースでは、Language Understanding を Azure Cognitive Services を使用する mixed reality アプリケーションに Language Understanding API と統合する方法について説明します。In this course, you will learn how to integrate Language Understanding into a mixed reality application using Azure Cognitive Services, with the Language Understanding API.


Language Understanding (LUIS) は Microsoft Azure サービスです。これにより、アプリケーションは、ユーザーが必要とするものを抽出するなどして、ユーザーの入力を除外することができます。Language Understanding (LUIS) is a Microsoft Azure service, which provides applications with the ability to make meaning out of user input, such as through extracting what a person might want, in their own words. これは機械学習を通じて実現されます。 machine learning では、入力情報を認識して学習した後、詳細な関連情報を返信できます。This is achieved through machine learning, which understands and learns the input information, and then can reply with detailed, relevant, information. 詳細については、 Azure Language Understanding (LUIS) のページを参照してください。For more information, visit the Azure Language Understanding (LUIS) page.

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

  1. イマーシブヘッドセットに接続されているマイクを使用して、ユーザー入力音声をキャプチャします。Capture user input speech, using the Microphone attached to the immersive headset.
  2. キャプチャしたディクテーションをAzure Language Understanding Intelligent Service (LUIS) に送信します。Send the captured dictation the Azure Language Understanding Intelligent Service (LUIS).
  3. LUIS では、送信情報から意味を抽出して分析し、ユーザーの要求の意図を判断しようとします。Have LUIS extract meaning from the send information, which will be analyzed, and attempt to determine the intent of the user’s request will be made.

開発には、ユーザーが音声や宝石を使用してシーン内のオブジェクトのサイズと色を変更できるアプリの作成が含まれます。Development will include the creation of an app where the user will be able to use voice and/or gaze to change the size and the color of the objects in the scene. モーションコントローラーの使用については説明しません。The use of motion controllers will not be covered.

アプリケーションでは、結果をデザインと統合する方法については、お客様のニーズに合わせてください。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.

LUIS を複数回トレーニングできるように準備します。これについては、 12 章で説明します。Be prepared to Train LUIS several times, which is covered in Chapter 12. LUIS がトレーニングされると、より多くの結果が得られます。You will get better results the more times LUIS has been trained.

デバイスのサポートDevice support

までCourse HoloLensHoloLens イマーシブ ヘッドセットImmersive headsets
MR と Azure 303:自然言語の理解 (LUIS)MR and Azure 303: Natural language understanding (LUIS) ✔️✔️ ✔️✔️


このコースでは主に 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.



このチュートリアルは、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

  1. このプロジェクトのビルドで問題が発生しないように、このチュートリアルで説明されているプロジェクトをルートまたはほぼルートフォルダーに作成することを強くお勧めします (長いフォルダーパスはビルド時に問題を引き起こす可能性があります)。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).

  2. コンピューターがディクテーションを有効にできるようにするには、 Windows の設定 > プライバシー > 音声、インク & 入力し、音声サービスの有効化 をクリックして、候補 を入力します。To allow your machine to enable Dictation, go to Windows Settings > Privacy > Speech, Inking & Typing and press on the button Turn On speech services and typing suggestions.

  3. このチュートリアルのコードを使用すると、コンピューターに設定されている既定のマイクデバイスから記録できます。The code in this tutorial will allow you to record from the Default Microphone Device set on your machine. 既定のマイクデバイスが、音声をキャプチャするために使用するものとして設定されていることを確認します。Make sure the Default Microphone Device is set as the one you wish to use to capture your voice.

  4. ヘッドセットにマイクが内蔵されている場合は、 Mixed Reality ポータルの設定で "ヘッドセットを磨耗したときにヘッドセットの mic に切り替える" オプションがオンになっていることを確認してください。If your headset has a built-in microphone, make sure the option “When I wear my headset, switch to headset mic” is turned on in the Mixed Reality Portal settings.


第1章: Azure Portal のセットアップChapter 1 – Setup Azure Portal

Azure でLanguage Understandingサービスを使用するには、アプリケーションで使用できるようにサービスのインスタンスを構成する必要があります。To use the Language Understanding service in Azure, you will need to configure an instance of the service to be made available to your application.

  1. Azure ポータル にログインします。Log in to 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. ログインしたら、左上隅にある [新規] をクリックし、 Language Understandingを検索して、 Enter キーを押します。Once you are logged in, click on New in the top left corner, and search for Language Understanding, and click Enter.

    LUIS リソースの作成


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

  3. 右側の新しいページには、Language Understanding サービスの説明が表示されます。The new page to the right will provide a description of the Language Understanding service. このページの左下にある [作成] ボタンを選択して、このサービスのインスタンスを作成します。At the bottom left of this page, select the Create button, to create an instance of this service.

    LUIS サービスの作成-法的通知

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

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

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

    3. 適切な価格レベルを選択します。これがLUIS サービスを初めて作成する場合は、free レベル (F0) を使用できます。Select the Pricing Tier appropriate for you, if this is the first time creating a LUIS Service, a free tier (named F0) should be available to you. このコースでは、無料の割り当ては十分ではありません。The free allocation should be more than sufficient for this course.

    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 courses) under a common resource group).

      Azure リソースグループの詳細については、リソースグループに関する記事をご覧ください。If you wish to read more about Azure Resource Groups, please visit the resource group article.

    5. リソースグループの場所を決定します (新しいリソースグループを作成している場合)。Determine the Location for your resource group (if you are creating a new Resource Group). この場所は、アプリケーションを実行するリージョンに配置するのが理想的です。The location would ideally be in the region where the application would run. 一部の Azure 資産は、特定のリージョンでのみ利用できます。Some Azure assets are only available in certain regions.

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

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

      Create LUIS service-ユーザー入力

  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.

    新しい Azure 通知イメージ

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


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

    LUIS キーへのアクセス

  9. このチュートリアルでは、アプリケーションがサービスの呼び出しを行う必要があります。サービスは、サービスのサブスクリプションキーを使用して実行されます。Within this tutorial, your application will need to make calls to your service, which is done through using your service’s Subscription Key.

  10. LUIS APIサービスの [クイックスタート] ページで、最初の手順に移動し、キーを取得して、[キー ] をクリックします (これを実現するには、[サービス] ナビゲーションメニューにある青いハイパーリンクキーをクリックします。キーアイコン)。From the Quick start page, of your LUIS API service, navigate to the first step, Grab your keys, and click Keys (you can also achieve this by clicking the blue hyperlink Keys, located in the services navigation menu, denoted by the key icon). これにより、サービスキーが表示されます。This will reveal your service Keys.

  11. 表示されているキーの1つをコピーします。これは、プロジェクトの後半で必要になります。Take a copy of one of the displayed keys, as you will need this later in your project.

  12. [サービス] ページで、[ Language Understanding ポータル] をクリックして、LUIS アプリ内で新しいサービスの作成に使用する web ページにリダイレクトします。In the Service page, click on Language Understanding Portal to be redirected to the webpage which you will use to create your new Service, within the LUIS App.

第2章: Language Understanding ポータルChapter 2 – The Language Understanding Portal

このセクションでは、LUIS ポータルで LUIS アプリを作成する方法について説明します。In this section you will learn how to make a LUIS App on the LUIS Portal.


この章内でエンティティインテント、および発話を設定することは、LUIS サービスを構築するための最初の手順であることに注意してください。サービスを再トレーニングして、より正確なものにする必要もあります。Please be aware, that setting up the Entities, Intents, and Utterances within this chapter is only the first step in building your LUIS service: you will also need to retrain the service, several times, so to make it more accurate. サービスの再トレーニングについては、このコースの最後の章で説明されているため、完了していることを確認してください。Retraining your service is covered in the last Chapter of this course, so ensure that you complete it.

  1. Language Understanding ポータルに達したら、Azure portal と同じ資格情報を使用してログインする必要がある場合があります (まだログインしていない場合)。Upon reaching the Language Understanding Portal, you may need to login, if you are not already, with the same credentials as your Azure portal.

    LUIS ログインページ

  2. LUIS を初めて使用する場合は、[ようこそ] ページの一番下までスクロールして [ CREATE LUIS app (アプリの作成)] ボタンを見つけてクリックする必要があります。If this is your first time using LUIS, you will need to scroll down to the bottom of the welcome page, to find and click on the Create LUIS app button.

    LUIS アプリの作成ページ

  3. ログインしたら、[マイアプリ] をクリックします (現在このセクションにない場合)。Once logged in, click My apps (if you are not in that section currently). [新しいアプリの作成] をクリックします。You can then click on Create new app.


  4. アプリに名前を付けます。Give your app a Name.

  5. アプリが英語とは異なる言語を認識する場合は、カルチャを適切な言語に変更する必要があります。If your app is supposed to understand a language different from English, you should change the Culture to the appropriate language.

  6. ここでは、新しい LUIS アプリの説明を追加することもできます。Here you can also add a Description of your new LUIS app.


  7. [完了] をクリックすると、新しいLUISアプリケーションの [ビルド] ページが表示されます。Once you press Done, you will enter the Build page of your new LUIS application.

  8. ここで理解しておくべき重要な概念がいくつかあります。There are a few important concepts to understand here:

    • インテントは、ユーザーからのクエリに従って呼び出されるメソッドを表します。Intent, represents the method that will be called following a query from the user. インテントには、1つまたは複数のエンティティを含めることができます。An INTENT may have one or more ENTITIES.
    • エンティティは、インテントに関連する情報を記述するクエリのコンポーネントです。Entity, is a component of the query that describes information relevant to the INTENT.
    • 発話は、開発者によって提供されるクエリの例であり、LUIS は自身をトレーニングするために使用します。Utterances, are examples of queries provided by the developer, that LUIS will use to train itself.

これらの概念が完全に明確でない場合は、心配しないでください。この章ではさらに詳しく説明します。If these concepts are not perfectly clear, do not worry, as this course will clarify them further in this chapter.

最初に、このコースを構築するために必要なエンティティを作成します。You will begin by creating the Entities needed to build this course.

  1. ページの左側にある [エンティティ] をクリックし、[新しいエンティティの作成] をクリックします。On the left side of the page, click on Entities, then click on Create new entity.


  2. 新しいエンティティのを呼び出し、その種類をSimpleに設定して、[完了] を押します。Call the new Entity color, set its type to Simple, then press Done.


  3. このプロセスを繰り返して、次の3つの単純なエンティティを作成します。Repeat this process to create three (3) more Simple Entities named:

    • ままupsize
    • ダウンサイズdownsize
    • targettarget

結果は次の図のようになります。The result should look like the image below:


この時点で、インテントの作成を開始できます。At this point you can begin creating Intents.


インテントを削除しないでください。Do not delete the None intent.

  1. ページの左側にある [インテント] をクリックし、[新しいインテントの作成] をクリックします。On the left side of the page, click on Intents, then click on Create new intent.


  2. 新しいインテント changeobjectcolorを呼び出します。Call the new Intent ChangeObjectColor.


    この意図名は、このコースの後半でコード内で使用されます。したがって、最適な結果を得るために、この名前を指定されたとおりに使用してください。This Intent name is used within the code later in this course, so for best results, use this name exactly as provided.

名前を確認すると、インテントページにリダイレクトされます。Once you confirm the name you will be directed to the Intents Page.

LUIS ページ

5つ以上の異なる発話を入力するよう求めるテキストボックスが表示されます。You will notice that there is a textbox asking you to type 5 or more different Utterances.


LUIS は、すべての発話を小文字に変換します。LUIS converts all Utterances to lower case.

  1. 上部のテキストボックスに次の (発話) を挿入します (現在、テキストの種類は約5例です)。Insert the following Utterance in the top textbox (currently with the text Type about 5 examples… ) を入力し、enter キーを押します。), and press Enter:
The color of the cylinder must be red

新しい (発話) は、の下の一覧に表示されます。You will notice that the new Utterance will appear in a list underneath.

同じプロセスに従って、次の6つの発話を挿入します。Following the same process, insert the following six (6) Utterances:

make the cube black

make the cylinder color white

change the sphere to red

change it to green

make this yellow

change the color of this object to blue

作成した各 (発話) に対して、LUIS がエンティティとして使用する単語を識別する必要があります。For each Utterance you have created, you must identify which words should be used by LUIS as Entities. この例では、すべての色にエンティティとしてラベルを付け、ターゲットエンティティとしてターゲットに使用できるすべての参照を指定する必要があります。In this example you need to label all the colors as a color Entity, and all the possible reference to a target as a target Entity.

  1. これを行うには、最初の (発話) の "シリンダー " をクリックし、[ターゲット] を選択します。To do so, try clicking on the word cylinder in the first Utterance and select target.

    (発話) ターゲットの識別

  2. 次に、最初の (発話) の " red " という語をクリックして、[] を選択します。Now click on the word red in the first Utterance and select color.

    (発話) エンティティの識別

  3. 次の行にラベルを付けます。ここで、キューブターゲットにする必要があり、にする必要があります。Label the next line also, where cube should be a target, and black should be a color. また、" this""it" 、および "this object" という単語を使用しています。これにより、指定されていないターゲット型も使用できるようになります。Notice also the use of the words ‘this’, ‘it’, and ‘this object’, which we are providing, so to have non-specific target types available also.

  4. すべての発話がラベル付きのエンティティを持つようになるまで、上記の手順を繰り返します。Repeat the process above until all the Utterances have the Entities labelled. ヘルプが必要な場合は、次の画像を参照してください。See the below image if you need help.


    単語を選択してエンティティとしてラベル付けする場合:When selecting words to label them as entities:

    • 単一の単語の場合は、単にクリックします。For single words just click them.
    • 2つ以上の単語のセットについては、セットの先頭と末尾にあるをクリックします。For a set of two or more words, click at the beginning and then at the end of the set.


    [トークンビュー ] トグルボタンを使用して、エンティティ/トークンビューを切り替えることができます。You can use the Tokens View toggle button to switch between Entities / Tokens View!

  5. 次の図に示すように結果が表示され、エンティティ/トークンビューが表示されます。The results should be as seen in the images below, showing the Entities / Tokens View:

    トークン & エンティティビュー

  6. この時点で、ページの右上にある [ Train ] ボタンをクリックして、小さなラウンドインジケーターが緑色になるまで待ちます。At this point press the Train button at the top-right of the page and wait for the small round indicator on it to turn green. これは、この目的を認識するために LUIS が正常にトレーニングされたことを示します。This indicates that LUIS has been successfully trained to recognize this Intent.

    LUIS のトレーニング

  7. この演習では、 targetアップサイズ、およびダウンサイズエンティティを使用して、 changeobjectsizeという新しいインテントを作成します。As an exercise for you, create a new Intent called ChangeObjectSize, using the Entities target, upsize, and downsize.

  8. 前の意図と同じプロセスに従って、サイズを変更するために、次の8つの発話を挿入します。Following the same process as the previous Intent, insert the following eight (8) Utterances for Size change:

    increase the dimensions of that
    reduce the size of this
    i want the sphere smaller
    make the cylinder bigger
    size down the sphere
    size up the cube
    decrease the size of that object
    increase the size of this object
  9. 結果は次の図のようになります。The result should be like the one in the image below:

    ChangeObjectSize トークン/エンティティの設定

  10. Changeobjectcolorchangeobjectcolorの両方の作成とトレーニングが完了したら、ページの上部にある [発行] ボタンをクリックします。Once both Intents, ChangeObjectColor and ChangeObjectSize, have been created and trained, click on the PUBLISH button on top of the page.

    LUIS サービスの発行

  11. [発行] ページで、LUIS アプリを完成させ、コードからアクセスできるように発行します。On the Publish page you will finalize and publish your LUIS App so that it can be accessed by your code.

    1. ドロップダウンを [運用環境]設定します。Set the drop down Publish To as Production.

    2. タイムゾーンをタイムゾーンに設定します。Set the Timezone to your time zone.

    3. チェックボックスをオンにして、予測されるすべてのインテントスコアを含めます。Check the box Include all predicted intent scores.

    4. [運用スロットに発行] をクリックします。Click on Publish to Production Slot.


  12. [リソースとキー] セクションで、次の手順を実行します。In the section Resources and Keys:

    1. Azure Portal でサービスインスタンスに設定するリージョンを選択します。Select the region you set for service instance in the Azure Portal.
    2. 下にStarter_Key要素があることがわかりますが、無視します。You will notice a Starter_Key element below, ignore it.
    3. [キーの追加] をクリックし、サービスインスタンスを作成したときに Azure Portal で取得したキーを挿入します。Click on Add Key and insert the Key that you obtained in the Azure Portal when you created your Service instance. Azure と LUIS portal が同じユーザーにログインしている場合は、[テナント名]、[サブスクリプション名]、および使用するキーのドロップダウンメニューが表示されます (azure portal で以前に指定したものと同じ名前になります)。If your Azure and the LUIS portal are logged into the same user, you will be provided drop-down menus for Tenant name, Subscription Name, and the Key you wish to use (will have the same name as you provided previously in the Azure Portal.


    エンドポイントの下で、挿入したキーに対応するエンドポイントのコピーを取得します。これは、すぐにコードで使用します。Underneath Endpoint, take a copy of the endpoint corresponding to the Key you have inserted, you will soon use it in your code.

第3章: Unity プロジェクトの設定Chapter 3 – Set up the 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 プロジェクト名を入力し、 MR_LUISを挿入する必要があります。You will now need to provide a Unity Project name, insert MR_LUIS. プロジェクトの種類が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.

    新しい Unity プロジェクトの詳細を指定します。

  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.


  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. シーンを保存し、ビルドに追加します。Save the scene and add 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. 新しく作成した [シーン] フォルダーを開き、[ファイル名: テキスト] フィールドに「 MR_LuisScene」と入力し、[保存] を押します。Open your newly created Scenes folder, and then in the File name: text field, type MR_LuisScene, then press Save.


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

  6. [ビルドの設定] ウィンドウで、[プレーヤーの設定] ボタンをクリックします。これにより、インスペクターが配置されている領域の関連パネルが開きます。In the Build Settings 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 3.5 と同等)。Scripting Runtime Version should be Stable (.NET 3.5 Equivalent).

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

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


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

      1. InternetClientInternetClient

      2. マイクMicrophone


    3. パネルの下にある [ 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.

      X R の設定を更新します。

  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).

章4–シーンを作成するChapter 4 – Create the scene


このコースのUnity セットアップコンポーネントをスキップしてコードに直接進む場合は、 unitypackageをダウンロードし、カスタムパッケージとしてプロジェクトにインポートしてから、第5章から続行してください。If you wish to skip the Unity Set up component of this course, 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 5.

  1. [階層] パネルの空の領域を右クリックし、[ 3d オブジェクト] の下に平面を追加します。Right-click in an empty area of the Hierarchy Panel, under 3D Object, add a Plane.


  2. 階層内を右クリックしてさらにオブジェクトを作成した場合、最後のオブジェクトを選択したままにすると、選択したオブジェクトが新しいオブジェクトの親になります。Be aware that when you right-click within the Hierarchy again to create more objects, if you still have the last object selected, the selected object will be the parent of your new object. 階層内の空いている領域を左クリックし、右クリックしてください。Avoid this left-clicking in an empty space within the Hierarchy, and then right-clicking.

  3. 上記の手順を繰り返して、次のオブジェクトを追加します。Repeat the above procedure to add the following objects:

    1. 球形Sphere
    2. シリンダCylinder
    3. CubeCube
    4. 3D テキスト3D Text
  4. 結果として得られるシーン階層は、次の図のようになります。The resulting scene Hierarchy should be like the one in the image below:


  5. メインカメラをクリックして選択し、[インスペクター] パネルで、すべてのコンポーネントを含むカメラオブジェクトを確認します。Left click on the Main Camera to select it, look at the Inspector Panel you will see the Camera object with all the its components.

  6. [インスペクター] パネルの下部にある [コンポーネントの追加] ボタンをクリックします。Click on the Add Component button located at the very bottom of the Inspector Panel.


  7. 上記のように、[オーディオソース] という名前のコンポーネントを検索します。Search for the component called Audio Source, as shown above.

  8. また、メインカメラの変換コンポーネントが (0, 0, 0) に設定されていることを確認します。これを行うには、カメラの変換コンポーネントの横にある歯車アイコンを押し、[リセット] を選択します。Also make sure that the Transform component of the Main Camera is set to (0,0,0), this can be done by pressing the Gear icon next to the Camera’s Transform component and selecting Reset. 変換コンポーネントは次のようになります。The Transform component should then look like:

    1. Position0、0、0に設定されています。Position is set to 0, 0, 0.
    2. 回転0、0、0に設定されます。Rotation is set to 0, 0, 0.


    Microsoft HoloLens の場合は、次のものも変更する必要があります。これは、メインカメラカメラコンポーネントに含まれています。For the Microsoft HoloLens, you will need to also change the following, which are part of the Camera component, which is on your Main Camera:

    • フラグのクリア: 純色。Clear Flags: Solid Color.
    • 背景' Black, Alpha 0 ' –16進数の色: #00000000。Background ‘Black, Alpha 0’ – Hex color: #00000000.
  9. 平面を左クリックして選択します。Left click on the Plane to select it. [インスペクター] パネルで、変換コンポーネントに次の値を設定します。In the Inspector Panel set the Transform component with the following values:

    変換-位置Transform - Position
    XX 前年Y ZZ
    00 -1-1 00
  10. を右クリックして選択します。Left click on the Sphere to select it. [インスペクター] パネルで、変換コンポーネントに次の値を設定します。In the Inspector Panel set the Transform component with the following values:

    変換-位置Transform - Position
    XX 前年Y ZZ
    22 11 22
  11. 円柱を左クリックして選択します。Left click on the Cylinder to select it. [インスペクター] パネルで、変換コンポーネントに次の値を設定します。In the Inspector Panel set the Transform component with the following values:

    変換-位置Transform - Position
    XX 前年Y ZZ
    -2-2 11 22
  12. キューブを左クリックして選択します。Left click on the Cube to select it. [インスペクター] パネルで、変換コンポーネントに次の値を設定します。In the Inspector Panel set the Transform component with the following values:

    変換-位置Transform - Position | 変換-回転Transform - Rotation
    XX 前年Y ZZ | XX 前年Y ZZ
    00 11 44 | 4545 4545 00
  13. 新しいテキストオブジェクトを左クリックして選択します。Left click on the New Text object to select it. [インスペクター] パネルで、変換コンポーネントに次の値を設定します。In the Inspector Panel set the Transform component with the following values:

    変換-位置Transform - Position | 変換-スケールTransform - Scale
    XX 前年Y ZZ | XX 前年Y ZZ
    -2-2 66 99 | 0.10.1 0.10.1 0.10.1
  14. テキストメッシュコンポーネントのフォントサイズ50に変更します。Change Font Size in the Text Mesh component to 50.

  15. テキストメッシュオブジェクトの名前ディクテーションテキストに変更します。Change the name of the Text Mesh object to Dictation Text.

    3D テキストオブジェクトの作成

  16. 階層パネルの構造は次のようになります。Your Hierarchy Panel structure should now look like this:


  17. 最終的なシーンは次の図のようになります。The final scene should look like the image below:


Chapter 5 – MicrophoneManager クラスを作成するChapter 5 – Create the MicrophoneManager class

最初に作成するスクリプトは、 MicrophoneManagerクラスです。The first Script you are going to create is the MicrophoneManager class. 次に、 Luismanagerビヘイビアークラスを作成します (これらのクラスをすべて自由に作成しておきますが、各章で説明します)。Following this, you will create the LuisManager, the Behaviours class, and lastly the Gaze class (feel free to create all these now, though it will be covered as you reach each Chapter).

MicrophoneManagerクラスは次の役割を担います。The MicrophoneManager class is responsible for:

  • ヘッドセットまたはコンピューターに接続されている記録デバイスを検出しています (どちらか一方が既定値です)。Detecting the recording device attached to the headset or machine (whichever is the default one).
  • オーディオ (音声) をキャプチャし、ディクテーションを使用して文字列として格納します。Capture the audio (voice) and use dictation to store it as a string.
  • 音声が一時停止したら、そのディクテーションをLuismanagerクラスに送信します。Once the voice has paused, submit the dictation to the LuisManager class.

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

  1. [プロジェクト] パネル内を右クリックし、 > フォルダーを作成します。Right-click in the Project Panel, Create > Folder. フォルダースクリプトを呼び出します。Call the folder Scripts.

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

  2. Scriptsフォルダーが作成されたら、それをダブルクリックして開きます。With the Scripts folder created, double click it, to open. 次に、そのフォルダー内で右クリックして、 C# > スクリプトを作成します。Then, within that folder, right-click, Create > C# Script. スクリプトにMicrophoneManagerという名前を指定します。Name the script MicrophoneManager.

  3. MicrophoneManagerをダブルクリックして、 Visual Studioで開きます。Double click on MicrophoneManager to open it with Visual Studio.

  4. ファイルの先頭に次の名前空間を追加します。Add the following namespaces to the top of the file:

        using UnityEngine;
        using UnityEngine.Windows.Speech;
  5. 次に、 MicrophoneManagerクラス内に次の変数を追加します。Then add the following variables inside the MicrophoneManager class:

        public static MicrophoneManager instance; //help to access instance of this object
        private DictationRecognizer dictationRecognizer;  //Component converting speech to text
        public TextMesh dictationText; //a UI object used to debug dictation result
  6. 起動可能な () メソッドとStart () メソッドのコードを追加する必要があります。Code for Awake() and Start() methods now needs to be added. これらは、クラスの初期化時に呼び出されます。These will be called when the class initializes:

        private void Awake()
            // allows this class instance to behave like a singleton
            instance = this;
        void Start()
            if (Microphone.devices.Length > 0)
                Debug.Log("Mic Detected");
  7. ここで、音声キャプチャを開始および停止するためにアプリが使用するメソッドが必要であり、間もなくビルドされるLuismanagerクラスに渡します。Now you need the method that the App uses to start and stop the voice capture, and pass it to the LuisManager class, that you will build soon.

        /// <summary>
        /// Start microphone capture, by providing the microphone as a continual audio source (looping),
        /// then initialise the DictationRecognizer, which will capture spoken words
        /// </summary>
        public void StartCapturingAudio()
            if (dictationRecognizer == null)
                dictationRecognizer = new DictationRecognizer
                    InitialSilenceTimeoutSeconds = 60,
                    AutoSilenceTimeoutSeconds = 5
                dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;
                dictationRecognizer.DictationError += DictationRecognizer_DictationError;
            Debug.Log("Capturing Audio...");
        /// <summary>
        /// Stop microphone capture
        /// </summary>
        public void StopCapturingAudio()
            Debug.Log("Stop Capturing Audio...");
  8. 音声が一時停止したときに呼び出されるディクテーションハンドラーを追加します。Add a Dictation Handler that will be invoked when the voice pauses. このメソッドは、ディクテーションテキストをLuismanagerクラスに渡します。This method will pass the dictation text to the LuisManager class.

        /// <summary>
        /// This handler is called every time the Dictation detects a pause in the speech. 
        /// This method will stop listening for audio, send a request to the LUIS service 
        /// and then start listening again.
        /// </summary>
        private void DictationRecognizer_DictationResult(string dictationCaptured, ConfidenceLevel confidence)
            StartCoroutine(LuisManager.instance.SubmitRequestToLuis(dictationCaptured, StartCapturingAudio));
            Debug.Log("Dictation: " + dictationCaptured);
            dictationText.text = dictationCaptured;
        private void DictationRecognizer_DictationError(string error, int hresult)
            Debug.Log("Dictation exception: " + error);


    Update () メソッドは、このクラスでは使用されないため、削除します。Delete the Update() method since this class will not use it.

  9. Unityに戻る前に、変更内容をVisual Studioに保存してください。Be sure to save your changes in Visual Studio before returning to Unity.


    この時点で、 Unity エディターのコンソールパネルにエラーが表示されます。At this point you will notice an error appearing in the Unity Editor Console Panel. これは、次の章で作成するLuismanagerクラスをコードが参照するためです。This is because the code references the LuisManager class which you will create in the next Chapter.

Chapter 6 – LUISManager クラスを作成するChapter 6 – Create the LUISManager class

ここで、 Luismanagerクラスを作成します。これにより、Azure LUIS サービスが呼び出されます。It is time for you to create the LuisManager class, which will make the call to the Azure LUIS service.

このクラスの目的は、 MicrophoneManagerクラスからディクテーションテキストを受け取り、それを分析対象のAzure Language Understanding APIに送信することです。The purpose of this class is to receive the dictation text from the MicrophoneManager class and send it to the Azure Language Understanding API to be analyzed.

このクラスは、 JSON応答を逆シリアル化し、ビヘイビアークラスの適切なメソッドを呼び出してアクションをトリガーします。This class will deserialize the JSON response and call the appropriate methods of the Behaviours class to trigger an action.

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

  1. [ Scripts ] フォルダーをダブルクリックして開きます。Double click on the Scripts folder, to open it.

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

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

  4. ファイルの先頭に次の名前空間を追加します。Add the following namespaces to the top of the file:

        using System;
        using System.Collections;
        using System.Collections.Generic;
        using System.IO;
        using UnityEngine;
        using UnityEngine.Networking;
  5. 最初に、 Luismanagerクラスに3つのクラス ( Start () メソッドの上にある同じスクリプトファイル内) を作成し、Azure からの逆シリアル化された JSON 応答を表します。You will begin by creating three classes inside the LuisManager class (within the same script file, above the Start() method) that will represent the deserialized JSON response from Azure.

        [Serializable] //this class represents the LUIS response
        public class AnalysedQuery
            public TopScoringIntentData topScoringIntent;
            public EntityData[] entities;
            public string query;
        // This class contains the Intent LUIS determines 
        // to be the most likely
        public class TopScoringIntentData
            public string intent;
            public float score;
        // This class contains data for an Entity
        public class EntityData
            public string entity;
            public string type;
            public int startIndex;
            public int endIndex;
            public float score;
  6. 次に、 Luismanagerクラス内に次の変数を追加します。Next, add the following variables inside the LuisManager class:

        public static LuisManager instance;
        //Substitute the value of luis Endpoint with your own End Point
        string luisEndpoint = "https://westus.api.cognitive... add your endpoint from the Luis Portal";
  7. LUIS エンドポイントを現在の場所 (LUIS ポータルから取得) に配置してください。Make sure to place your LUIS endpoint in now (which you will have from your LUIS portal).

  8. 起動前 () メソッドのコードを追加する必要があります。Code for the Awake() method now needs to be added. このメソッドは、クラスの初期化時に呼び出されます。This method will be called when the class initializes:

        private void Awake()
            // allows this class instance to behave like a singleton
            instance = this;
  9. ここで、 MicrophoneManagerクラスから受け取ったディクテーションをLUISに送信し、応答を受信して逆シリアル化するために、このアプリケーションが使用するメソッドが必要です。Now you need the methods this application uses to send the dictation received from the MicrophoneManager class to LUIS, and then receive and deserialize the response.

  10. インテントの値と関連エンティティが決定されると、ビヘイビアークラスのインスタンスに渡され、目的のアクションがトリガーされます。Once the value of the Intent, and associated Entities, have been determined, they are passed to the instance of the Behaviours class to trigger the intended action.

        /// <summary>
        /// Call LUIS to submit a dictation result.
        /// The done Action is called at the completion of the method.
        /// </summary>
        public IEnumerator SubmitRequestToLuis(string dictationResult, Action done)
            string queryString = string.Concat(Uri.EscapeDataString(dictationResult));
            using (UnityWebRequest unityWebRequest = UnityWebRequest.Get(luisEndpoint + queryString))
                yield return unityWebRequest.SendWebRequest();
                if (unityWebRequest.isNetworkError || unityWebRequest.isHttpError)
                        AnalysedQuery analysedQuery = JsonUtility.FromJson<AnalysedQuery>(unityWebRequest.downloadHandler.text);
                        //analyse the elements of the response 
                    catch (Exception exception)
                        Debug.Log("Luis Request Exception Message: " + exception.Message);
                yield return null;
  11. 結果として得られたAnalysedQueryを読み取ってエンティティを決定する、analytics Ser onseelements () という名前の新しいメソッドを作成します。Create a new method called AnalyseResponseElements() that will read the resulting AnalysedQuery and determine the Entities. これらのエンティティが決定されると、ビヘイビアークラスのインスタンスに渡され、アクションで使用されます。Once those Entities are determined, they will be passed to the instance of the Behaviours class to use in the actions.

        private void AnalyseResponseElements(AnalysedQuery aQuery)
            string topIntent = aQuery.topScoringIntent.intent;
            // Create a dictionary of entities associated with their type
            Dictionary<string, string> entityDic = new Dictionary<string, string>();
            foreach (EntityData ed in aQuery.entities)
                entityDic.Add(ed.type, ed.entity);
            // Depending on the topmost recognised intent, read the entities name
            switch (aQuery.topScoringIntent.intent)
                case "ChangeObjectColor":
                    string targetForColor = null;
                    string color = null;
                    foreach (var pair in entityDic)
                        if (pair.Key == "target")
                            targetForColor = pair.Value;
                        else if (pair.Key == "color")
                            color = pair.Value;
                    Behaviours.instance.ChangeTargetColor(targetForColor, color);
                case "ChangeObjectSize":
                    string targetForSize = null;
                    foreach (var pair in entityDic)
                        if (pair.Key == "target")
                            targetForSize = pair.Value;
                    if (entityDic.ContainsKey("upsize") == true)
                    else if (entityDic.ContainsKey("downsize") == true)


    Start () およびUpdate () メソッドは、このクラスでは使用されないため、削除します。Delete the Start() and Update() methods since this class will not use them.

  12. Unityに戻る前に、変更内容をVisual Studioに保存してください。Be sure to save your changes in Visual Studio before returning to Unity.


この時点で、 Unity エディターのコンソールパネルにいくつかのエラーが表示されます。At this point you will notice several errors appearing in the Unity Editor Console Panel. これは、次の章で作成するビヘイビアークラスをコードが参照するためです。This is because the code references the Behaviours class which you will create in the next Chapter.

第7章–ビヘイビアークラスの作成Chapter 7 – Create the Behaviours class

ビヘイビアークラスは、 luismanagerクラスによって提供されるエンティティを使用してアクションをトリガーします。The Behaviours class will trigger the actions using the Entities provided by the LuisManager class.

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

  1. [ Scripts ] フォルダーをダブルクリックして開きます。Double click on the Scripts folder, to open it.

  2. Scriptsフォルダー内を右クリックし、[ Create > C# Script] をクリックします。Right-click inside the Scripts folder, click Create > C# Script. スクリプトにビヘイビアーという名前を指定します。Name the script Behaviours.

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

  4. 次に、ビヘイビアークラス内に次の変数を追加します。Then add the following variables inside the Behaviours class:

        public static Behaviours instance;
        // the following variables are references to possible targets
        public GameObject sphere;
        public GameObject cylinder;
        public GameObject cube;
        internal GameObject gazedTarget;
  5. 起動前 () メソッドのコードを追加します。Add the Awake() method code. このメソッドは、クラスの初期化時に呼び出されます。This method will be called when the class initializes:

        void Awake()
            // allows this class instance to behave like a singleton
            instance = this;
  6. 次のメソッドは、クエリの対象となるオブジェクトを判別するために、 Luismanagerクラス (前に作成したもの) によって呼び出され、適切なアクションをトリガーします。The following methods are called by the LuisManager class (which you have created previously) to determine which object is the target of the query and then trigger the appropriate action.

        /// <summary>
        /// Changes the color of the target GameObject by providing the name of the object
        /// and the name of the color
        /// </summary>
        public void ChangeTargetColor(string targetName, string colorName)
            GameObject foundTarget = FindTarget(targetName);
            if (foundTarget != null)
                Debug.Log("Changing color " + colorName + " to target: " + foundTarget.name);
                switch (colorName)
                    case "blue":
                        foundTarget.GetComponent<Renderer>().material.color = Color.blue;
                    case "red":
                        foundTarget.GetComponent<Renderer>().material.color = Color.red;
                    case "yellow":
                        foundTarget.GetComponent<Renderer>().material.color = Color.yellow;
                    case "green":
                        foundTarget.GetComponent<Renderer>().material.color = Color.green;
                    case "white":
                        foundTarget.GetComponent<Renderer>().material.color = Color.white;
                    case "black":
                        foundTarget.GetComponent<Renderer>().material.color = Color.black;
        /// <summary>
        /// Reduces the size of the target GameObject by providing its name
        /// </summary>
        public void DownSizeTarget(string targetName)
            GameObject foundTarget = FindTarget(targetName);
            foundTarget.transform.localScale -= new Vector3(0.5F, 0.5F, 0.5F);
        /// <summary>
        /// Increases the size of the target GameObject by providing its name
        /// </summary>
        public void UpSizeTarget(string targetName)
            GameObject foundTarget = FindTarget(targetName);
            foundTarget.transform.localScale += new Vector3(0.5F, 0.5F, 0.5F);
  7. Findtarget () メソッドを追加して、現在のインテントの対象となるのはどのオブジェクトかを判別します。Add the FindTarget() method to determine which of the GameObjects is the target of the current Intent. エンティティに明示的なターゲットが定義されていない場合、このメソッドは、ターゲットオブジェクトを既定の "gazed" に設定します。This method defaults the target to the GameObject being “gazed” if no explicit target is defined in the Entities.

        /// <summary>
        /// Determines which obejct reference is the target GameObject by providing its name
        /// </summary>
        private GameObject FindTarget(string name)
            GameObject targetAsGO = null;
            switch (name)
                case "sphere":
                    targetAsGO = sphere;
                case "cylinder":
                    targetAsGO = cylinder;
                case "cube":
                    targetAsGO = cube;
                case "this": // as an example of target words that the user may use when looking at an object
                case "it":  // as this is the default, these are not actually needed in this example
                case "that":
                default: // if the target name is none of those above, check if the user is looking at something
                    if (gazedTarget != null) 
                        targetAsGO = gazedTarget;
            return targetAsGO;


    Start () およびUpdate () メソッドは、このクラスでは使用されないため、削除します。Delete the Start() and Update() methods since this class will not use them.

  8. Unityに戻る前に、変更内容をVisual Studioに保存してください。Be sure to save your changes in Visual Studio before returning to Unity.

章8–宝石クラスを作成するChapter 8 – Create the Gaze Class

このアプリを完成させるために必要な最後のクラスは、宝石クラスです。The last class that you will need to complete this app is the Gaze class. このクラスは、ユーザーのビジュアルフォーカス内に現在存在するオブジェクトへの参照を更新します。This class updates the reference to the GameObject currently in the user’s visual focus.

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

  1. [ Scripts ] フォルダーをダブルクリックして開きます。Double click on the Scripts folder, to open it.

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

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

  4. このクラスの次のコードを挿入します。Insert the following code for this class:

        using UnityEngine;
        public class Gaze : MonoBehaviour
            internal GameObject gazedObject;
            public float gazeMaxDistance = 300;
            void Update()
                // Uses a raycast from the Main Camera to determine which object is gazed upon.
                Vector3 fwd = gameObject.transform.TransformDirection(Vector3.forward);
                Ray ray = new Ray(Camera.main.transform.position, fwd);
                RaycastHit hit;
                Debug.DrawRay(Camera.main.transform.position, fwd);
                if (Physics.Raycast(ray, out hit, gazeMaxDistance) && hit.collider != null)
                    if (gazedObject == null)
                        gazedObject = hit.transform.gameObject;
                        // Set the gazedTarget in the Behaviours class
                        Behaviours.instance.gazedTarget = gazedObject;
            // Turn the gaze off, reset the gazeObject in the Behaviours class.
            public void ResetGaze()
                if (gazedObject != null)
                    Behaviours.instance.gazedTarget = null;
                    gazedObject = null;
  5. Unityに戻る前に、変更内容をVisual Studioに保存してください。Be sure to save your changes in Visual Studio before returning to Unity.

第9章: シーンのセットアップの完了Chapter 9 – Completing the scene setup

  1. シーンのセットアップを完了するには、作成した各スクリプトを [スクリプト] フォルダーから、[階層] パネルの [メインカメラ] オブジェクトにドラッグします。To complete the setup of the scene, drag each script that you have created from the Scripts Folder to the Main Camera object in the Hierarchy Panel.

  2. メインカメラを選択して [インスペクター] パネルを表示すると、アタッチした各スクリプトを確認できます。また、設定されていない各スクリプトにはパラメーターがあることがわかります。Select the Main Camera and look at the Inspector Panel, you should be able to see each script that you have attached, and you will notice that there are parameters on each script that are yet to be set.


  3. これらのパラメーターを適切に設定するには、次の手順に従います。To set these parameters correctly, follow these instructions:

    1. MicrophoneManager:MicrophoneManager:

      • [階層] パネルで、[ディクテーションテキスト] オブジェクトを [ディクテーションテキストのパラメーター値] ボックスにドラッグします。From the Hierarchy Panel, drag the Dictation Text object into the Dictation Text parameter value box.
    2. ビヘイビアー階層パネルから:Behaviours, from the Hierarchy Panel:

      • 球体オブジェクトを [参照ターゲット] ボックスにドラッグします。Drag the Sphere object into the Sphere reference target box.
      • 円柱を [シリンダー参照ターゲット] ボックスにドラッグします。Drag the Cylinder into the Cylinder reference target box.
      • キューブを [キューブ参照ターゲット] ボックスにドラッグします。Drag the Cube into the Cube reference target box.
    3. 宝石:Gaze:

      • "宝石の最大距離" を300に設定します (まだ存在していない場合)。Set the Gaze Max Distance to 300 (if it is not already).
  4. 結果は次の図のようになります。The result should look like the image below:


Chapter 10-Unity エディターでのテストChapter 10 – Test in the Unity Editor

シーンのセットアップが正しく実装されていることをテストします。Test that the Scene setup is properly implemented.

次のことを確認してください。Ensure that:

  • すべてのスクリプトがメインカメラオブジェクトにアタッチされます。All the scripts are attached to the Main Camera object.
  • メインカメラインスペクターパネルのすべてのフィールドが適切に割り当てられます。All the fields in the Main Camera Inspector Panel are assigned properly.
  1. Unity エディターで [再生] ボタンをクリックします。Press the Play button in the Unity Editor. アプリは、接続されているイマーシブヘッドセット内で実行されている必要があります。The App should be running within the attached immersive headset.

  2. 次のように、いくつかの発話を試してみてください。Try a few utterances, such as:

    make the cylinder red
    change the cube to yellow
    I want the sphere blue
    make this to green
    change it to white


    既定のオーディオデバイスの変更について Unity コンソールにエラーが表示される場合は、シーンが想定どおりに機能しない可能性があります。If you see an error in the Unity console about the default audio device changing, the scene may not function as expected. これは、mixed reality ポータルが、ヘッドセットを持つヘッドホン用の組み込みマイクを扱う方法に起因します。This is due to the way the mixed reality portal deals with built-in microphones for headsets that have them. このエラーが表示された場合は、単にシーンを停止してからもう一度開始するだけで、期待どおりに動作するはずです。If you see this error, simply stop the scene and start it again and things should work as expected.

第11章– UWP ソリューションのビルドとサイドロードChapter 11 – Build and sideload the UWP Solution

Unity エディターでアプリケーションが動作していることを確認したら、ビルドと配置を行うことができます。Once you have ensured that the application is working in the Unity Editor, you are ready to Build and Deploy.

ビルドするには:To Build:

  1. [ファイル > 保存] をクリックして、現在のシーンを保存します。Save the current scene by clicking on File > Save.

  2. ファイル > ビルド設定にアクセスします。Go to File > Build Settings.

  3. Unity C#プロジェクトと呼ばれるボックスを目盛りします (UWP プロジェクトの作成後にコードを表示してデバッグする場合に便利です)。Tick the box called Unity C# Projects (useful for seeing and debugging your code once the UWP project is created.

  4. [開いているシーンの追加] をクリックし、[ビルド] をクリックします。Click on Add Open Scenes, then click Build.


  5. ソリューションをビルドするフォルダーを選択するように求められます。You will be prompted to select the folder where you want to build the Solution.

  6. ビルドフォルダーを作成し、そのフォルダー内で、適切な名前を指定して別のフォルダーを作成します。Create a BUILDS folder and within that folder create another folder with an appropriate name of your choice.

  7. [フォルダーの選択] をクリックして、その場所でビルドを開始します。Click Select Folder to begin the build at that location.

    ビルドフォルダー の作成ビルドフォルダーの選択Create Builds Folder Select Builds Folder

  8. Unity のビルドが完了すると (時間がかかる場合があります)、ビルドの場所でファイルエクスプローラーウィンドウを開きます。Once Unity has finished building (it might take some time), it should open a File Explorer window at the location of your build.

ローカルコンピューターに配置するには:To Deploy on Local Machine:

  1. Visual Studioで、前の章で作成したソリューションファイルを開きます。In Visual Studio, open the solution file that has been created in the previous Chapter.

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

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

    Microsoft HoloLens の場合、これをリモートコンピューターに設定する方が簡単な場合があります。これにより、コンピューターにテザリングさされることはありません。For the Microsoft HoloLens, you may find it easier to set this to Remote Machine, so that you are not tethered to your computer. ただし、次の手順も実行する必要があります。Though, you will need to also do the following:

    • HoloLens のIP アドレスを確認します。これは、 [設定 > ネットワーク & インターネット > Wi-fi > 詳細オプション] にあります。IPv4 は、使用するアドレスです。Know the IP Address of your HoloLens, which can be found within the Settings > Network & Internet > Wi-Fi > Advanced Options; the IPv4 is the address you should use.
    • 開発者モードオンになっていることを確認します。開発者向けのセキュリティ > の更新プログラム & の > の設定にあります。Ensure Developer Mode is On; found in Settings > Update & Security > For developers.


  4. [ビルド] メニューの [ソリューションの配置] をクリックして、アプリケーションをコンピューターにサイドロードします。Go to the 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. アプリを起動すると、_マイク_へのアクセスを承認するように求められます。Once launched, the App will prompt you to authorize access to the Microphone. モーションコントローラー音声入力、またはキーボードを使用して、 [はい] ボタンを押します。Use the Motion Controllers, or Voice Input, or the Keyboard to press the YES button.

第12章: LUIS サービスの向上Chapter 12 – Improving your LUIS service


この章は非常に重要であり、LUIS サービスの精度を向上させるために、複数回実行する必要がある場合があります。これを完了していることを確認してください。This chapter is incredibly important, and may need to be interated upon several times, as it will help improve the accuracy of your LUIS service: ensure you complete this.

LUIS によって提供される理解レベルを向上させるには、新しい発話をキャプチャし、それらを使用して LUIS アプリを再トレーニングする必要があります。To improve the level of understanding provided by LUIS you need to capture new utterances and use them to re-train your LUIS App.

たとえば、"増加" と "アップサイズ" を理解するためにトレーニング済みの LUIS を使用しているとしても、アプリで "拡大" のような単語を理解したいとは思いませんか。For example, you might have trained LUIS to understand “Increase” and “Upsize”, but wouldn’t you want your app to also understand words like “Enlarge”?

アプリケーションを数回使用した後は、前述のすべてのものが LUIS によって収集され、LUIS ポータルで利用できるようになります。Once you have used your application a few times, everything you have said will be collected by LUIS and available in the LUIS PORTAL.

  1. このリンクに従ってポータルアプリケーションにアクセスし、ログインします。Go to your portal application following this LINK, and Log In.

  2. MS 資格情報でログインしたら、アプリ名をクリックします。Once you are logged in with your MS Credentials, click on your App name.

  3. ページの左側にある [ Review endpoint 発話] ボタンをクリックします。Click the Review endpoint utterances button on the left of the page.


  4. 混合した現実のアプリケーションによって LUIS に送信された発話の一覧が表示されます。You will be shown a list of the Utterances that have been sent to LUIS by your mixed reality Application.


強調表示されているエンティティがいくつかわかります。You will notice some highlighted Entities.

強調表示された各単語の上にマウスポインターを置くと、各 (発話) を確認し、正しく認識されたエンティティ、どのエンティティが間違っているか、どのエンティティが不足しているかを判断できます。By hovering over each highlighted word, you can review each Utterance and determine which Entity has been recognized correctly, which Entities are wrong and which Entities are missed.

上記の例では、"スピアー" という単語はターゲットとして強調表示されているため、誤って修正する必要があります。これを行うには、マウスで単語をポイントし、[ラベルの削除] をクリックします。In the example above, it was found that the word “spear” had been highlighted as a target, so it necessary to correct the mistake, which is done by hovering over the word with the mouse and clicking Remove Label.

チェック発話 のラベルイメージの削除Check utterances Remove Label Image

  1. 完全に間違った発話が見つかった場合は、画面の右側にある [削除] ボタンを使用して削除できます。If you find Utterances that are completely wrong, you can delete them using the Delete button on the right side of the screen.


  2. または、LUIS が (発話) を正しく解釈したと思われる場合は、[固定されたインテントに追加] ボタンを使用して、その理解を検証することができます。Or if you feel that LUIS has interpreted the Utterance correctly, you can validate its understanding by using the Add To Aligned Intent button.


  3. 表示されているすべての発話を並べ替えた後、ページを再度読み込んで、使用できるかどうかを確認します。Once you have sorted all the displayed Utterances, try and reload the page to see if more are available.

  4. このプロセスをできるだけ多く繰り返して、アプリケーションの理解を向上させることが非常に重要です。It is very important to repeat this process as many times as possible to improve your application understanding.

楽しんでください!Have fun!

完成した LUIS 統合アプリケーションYour finished LUIS Integrated application

これで、Azure Language Understanding インテリジェンスサービスを活用する mixed reality アプリを構築し、ユーザーが何をしているかを把握し、その情報を操作できるようになりました。Congratulations, you built a mixed reality app that leverages the Azure Language Understanding Intelligence Service, to understand what a user says, and act on that information.


ボーナスの演習Bonus exercises

演習1Exercise 1

このアプリケーションを使用しているときに、Floor オブジェクトを見つめ、その色を変更するように要求すると、そのようになります。While using this application you might notice that if you gaze at the Floor object and ask to change its color, it will do so. アプリケーションでフロアの色を変更できないようにする方法はありますか。Can you work out how to stop your application from changing the Floor color?

演習2Exercise 2

LUIS とアプリの機能を拡張して、シーンにオブジェクトの機能を追加してみてください。例として、ユーザーの指示に応じて、宝石ヒットポイントに新しいオブジェクトを作成し、既存のコマンドを使用して、それらのオブジェクトを現在のシーンオブジェクトと共に使用できるようにします。Try extending the LUIS and App capabilities, adding additional functionality for objects in scene; as an example, create new objects at the Gaze hit point, depending on what the user says, and then be able to use those objects alongside current scene objects, with the existing commands.