MR の基本 101:デバイスを使用した完全なプロジェクトMR Basics 101: Complete project with device


注意

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 向けには、新しいチュートリアル シリーズが投稿されています。A new series of tutorials has been posted for HoloLens 2.


このチュートリアルでは、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.
  • [Open (開く)] を選択します。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

  • [Hierarchy](階層) パネル で、 [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.
  • [Background](背景) フィールドをクリックして、カラー ピッカーを開きます。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.
  • 新しい [作成] オブジェクト を右クリックし、[名前の変更] を選択します。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.

  • [ビルド] をクリックします。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