注意

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 基本 101E:Emulator を使用したプロジェクトの完了MR Basics 101E: Complete project with emulator

このチュートリアルでは、Unity でビルドされた完全なプロジェクトについて説明します。これは、宝石ジェスチャ音声入力空間サウンド空間マッピングなど、HoloLens のコア Windows Mixed Reality 機能を示しています.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 基本 101E:Emulator を使用したプロジェクトの完了MR Basics 101E: Complete project with emulator ✔️✔️

開始前の準備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.

Chapter 1-"Holo" ワールドChapter 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.
  • 新しいシーンを保存します。ファイル / を名前を付けて保存します。Save the new scene: File / Save Scene As.
  • シーンにOrigamiという名前を付け、[保存] ボタンを押します。Name the scene Origami and press the Save button.

メインカメラの設定Setup the main camera

  • [階層] パネルで、 [メインカメラ] を選択します。In the Hierarchy Panel, select Main Camera.
  • インスペクターで、変換位置を0、0、0に設定します。In the Inspector set its transform position to 0,0,0.
  • " Clear Flags " プロパティを見つけ、ドロップダウンから [ 単色] に変更します。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、およびを 0に設定します。Set R, G, B, and A to 0.

シーンを設定するSetup the scene

  • [階層] パネルで、 [作成] をクリックし、 [空の作成] をクリックします。In the Hierarchy Panel, click on Create and Create Empty.
  • 新しい [作成]オブジェクトを右クリックし、[名前の変更] を選択します。Right-click the new GameObject and select Rename. OrigamiCollectionオブジェクトの名前を「」に変更します。Rename the GameObject to OrigamiCollection.
  • [プロジェクト] パネル[ホログラム] フォルダーから次のようにします。From 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.
  • プレビューモードを停止するには、もう一度Playを押します。Press Play a second time to stop preview mode.

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

  • Unity で、 [ファイル > ビルド設定] を選択します。In Unity select File > Build Settings.
  • [プラットフォーム] ボックスの一覧で [Windows ストア] を選択し、 [プラットフォームの切り替え] をクリックします。Select Windows Store in the Platform list and click Switch Platform.
  • SDKUniversal 10に設定し、ビルドの種類D3Dに設定します。Set SDK to Universal 10 and Build Type to D3D.
  • Unity C#プロジェクトを確認します。Check Unity C# Projects.
  • シーンを追加するには、[開いているシーンの追加] をクリックします。Click Add Open Scenes to add the scene.
  • [プレーヤーの設定] をクリックします。Click Player Settings....
  • [インスペクター] パネルで、[ Windows ストア] ロゴを選択します。In the Inspector Panel select the Windows Store logo. 次に、 [発行の設定] を選択します。Then select Publishing Settings.
  • [機能] セクションで、マイクSpatialPerception機能を選択します。In the Capabilities section, select the Microphone and SpatialPerception capabilities.
  • ビルドの設定 ウィンドウに戻り、ビルド をクリックします。Back in the Build Settings window, click Build.
  • "App" という名前の新しいフォルダーを作成します。Create a New Folder named "App".
  • アプリフォルダーをシングルクリックします。Single click the App Folder.
  • [フォルダーの選択] をクリックします。Press Select Folder.
  • Unity が完了すると、エクスプローラーウィンドウが表示されます。When Unity is done, a File Explorer window will appear.
  • アプリフォルダーを開きます。Open the App folder.
  • Origami Visual Studio ソリューションを開きます。Open the Origami Visual Studio Solution.
  • Visual Studio の上部のツールバーを使用して、ターゲットをデバッグからリリースに変更し、ARM からX86に変更します。Using the top toolbar in Visual Studio, change the target from Debug to Release and from ARM to X86.
    • デバイスのボタンの横にある矢印をクリックし、 [HoloLens Emulator] を選択します。Click on the arrow next to the Device button, and select HoloLens Emulator.
    • [デバッグ]、[デバッグなしで開始] の順にクリック > 、Ctrl キーを押しながら F5キーを押します。Click Debug -> Start Without debugging or press Ctrl + F5.
    • しばらくすると、エミュレーターは Origami プロジェクトから開始されます。After some time the emulator will start with the Origami project. エミュレーターを初めて起動するときは、エミュレーターが起動するまでに15分程度かかることがあります。When first launching the emulator, it can take as long as 15 minutes for the emulator to start up. 開始したら、閉じないでください。Once it starts, do not close it.

第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.
  • [プロジェクト] パネルの [Scripts] フォルダーを右クリックします。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 thecursor 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.
  • 以前にエミュレーターに配置するために使用した Visual Studio ソリューションに戻ります。Return to the Visual Studio solution previously used to deploy to the emulator.
  • メッセージが表示されたら、[すべて再読み込み] を選択します。Select 'Reload All' when prompted.
  • [デバッグ]、[デバッグなしで開始] の順にクリック > 、Ctrl キーを押しながら F5キーを押します。Click Debug -> Start Without debugging or press Ctrl + F5.
  • Xbox コントローラーを使用してシーンを周囲に表示します。Use the Xbox controller to look around the scene. カーソルがオブジェクトの形状とどのように連動するかに注目してください。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

まず、Select ジェスチャを検出できるスクリプトを作成します。We'll start by creating a script than can detect the Select gesture.

  • Scriptsフォルダーで、 GazeGestureManagerという名前のスクリプトを作成します。In the Scripts folder, create a script named GazeGestureManager.
  • GazeGestureManagerスクリプトを階層内のOrigamiCollectionオブジェクトにドラッグします。Drag the GazeGestureManager script onto the OrigamiCollection object in the Hierarchy.
  • Visual Studio でGazeGestureManagerスクリプトを開き、次のコードを追加します。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 Start()
    {
        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 the HoloLens emulator.
  • シーンを見て、球体の1つを中心にします。Look around the scene, and center on one of the spheres.
  • Xbox コントローラーのAボタンを押すか、space キーを押して選択ジェスチャをシミュレートします。Press the A button on the Xbox controller or press the Spacebar to simulate the Select gesture.

第4章-音声Chapter 4 - Voice

この章では、次の2つの音声コマンドのサポートを追加します。"ワールドのリセット" を使用して、ドロップされた球体を元の場所に返し、"ドロップ球" を使用して球をフォールします。In this chapter, we'll add support for two voice commands: "Reset world" to returns 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

  • Scriptsフォルダーで、 SpeechManagerという名前のスクリプトを作成します。In the Scripts folder, create a script named SpeechManager.
  • SpeechManagerスクリプトを階層内のOrigamiCollectionオブジェクトにドラッグします。Drag the SpeechManager script onto the OrigamiCollection object in the Hierarchy
  • Visual Studio でSpeechManagerスクリプトを開きます。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();
        }
    }
}
  • Visual Studio でSphereCommandsスクリプトを開きます。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 the HoloLens emulator.
  • エミュレーターは PC のマイクをサポートし、音声に応答します。つまり、カーソルが球体の1つになるようにビューを調整し、"ドロップ球" と言います。The emulator will support your PC's microphone and respond to your voice: adjust the view so the cursor is on 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 the Unity select from the top menu Edit > Project Settings > Audio
  • Spatializer プラグイン設定を探し、 [MS HRTF Spatializer] を選択します。Find the Spatializer Plugin setting and select MS HRTF Spatializer.
  • ホログラム フォルダーから、アンビエント オブジェクトを 階層 パネルのOrigamiCollectionオブジェクトにドラッグします。From the Holograms folder, drag the Ambience object onto the OrigamiCollection object in the Hierarchy Panel.
  • [OrigamiCollection] を選択し、オーディオソースコンポーネントを検索します。Select OrigamiCollection and find the Audio Source component. 次のプロパティを変更します。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.
    • Loopプロパティを確認します。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.
  • Scriptsフォルダーで、 SphereSoundsという名前のスクリプトを作成します。In the Scripts folder, create a script named SphereSounds.
  • SphereSoundsを階層内のSphere1オブジェクトとSphere2オブジェクトにドラッグします。Drag SphereSounds to the Sphere1 and Sphere2 objects in the Hierarchy.
  • Visual Studio でSphereSoundsを開き、次のコードを更新してすべてを保存します。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 the HoloLens emulator.
  • すべての効果を取得するための磨耗のヘッドホンと、より近くに移動し、サウンドが変化することを確認します。Wear headphones to get the full effect, and move closer and further from the Stage to hear the sounds change.

Chapter 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

  • プロジェクト パネルの ホログラム フォルダーをクリックします。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:
    • [ビジュアルメッシュの描画] チェックボックスをオンにします。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.
  • アプリのエクスポート、ビルド、および HoloLens エミュレーターへのデプロイを行います。Export, build and deploy the app to the HoloLens emulator.
  • アプリを実行すると、前にスキャンした実際の生活室のメッシュがワイヤーフレームでレンダリングされます。When the app runs, a mesh of a previously scanned real-world living room will be rendered in wireframe.
  • ローリング球がステージとフロアにどのように分かれているかを見てください。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:

  • Scriptsフォルダーで、 TapToPlaceParentという名前のスクリプトを作成します。In the Scripts folder, create a script named TapToPlaceParent.
  • 階層で、 OrigamiCollectionを展開し、 [ステージ] オブジェクトを選択します。In the Hierarchy, expand the OrigamiCollection and select the Stage object.
  • TapToPlaceParentスクリプトを Stage オブジェクトにドラッグします。Drag the TapToPlaceParent script onto the Stage object.
  • Visual Studio でTapToPlaceParentスクリプトを開き、次のように更新します。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.
  • これで、特定の場所にゲームを配置できるようになりました。これを行うには、選択ジェスチャ (aまたは space キー) を使用してから新しい場所に移動し、もう一度 select ジェスチャを使用します。Now you should now be able to place the game in a specific location by gazing at it, using the Select gesture (A or Spacebar) and then moving to a new location, and using the Select gesture again.

最後です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, sounds, and spatial mapping.
  • Visual Studio を使用してアプリをビルドしてデプロイする方法。How to build and deploy an app using Visual Studio.

これで、独自の holographic アプリの作成を開始する準備ができました。You are now ready to start creating your own holographic apps!

関連項目See also