注意

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 基礎 101:デバイスとの完全なプロジェクトMR Basics 101: Complete project with device


このチュートリアルでは、HoloLens などのコア Windows Mixed Reality 機能を示すには、Unity でビルドされた完全なプロジェクトを通じて視線ジェスチャ音声入力空間サウンド空間マッピングします。This tutorial will walk you through a complete project, built in Unity, that demonstrates core Windows Mixed Reality features on HoloLens including gaze, gestures, voice input, spatial sound and spatial mapping.

このチュートリアルを完了するには約 1 時間になります。The tutorial will take approximately 1 hour to complete.

デバイスのサポートDevice support

コースCourse HoloLensHoloLens イマーシブ ヘッドセットImmersive headsets
MR 基礎 101:デバイスとの完全なプロジェクトMR Basics 101: Complete project with device ✔️✔️

開始前の作業Before you start

前提条件Prerequisites

プロジェクト ファイルProject files

  • ダウンロード、ファイルプロジェクトに必要です。Download the files required by the project. Unity 2017.2 またはそれ以降が必要です。 Requires Unity 2017.2 or later.
    • Unity 5.6 のサポートを引き続き必要がある場合を使用してくださいこのリリースします。If you still need Unity 5.6 support, please use this release.
    • Unity 5.5 のサポートを引き続き必要がある場合を使用してくださいこのリリースします。If you still need Unity 5.5 support, please use this release.
    • Unity 5.4 のサポートを引き続き必要がある場合を使用してくださいこのリリースします。If you still need Unity 5.4 support, please use this release.
  • 解除アーカイブをデスクトップまたは場所に到達する簡単なその他のファイル。Un-archive the files to your desktop or other easy to reach location. フォルダー名として保持Origamiします。Keep the folder name as Origami.

注意

をダウンロードする前に、ソース コードを検索する場合があるGitHub で入手できますします。If you want to look through the source code before downloading, it's available on GitHub.

第 1 章 -"Holo"worldChapter 1 - "Holo" world

この章で、最初の Unity プロジェクトとビルド手順のセットアップがされプロセスを展開します。In this chapter, we'll setup our first Unity project and step through the build and deploy process.

目標Objectives

  • Holographic 開発のために、Unity を設定します。Set up Unity for holographic development.
  • ホログラムを確認します。Make a hologram.
  • 行ったホログラムを参照してください。See a hologram that you made.

手順Instructions

  • Unity を起動します。Start Unity.
  • [開く] を選択します。Select Open.
  • として場所を入力、 Origamiフォルダー アーカイブされた以前のことです。Enter location as the Origami folder you previously un-archived.
  • 選択Origamiクリックフォルダーの選択Select Origami and click Select Folder.
  • 以降、 Origamiプロジェクトに空の既定のシーンを使用して新しいファイルに保存、シーンが含まれていません。ファイル / としてシーンを保存します。Since the Origami project does not contain a scene, save the empty default scene to a new file using: File / Save Scene As.
  • 新しいシーンを名前Origamiキーを押すと、保存ボタンをクリックします。Name the new scene Origami and press the Save button.

メインの仮想のカメラのセットアップSetup the main virtual camera

  • 階層パネルMain Cameraします。In the Hierarchy Panel, select Main Camera.
  • インスペクターにトランス フォームの位置を設定0,0,0します。In the Inspector set its transform position to 0,0,0.
  • 検索、フラグをクリアプロパティ、ドロップダウン リストからの変更とスカイ ボックス純色Find the Clear Flags property, and change the dropdown from Skybox to Solid color.
  • をクリックして、バック グラウンドフィールドをカラー ピッカーを開きます。Click on the Background field to open a color picker.
  • 設定R、G、B、および A0します。Set R, G, B, and A to 0.

シーンのセットアップSetup the scene

  • 階層パネル、 をクリックして作成空アイテムの作成です。In the Hierarchy Panel, click on Create and Create Empty.
  • 新しい右クリックしてGameObject名前の変更を選択します。Right-click the new GameObject and select Rename. GameObject の名前を変更OrigamiCollectionします。Rename the GameObject to OrigamiCollection.
  • ホログラムプロジェクト パネル内のフォルダー (資産の展開しホログラムを選択します。 または [プロジェクト] パネルでホログラム フォルダーをダブルクリックします)。From the Holograms folder in the Project Panel (expand Assets and select Holograms or double click the Holograms folder in the Project Panel):
    • ドラッグステージの子に階層にOrigamiCollectionします。Drag Stage into the Hierarchy to be a child of OrigamiCollection.
    • ドラッグSphere1の子に階層にOrigamiCollectionします。Drag Sphere1 into the Hierarchy to be a child of OrigamiCollection.
    • ドラッグSphere2の子に階層にOrigamiCollectionします。Drag Sphere2 into the Hierarchy to be a child of OrigamiCollection.
  • 右クリックし、指向性光内のオブジェクト、階層パネル選択と削除します。Right-click the Directional Light object in the Hierarchy Panel and select Delete.
  • ホログラムフォルダー、ドラッグライトのルートに、階層パネルします。From the Holograms folder, drag Lights into the root of the Hierarchy Panel.
  • 階層を選択、 OrigamiCollectionします。In the Hierarchy, select the OrigamiCollection.
  • インスペクター、変換の位置を設定0、-0.5、2.0します。In the Inspector, set the transform position to 0, -0.5, 2.0.
  • キーを押して、再生ホログラムをプレビューする Unity でボタンをクリックします。Press the Play button in Unity to preview your holograms.
  • プレビュー ウィンドウの Origami オブジェクトが表示されます。You should see the Origami objects in the preview window.
  • キーを押して再生をもう一度プレビュー モードを停止します。Press Play a second time to stop preview mode.

Visual Studio Unity からプロジェクトにエクスポートします。Export the project from Unity to Visual Studio

  • Unity の select でファイル > Build Settingsします。In Unity select File > Build Settings.

  • 選択ユニバーサル Windows プラットフォームで、プラットフォームを一覧表示し、クリックしてスイッチ プラットフォームします。Select Universal Windows Platform in the Platform list and click Switch Platform.

  • 設定SDKユニバーサル 10ビルドの種類D3Dします。Set SDK to Universal 10 and Build Type to D3D.

  • 確認UnityC#プロジェクトします。Check Unity C# Projects.

  • をクリックして開くシーンを追加シーンを追加します。Click Add Open Scenes to add the scene.

  • [Build] をクリックします。Click Build.

  • ファイル エクスプ ローラー ウィンドウが表示されますが、作成、新しいフォルダー "App"という名前です。In the file explorer window that appears, create a New Folder named "App".

  • 1 回のクリック、アプリ フォルダーします。Single click the App Folder.

  • キーを押してフォルダーを選択しますします。Press Select Folder.

  • Unity を完了すると、ファイル エクスプ ローラー ウィンドウが表示されます。When Unity is done, a File Explorer window will appear.

  • 開く、アプリフォルダー。Open the App folder.

  • 開く (ダブルクリック) Origami.slnします。Open (double click) Origami.sln.

  • デバッグからターゲットを変更する Visual Studio で、上部のツールバーを使用してリリースを ARM からX86します。Using the top toolbar in Visual Studio, change the target from Debug to Release and from ARM to X86.

  • デバイスのボタンの横の矢印をクリックし、リモート マシンWi-fi 経由で展開します。Click on the arrow next to the Device button, and select Remote Machine to deploy over Wi-Fi.

    • 設定、アドレスHoloLens の IP アドレス、名前にします。Set the Address to the name or IP address of your HoloLens. デバイスの IP アドレスがわからない場合に参照設定 > ネットワークとインターネット > 詳細オプションCortana に質問してまたは 」「コルタナさん自分の IP アドレスは何ですか?If you do not know your device IP address, look in Settings > Network & Internet > Advanced Options or ask Cortana "Hey Cortana, What's my IP address?"
    • 代わりに選択しますが、HoloLens が USB 経由で接続されている場合デバイスUSB 経由で展開します。If the HoloLens is attached over USB, you may instead select Device to deploy over USB.
    • ままに、認証モード設定ユニバーサルします。Leave the Authentication Mode set to Universal.
    • クリックしてを選択しますClick Select
  • クリックしてデバッグ > デバッグなしで開始またはキーを押しますctrl キーを押しながら f5 キーを押してします。Click Debug > Start Without debugging or press Ctrl + F5. 最初に、デバイスに展開するには、する必要がありますVisual Studio をペアリングします。If this is the first time deploying to your device, you will need to pair it with Visual Studio.

  • 折り紙プロジェクトは今すぐ、HoloLens を展開してビルドし、実行します。The Origami project will now build, deploy to your HoloLens, and then run.

  • HoloLens にで、新しいホログラムを探します。Put on your HoloLens and look around to see your new holograms.

第 2 章 – 視線入力Chapter 2 - Gaze

この章で、最初の対話の 3 つの方法を紹介するつもりが、ホログラム--で視線します。In this chapter, we are going to introduce the first of three ways of interacting with your holograms -- gaze.

目標Objectives

  • 世界中ロックされているカーソルを使用して、視線の先を視覚化します。Visualize your gaze using a world-locked cursor.

手順Instructions

  • Unity プロジェクトに戻るしがまだ開いている場合は、ビルドの詳細設定 ウィンドウを閉じます。Go back to your Unity project, and close the Build Settings window if it's still open.
  • 選択、ホログラムフォルダーで、プロジェクト パネルします。Select the Holograms folder in the Project panel.
  • ドラッグ、カーソルオブジェクトを階層パネルルート レベルにします。Drag the Cursor object into the Hierarchy panel at the root level.
  • ダブルクリックして、カーソルについて詳しく見てを実行するオブジェクト。Double-click on the Cursor object to take a closer look at it.
  • 右クリックし、スクリプトプロジェクト パネル内のフォルダー。Right-click on the Scripts folder in the Project panel.
  • をクリックして、作成 をクリックします。Click the Create sub-menu.
  • 選択C#スクリプトします。Select C# Script.
  • スクリプトの名前WorldCursorします。Name the script WorldCursor. 注:この名前では、大文字と小文字を区別します。Note: The name is case-sensitive. .Cs 拡張子を追加する必要はありません。You do not need to add the .cs extension.
  • 選択、カーソルオブジェクト、階層パネルします。Select the Cursor object in the Hierarchy panel.
  • ドラッグ アンド ドロップ、 WorldCursorにスクリプト、インスペクター パネルします。Drag and drop the WorldCursor script into the Inspector panel.
  • ダブルクリックして、 WorldCursorスクリプトを Visual Studio で開きます。Double-click the WorldCursor script to open it in Visual Studio.
  • このコードをコピーしてWorldCursor.csすべて保存します。Copy and paste this code into WorldCursor.cs and Save All.
using UnityEngine;

public class WorldCursor : MonoBehaviour
{
    private MeshRenderer meshRenderer;

    // Use this for initialization
    void Start()
    {
        // Grab the mesh renderer that's on the same object as this script.
        meshRenderer = this.gameObject.GetComponentInChildren<MeshRenderer>();
    }

    // Update is called once per frame
    void Update()
    {
        // Do a raycast into the world based on the user's
        // head position and orientation.
        var headPosition = Camera.main.transform.position;
        var gazeDirection = Camera.main.transform.forward;

        RaycastHit hitInfo;

        if (Physics.Raycast(headPosition, gazeDirection, out hitInfo))
        {
            // If the raycast hit a hologram...
            // Display the cursor mesh.
            meshRenderer.enabled = true;

            // Move the cursor to the point where the raycast hit.
            this.transform.position = hitInfo.point;

            // Rotate the cursor to hug the surface of the hologram.
            this.transform.rotation = Quaternion.FromToRotation(Vector3.up, hitInfo.normal);
        }
        else
        {
            // If the raycast did not hit a hologram, hide the cursor mesh.
            meshRenderer.enabled = false;
        }
    }
}
  • アプリをリビルドファイル > のビルド設定します。Rebuild the app from File > Build Settings.
  • 以前、HoloLens を展開するために使用する Visual Studio ソリューションに戻ります。Return to the Visual Studio solution previously used to deploy to your HoloLens.
  • 'すべて再読み込み' が表示されたら選択します。Select 'Reload All' when prompted.
  • クリックしてデバッグ]、[デバッグなしで開始またはキーを押しますctrl キーを押しながら f5 キーを押してします。Click Debug -> Start Without debugging or press Ctrl + F5.
  • ここでシーンを中心になり、カーソルがオブジェクトの形状と対話する方法に注意してください。Now look around the scene and notice how the cursor interacts with the shape of objects.

第 3 章 - ジェスチャChapter 3 - Gestures

この章では、サポートを追加しますジェスチャします。In this chapter, we'll add support for gestures. ユーザーは、ホワイト ペーパーの球体を選択するときに、Unity の物理運動エンジンを使用して重力を有効にして分類、球体にしましょう。When the user selects a paper sphere, we'll make the sphere fall by turning on gravity using Unity's physics engine.

目標Objectives

  • ジェスチャに、ホログラムを制御します。Control your holograms with the Select gesture.

手順Instructions

スクリプトの作成から始めます続いて選択ジェスチャを検出することができます。We'll start by creating a script then can detect the Select gesture.

  • スクリプトフォルダー、という名前のスクリプト作成GazeGestureManagerします。In the Scripts folder, create a script named GazeGestureManager.
  • ドラッグ、 GazeGestureManagerにスクリプト、 OrigamiCollection階層内のオブジェクト。Drag the GazeGestureManager script onto the OrigamiCollection object in the Hierarchy.
  • 開く、 GazeGestureManager Visual Studio でスクリプトを作成し、次のコードを追加します。Open the GazeGestureManager script in Visual Studio and add the following code:
using UnityEngine;
using UnityEngine.XR.WSA.Input;

public class GazeGestureManager : MonoBehaviour
{
    public static GazeGestureManager Instance { get; private set; }

    // Represents the hologram that is currently being gazed at.
    public GameObject FocusedObject { get; private set; }

    GestureRecognizer recognizer;

    // Use this for initialization
    void Awake()
    {
        Instance = this;

        // Set up a GestureRecognizer to detect Select gestures.
        recognizer = new GestureRecognizer();
        recognizer.Tapped += (args) =>
        {
            // Send an OnSelect message to the focused object and its ancestors.
            if (FocusedObject != null)
            {
                FocusedObject.SendMessageUpwards("OnSelect", SendMessageOptions.DontRequireReceiver);
            }
        };
        recognizer.StartCapturingGestures();
    }

    // Update is called once per frame
    void Update()
    {
        // Figure out which hologram is focused this frame.
        GameObject oldFocusObject = FocusedObject;

        // Do a raycast into the world based on the user's
        // head position and orientation.
        var headPosition = Camera.main.transform.position;
        var gazeDirection = Camera.main.transform.forward;

        RaycastHit hitInfo;
        if (Physics.Raycast(headPosition, gazeDirection, out hitInfo))
        {
            // If the raycast hit a hologram, use that as the focused object.
            FocusedObject = hitInfo.collider.gameObject;
        }
        else
        {
            // If the raycast did not hit a hologram, clear the focused object.
            FocusedObject = null;
        }

        // If the focused object changed this frame,
        // start detecting fresh gestures again.
        if (FocusedObject != oldFocusObject)
        {
            recognizer.CancelGestures();
            recognizer.StartCapturingGestures();
        }
    }
}
  • Scripts フォルダーでは、という名前のこの時点で別のスクリプトを作成SphereCommandsします。Create another script in the Scripts folder, this time named SphereCommands.
  • 展開、 OrigamiCollection階層ビュー内のオブジェクト。Expand the OrigamiCollection object in the Hierarchy view.
  • ドラッグ、 SphereCommandsにスクリプト、 Sphere1階層パネル内のオブジェクト。Drag the SphereCommands script onto the Sphere1 object in the Hierarchy panel.
  • ドラッグ、 SphereCommandsにスクリプト、 Sphere2階層パネル内のオブジェクト。Drag the SphereCommands script onto the Sphere2 object in the Hierarchy panel.
  • 編集に関しては、Visual Studio でスクリプトを開くし、この既定のコードに置き換えます。Open the script in Visual Studio for editing, and replace the default code with this:
using UnityEngine;

public class SphereCommands : MonoBehaviour
{
    // Called by GazeGestureManager when the user performs a Select gesture
    void OnSelect()
    {
        // If the sphere has no Rigidbody component, add one to enable physics.
        if (!this.GetComponent<Rigidbody>())
        {
            var rigidbody = this.gameObject.AddComponent<Rigidbody>();
            rigidbody.collisionDetectionMode = CollisionDetectionMode.Continuous;
        }
    }
}
  • エクスポートし、ビルド、HoloLens にアプリを展開します。Export, build and deploy the app to your HoloLens.
  • 球体は一層のいずれかを確認します。Look at one of the spheres.
  • 選択ジェスチャを実行し、次の画面にドロップ球を確認します。Perform the select gesture and watch the sphere drop onto the surface below.

第 4 章 - 音声Chapter 4 - Voice

この章では、2 つのサポートを追加します音声コマンド:"リセット world"には、元の場所にドロップされた球体を返し、「球体をドロップ」分類球を作成します。In this chapter, we'll add support for two voice commands: "Reset world" to return the dropped spheres to their original location, and "Drop sphere" to make the sphere fall.

目標Objectives

  • バック グラウンドでは、常にリッスンする音声コマンドを追加します。Add voice commands that always listen in the background.
  • 音声コマンドに応答するホログラムを作成します。Create a hologram that reacts to a voice command.

手順Instructions

  • スクリプトフォルダー、という名前のスクリプト作成SpeechManagerします。In the Scripts folder, create a script named SpeechManager.
  • ドラッグ、 SpeechManagerにスクリプト、 OrigamiCollection階層内のオブジェクトDrag the SpeechManager script onto the OrigamiCollection object in the Hierarchy
  • 開く、 SpeechManager Visual Studio でのスクリプト。Open the SpeechManager script in Visual Studio.
  • このコードをコピーしてSpeechManager.csすべて保存:Copy and paste this code into SpeechManager.cs and Save All:
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.Windows.Speech;

public class SpeechManager : MonoBehaviour
{
    KeywordRecognizer keywordRecognizer = null;
    Dictionary<string, System.Action> keywords = new Dictionary<string, System.Action>();

    // Use this for initialization
    void Start()
    {
        keywords.Add("Reset world", () =>
        {
            // Call the OnReset method on every descendant object.
            this.BroadcastMessage("OnReset");
        });

        keywords.Add("Drop Sphere", () =>
        {
            var focusObject = GazeGestureManager.Instance.FocusedObject;
            if (focusObject != null)
            {
                // Call the OnDrop method on just the focused object.
                focusObject.SendMessage("OnDrop", SendMessageOptions.DontRequireReceiver);
            }
        });

        // Tell the KeywordRecognizer about our keywords.
        keywordRecognizer = new KeywordRecognizer(keywords.Keys.ToArray());

        // Register a callback for the KeywordRecognizer and start recognizing!
        keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;
        keywordRecognizer.Start();
    }

    private void KeywordRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args)
    {
        System.Action keywordAction;
        if (keywords.TryGetValue(args.text, out keywordAction))
        {
            keywordAction.Invoke();
        }
    }
}
  • 開く、 SphereCommands Visual Studio でのスクリプト。Open the SphereCommands script in Visual Studio.
  • 次のようにスクリプトを更新します。Update the script to read as follows:
using UnityEngine;

public class SphereCommands : MonoBehaviour
{
    Vector3 originalPosition;

    // Use this for initialization
    void Start()
    {
        // Grab the original local position of the sphere when the app starts.
        originalPosition = this.transform.localPosition;
    }

    // Called by GazeGestureManager when the user performs a Select gesture
    void OnSelect()
    {
        // If the sphere has no Rigidbody component, add one to enable physics.
        if (!this.GetComponent<Rigidbody>())
        {
            var rigidbody = this.gameObject.AddComponent<Rigidbody>();
            rigidbody.collisionDetectionMode = CollisionDetectionMode.Continuous;
        }
    }

    // Called by SpeechManager when the user says the "Reset world" command
    void OnReset()
    {
        // If the sphere has a Rigidbody component, remove it to disable physics.
        var rigidbody = this.GetComponent<Rigidbody>();
        if (rigidbody != null)
        {
            rigidbody.isKinematic = true;
            Destroy(rigidbody);
        }

        // Put the sphere back into its original local position.
        this.transform.localPosition = originalPosition;
    }

    // Called by SpeechManager when the user says the "Drop sphere" command
    void OnDrop()
    {
        // Just do the same logic as a Select gesture.
        OnSelect();
    }
}
  • エクスポートし、ビルド、HoloLens にアプリを展開します。Export, build and deploy the app to your HoloLens.
  • 球体のいずれかを確認し、"球のドロップ"。Look at one of the spheres, and say "Drop Sphere".
  • たとえば"世界のリセット"最初の位置に戻すにします。Say "Reset World" to bring them back to their initial positions.

第 5 章 - 空間のサウンドChapter 5 - Spatial sound

この章で、アプリに音楽を追加し、特定のアクションでのサウンド効果をトリガーします。In this chapter, we'll add music to the app, and then trigger sound effects on certain actions. 使用する空間サウンドサウンド 3D 空間で特定の場所を提供します。We'll be using spatial sound to give sounds a specific location in 3D space.

目標Objectives

  • 世界でホログラムお話しします。Hear holograms in your world.

手順Instructions

  • 上部のメニューから選択する Unity で編集 > プロジェクトの設定 > オーディオIn Unity select from the top menu Edit > Project Settings > Audio
  • 右側にある Inspector パネルで、検索、立体音場プラグイン設定および MS HRTF 立体音場します。In the Inspector Panel on the right side, find the Spatializer Plugin setting and select MS HRTF Spatializer.
  • ホログラムプロジェクト パネルで、フォルダーをドラッグ、アンビエンスオブジェクト、 OrigamiCollection階層パネル内のオブジェクト。From the Holograms folder in the Project panel, drag the Ambience object onto the OrigamiCollection object in the Hierarchy Panel.
  • 選択OrigamiCollectionを見つけて、オーディオ ソースインスペクター パネルの コンポーネント。Select OrigamiCollection and find the Audio Source component in the Inspector panel. これらのプロパティを変更します。Change these properties:
    • チェック、 Spatializeプロパティ。Check the Spatialize property.
    • チェック、起動状態で再生します。Check the Play On Awake.
    • 変更空間 Blend3Dに右側のスライダーをドラッグしています。Change Spatial Blend to 3D by dragging the slider all the way to the right. 値は、スライダーを移動するときに 0 から 1 に変更する必要があります。The value should change from 0 to 1 when you move the slider.
    • チェック、ループプロパティ。Check the Loop property.
    • 展開3D サウンド設定、入力と0.1ドップラー レベルします。Expand 3D Sound Settings, and enter 0.1 for Doppler Level.
    • 設定ボリューム ロールオフ対数ロールオフします。Set Volume Rolloff to Logarithmic Rolloff.
    • 設定最大距離20します。Set Max Distance to 20.
  • スクリプトフォルダー、という名前のスクリプト作成SphereSoundsします。In the Scripts folder, create a script named SphereSounds.
  • ドラッグ アンド ドロップSphereSoundsSphere1Sphere2階層内のオブジェクト。Drag and drop SphereSounds to the Sphere1 and Sphere2 objects in the Hierarchy.
  • 開いているSphereSounds Visual Studio で、次のコードを更新およびすべて保存します。Open SphereSounds in Visual Studio, update the following code and Save All.
using UnityEngine;

public class SphereSounds : MonoBehaviour
{
    AudioSource impactAudioSource = null;
    AudioSource rollingAudioSource = null;

    bool rolling = false;

    void Start()
    {
        // Add an AudioSource component and set up some defaults
        impactAudioSource = gameObject.AddComponent<AudioSource>();
        impactAudioSource.playOnAwake = false;
        impactAudioSource.spatialize = true;
        impactAudioSource.spatialBlend = 1.0f;
        impactAudioSource.dopplerLevel = 0.0f;
        impactAudioSource.rolloffMode = AudioRolloffMode.Logarithmic;
        impactAudioSource.maxDistance = 20f;

        rollingAudioSource = gameObject.AddComponent<AudioSource>();
        rollingAudioSource.playOnAwake = false;
        rollingAudioSource.spatialize = true;
        rollingAudioSource.spatialBlend = 1.0f;
        rollingAudioSource.dopplerLevel = 0.0f;
        rollingAudioSource.rolloffMode = AudioRolloffMode.Logarithmic;
        rollingAudioSource.maxDistance = 20f;
        rollingAudioSource.loop = true;

        // Load the Sphere sounds from the Resources folder
        impactAudioSource.clip = Resources.Load<AudioClip>("Impact");
        rollingAudioSource.clip = Resources.Load<AudioClip>("Rolling");
    }

    // Occurs when this object starts colliding with another object
    void OnCollisionEnter(Collision collision)
    {
        // Play an impact sound if the sphere impacts strongly enough.
        if (collision.relativeVelocity.magnitude >= 0.1f)
        {
            impactAudioSource.Play();
        }
    }

    // Occurs each frame that this object continues to collide with another object
    void OnCollisionStay(Collision collision)
    {
        Rigidbody rigid = gameObject.GetComponent<Rigidbody>();

        // Play a rolling sound if the sphere is rolling fast enough.
        if (!rolling && rigid.velocity.magnitude >= 0.01f)
        {
            rolling = true;
            rollingAudioSource.Play();
        }
        // Stop the rolling sound if rolling slows down.
        else if (rolling && rigid.velocity.magnitude < 0.01f)
        {
            rolling = false;
            rollingAudioSource.Stop();
        }
    }

    // Occurs when this object stops colliding with another object
    void OnCollisionExit(Collision collision)
    {
        // Stop the rolling sound if the object falls off and stops colliding.
        if (rolling)
        {
            rolling = false;
            impactAudioSource.Stop();
            rollingAudioSource.Stop();
        }
    }
}
  • スクリプトを保存し、Unity に戻ります。Save the script, and return to Unity.
  • エクスポートし、ビルド、HoloLens にアプリを展開します。Export, build and deploy the app to your HoloLens.
  • 近いとステージからかけ離れていますに移動し、サウンドを変更する並列を有効にします。Move closer and further from the Stage and turn side-to-side to hear the sounds change.

第 6 章 - 空間のマッピングChapter 6 - Spatial mapping

ここでは、使用する空間マッピング現実の世界での実際のオブジェクトにゲーム ボードを配置します。Now we are going to use spatial mapping to place the game board on a real object in the real world.

目標Objectives

  • 仮想世界に、現実の世界を表示します。Bring your real world into the virtual world.
  • ここが最も重要なホログラムを配置します。Place your holograms where they matter most to you.

手順Instructions

  • Unity では、クリックして、ホログラムプロジェクト パネル内のフォルダー。In Unity, click on the Holograms folder in the Project panel.
  • ドラッグ、空間マッピングのルートに資産、階層します。Drag the Spatial Mapping asset into the root of the Hierarchy.
  • をクリックして、空間マッピング階層内のオブジェクト。Click on the Spatial Mapping object in the Hierarchy.
  • インスペクター パネル、次のプロパティを変更します。In the Inspector panel, change the following properties:
    • チェック、 Visual メッシュの描画ボックス。Check the Draw Visual Meshes box.
    • 検索描画マテリアル右側の円をクリックします。Locate Draw Material and click the circle on the right. 型"ワイヤー フレーム"上部にある検索フィールドにします。Type "wireframe" into the search field at the top. [結果] をクリックし、ウィンドウを閉じます。Click on the result and then close the window. これを行うときに、描画マテリアルの値は、ワイヤー フレームに設定を取得する必要があります。When you do this, the value for Draw Material should get set to Wireframe.
  • エクスポートし、ビルド、HoloLens にアプリを展開します。Export, build and deploy the app to your HoloLens.
  • アプリを実行すると、ワイヤー フレーム メッシュは、現実の世界をオーバーレイします。When the app runs, a wireframe mesh will overlay your real world.
  • この段階では、オフと床のローリング球はフォールバックをご覧ください。Watch how a rolling sphere will fall off the stage, and onto the floor!

現在、OrigamiCollection を新しい場所に移動する方法について説明します。Now we'll show you how to move the OrigamiCollection to a new location:

  • スクリプトフォルダー、という名前のスクリプト作成TapToPlaceParentします。In the Scripts folder, create a script named TapToPlaceParent.
  • 階層、展開、 OrigamiCollectionを選択し、ステージオブジェクト。In the Hierarchy, expand the OrigamiCollection and select the Stage object.
  • ドラッグ、 TapToPlaceParentステージ オブジェクトのスクリプト。Drag the TapToPlaceParent script onto the Stage object.
  • 開く、 TapToPlaceParent Visual Studio でスクリプトを作成し、次に更新します。Open the TapToPlaceParent script in Visual Studio, and update it to be the following:
using UnityEngine;

public class TapToPlaceParent : MonoBehaviour
{
    bool placing = false;

    // Called by GazeGestureManager when the user performs a Select gesture
    void OnSelect()
    {
        // On each Select gesture, toggle whether the user is in placing mode.
        placing = !placing;

        // If the user is in placing mode, display the spatial mapping mesh.
        if (placing)
        {
            SpatialMapping.Instance.DrawVisualMeshes = true;
        }
        // If the user is not in placing mode, hide the spatial mapping mesh.
        else
        {
            SpatialMapping.Instance.DrawVisualMeshes = false;
        }
    }

    // Update is called once per frame
    void Update()
    {
        // If the user is in placing mode,
        // update the placement to match the user's gaze.

        if (placing)
        {
            // Do a raycast into the world that will only hit the Spatial Mapping mesh.
            var headPosition = Camera.main.transform.position;
            var gazeDirection = Camera.main.transform.forward;

            RaycastHit hitInfo;
            if (Physics.Raycast(headPosition, gazeDirection, out hitInfo,
                30.0f, SpatialMapping.PhysicsRaycastMask))
            {
                // Move this object's parent object to
                // where the raycast hit the Spatial Mapping mesh.
                this.transform.parent.position = hitInfo.point;

                // Rotate this object's parent object to face the user.
                Quaternion toQuat = Camera.main.transform.localRotation;
                toQuat.x = 0;
                toQuat.z = 0;
                this.transform.parent.rotation = toQuat;
            }
        }
    }
}
  • ビルドをエクスポート、およびアプリを展開します。Export, build and deploy the app.
  • 今すぐに gazing、選択ジェスチャを使用して、新しい場所に移動しもう一度選択ジェスチャを使用して、特定の場所にゲームを配置できる必要がありますなります。Now you should now be able to place the game in a specific location by gazing at it, using the Select gesture and then moving to a new location, and using the Select gesture again.

第 7 章 – Holographic 楽しいChapter 7 - Holographic fun

目標Objectives

  • Holographic 黄泉の入り口を明らかになります。Reveal the entrance to a holographic underworld.

手順Instructions

これを holographic 黄泉を明らかにする方法について説明します。Now we'll show you how to uncover the holographic underworld:

  • ホログラムプロジェクト パネル内のフォルダー。From the Holograms folder in the Project Panel:
    • ドラッグ黄泉の子に階層にOrigamiCollectionします。Drag Underworld into the Hierarchy to be a child of OrigamiCollection.
  • スクリプトフォルダー、という名前のスクリプト作成HitTargetします。In the Scripts folder, create a script named HitTarget.
  • 階層、展開、 OrigamiCollectionします。In the Hierarchy, expand the OrigamiCollection.
  • 展開、ステージオブジェクトし、選択、ターゲットオブジェクト (青の展開)。Expand the Stage object and select the Target object (blue fan).
  • ドラッグ、 HitTargetにスクリプト、ターゲットオブジェクト。Drag the HitTarget script onto the Target object.
  • 開く、 HitTarget Visual Studio でスクリプトを作成し、次に更新します。Open the HitTarget script in Visual Studio, and update it to be the following:
using UnityEngine;

public class HitTarget : MonoBehaviour
{
    // These public fields become settable properties in the Unity editor.
    public GameObject underworld;
    public GameObject objectToHide;

    // Occurs when this object starts colliding with another object
    void OnCollisionEnter(Collision collision)
    {
        // Hide the stage and show the underworld.
        objectToHide.SetActive(false);
        underworld.SetActive(true);

        // Disable Spatial Mapping to let the spheres enter the underworld.
        SpatialMapping.Instance.MappingEnabled = false;
    }
}
  • Unity では、選択、ターゲットオブジェクト。In Unity, select the Target object.
  • 2 つのパブリック プロパティに表示されます、ヒット ターゲットコンポーネントと、シーン内のオブジェクトを参照する必要があります。Two public properties are now visible on the Hit Target component and need to reference objects in our scene:
    • ドラッグ黄泉から、階層パネル、黄泉プロパティをヒット ターゲットコンポーネント。Drag Underworld from the Hierarchy panel to the Underworld property on the Hit Target component.
    • ドラッグステージから、階層パネル、オブジェクトを非表示にするプロパティをヒット ターゲットコンポーネント。Drag Stage from the Hierarchy panel to the Object to Hide property on the Hit Target component.
  • ビルドをエクスポート、およびアプリを展開します。Export, build and deploy the app.
  • Origami コレクションをフロアに置き、選択ジェスチャを使用してドロップ球にします。Place the Origami Collection on the floor, and then use the Select gesture to make a sphere drop.
  • 球に達すると、ターゲット (青の展開)、展開が発生します。When the sphere hits the target (blue fan), an explosion will occur. コレクションを非表示にして、黄泉に穴が表示されます。The collection will be hidden and a hole to the underworld will appear.

最後ですThe end

このチュートリアルは終わりです。And that's the end of this tutorial!

学習内容。You learned:

  • Unity で holographic アプリを作成する方法。How to create a holographic app in Unity.
  • 作成する方法、視線、ジェスチャ、音声、サウンドの使用と空間マッピング。How to make use of gaze, gesture, voice, sound, and spatial mapping.
  • ビルドして、Visual Studio を使用してアプリをデプロイする方法。How to build and deploy an app using Visual Studio.

独自のホログラフィック操作の作成を開始する準備が整いました。You are now ready to start creating your own holographic experience!

関連項目See also