注意

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


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

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

  • [階層] パネルで、 [メインカメラ] を選択します。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 (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.
  • プレビューモードを停止するには、もう一度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 Universal Windows Platform 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.

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

  • 表示された [エクスプローラー] ウィンドウで、"App" という名前の新しいフォルダーを作成します。In the file explorer window that appears, 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を開きます (ダブルクリックします)。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 アドレスがわからない場合は、設定 の ネットワーク & Internet > 詳細オプション > 確認するか、cortanaに "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.

  • これで、Origami プロジェクトが作成され、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.
  • [プロジェクト] パネルの [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 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.

  • 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 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つの音声コマンドのサポートを追加します。"ワールドのリセット" を使用して、ドロップされた球体を元の場所に返し、"球を落下する" ようにします。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

  • 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 your HoloLens.
  • 球体の1つを見て、"ドロップ球" と言います。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
  • 右側の [インスペクター] パネルで、 Spatializer プラグインの設定を見つけて、 [MS HRTF Spatializer] を選択します。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.
    • 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 and drop 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 your HoloLens.
  • ステージからさらに近い場所に移動し、サウンドが変化するのを左右に並べて表示します。Move closer and further from the Stage and turn side-to-side 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

  • 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:
    • [ビジュアルメッシュの描画] チェックボックスをオンにします。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:

  • 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.
  • これで、[選択] ジェスチャを使用して新しい場所に移動し、もう一度 Select ジェスチャを使用して、ゲームを特定の場所に配置できるようになりました。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.
  • Scriptsフォルダーで、ヒットターゲットという名前のスクリプトを作成します。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).
  • ヒットターゲットスクリプトをターゲットオブジェクトにドラッグします。Drag the HitTarget script onto the Target object.
  • 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 コレクションを床に配置し、Select ジェスチャを使用して球をドロップします。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.

これで、独自の holographic エクスペリエンスの作成を開始する準備ができました。You are now ready to start creating your own holographic experience!

関連項目See also