5.ソルバーを使用した動的なコンテンツの作成5. Creating dynamic content using Solvers

概要Overview

このチュートリアルでは、複雑な空間配置シナリオを解決するために、MRTK で使用できる "ソルバー" という配置ツールを使用して、ホログラムを動的に配置する方法について学習します。In this tutorial, you will explore ways to dynamically place holograms using the MRTK's available placement tools, known as Solvers, to solve complex spatial placement scenarios. MRTK では、ソルバーとは、シーン内に存在する自分、ユーザー、他のゲーム オブジェクトをオブジェクトが追跡できるようにするために使用される、スクリプトと動作のシステムです。In the MRTK, Solvers are a system of scripts and behaviors used to allow objects to follow you, the user, or other game objects in the scene. これらは、特定の場所にスナップして、アプリをさらに直感的にするために使用することもできます。They can also be used to snap to certain positions, making your app more intuitive.

目標Objectives

  • MRTK ソルバーの紹介Introduce the MRTK's Solvers
  • ソルバーを使用してユーザーをオブジェクトに誘導する方法を学習するLearn how to use Solvers to direct the user to objects
  • ソルバーを使用してオブジェクトの位置を変更する方法を学習するLearn how to use Solvers to reposition objects

MRTK でのソルバーの場所Location of Solvers in the MRTK

MRTK のソルバーは、MRTK SDK フォルダーにあります。The MRTK's Solvers are located in the MRTK SDK folder. プロジェクトで使用可能なソルバーを表示するには、[プロジェクト] ウィンドウで、 [アセット] > [MRTK] > [SDK] > [機能] > [ユーティリティ] > [ソルバー] の順に移動します。To see the available Solvers in your project, in the Project window, navigate to Assets > MRTK > SDK > Features > Utilities > Solvers:

Solvers フォルダーが選択されている Unity プロジェクト ウィンドウ

このチュートリアルでは、Directional Indicator Solver と Tap To Place Solver の実装方法について説明します。In this tutorial, we will review the implementation of the Directional Indicator Solver and the Tap To Place Solver. MRTK で利用可能なすべてのソルバーの詳細については、MRTK ドキュメント ポータルソルバーに関するガイドを参照してください。To learn more about the full range of Solvers available in the MRTK, you can refer to the Solvers guide in the MRTK Documentation Portal.

注意

Directional Indicator Solver は、上記の [Solvers] フォルダーには含まれていません。これは試験的な機能であるため、[アセット] > [MRTK] > [SDK] > [試験的] > [機能] > [ユーティリティ] フォルダーにあります。The Directional Indicator Solver is not located in the Solvers folders referenced above, but in the Assets > MRTK > SDK > Experimental > Features > Utilities folders, because it is an experimental feature.

Directional Indicator Solver を使用してユーザーをオブジェクトに誘導するUsing the Directional Indicator Solver to direct the user to objects

[プロジェクト] ウィンドウで、 [アセット] > [MRTK.Tutorials.GettingStarted] > [Prefabs](プレハブ) フォルダーの順に移動し、 [シェブロン] プレハブをクリックして [階層] ウィンドウにドラッグします。次に、[変換] の [位置] を X = 0, Y = 0, Z = 2 に設定して、RoverExplorer オブジェクトの近くに配置します。In the Project window, navigate to the Assets > MRTK.Tutorials.GettingStarted > Prefabs folder, click-and-drag the Chevron prefab into the Hierarchy window, and set it's Transform Position to X = 0, Y = 0, Z = 2 to position it near the RoverExplorer object:

新しく追加したシェブロン プレハブが選択されている Unity

ヒント

シーンに含まれるカメラや他のアイコンがオブジェクトを見にくくしていたり操作の邪魔になったりしている場合は、上の図に示すように、ギズモをオフに切り替えることによってこれらを非表示にできます。If you find that the camera or any other icons in your scene are hiding the objects or are distracting, you can hide these by toggling the Gizmos to the off position, as shown in the image above. ギズモ メニューと、それを使用してシーン ビューを最適化する方法の詳細については、Unity の ギズモ メニューに関するドキュメントを参照してください。To learn more about the Gizmos menu and how you can use it to optimize your scene view, you can refer to Unity's Gizmos menu documentation.

新しく追加したシェブロン オブジェクトの名前を Indicator に変更し、[インスペクター] ウィンドウで [コンポーネントの追加] ボタンを使用して、DirectionalIndicator を追加します。Rename the newly added Chevron object Indicator, then in the Inspector window, use the Add Component button to add the DirectionalIndicator:

DirectionalIndicator ソルバー コンポーネントが追加された Unity

注意

ソルバーを追加する場合 (この例では DirectionalIndicator コンポーネント)、ソルバーで SolverHandler コンポーネントが必要になるため、それが自動的に追加されます。When you add a Solver, in this case, the DirectionalIndicator component, the SolverHandler component is automatically added because Solvers require it.

注意

Directional Indicator Controller (Script) は MRTK の一部ではありませんが、チュートリアル アセットには含まれていました。The Directional Indicator Controller (Script) is not part of the MRTK but was included with the tutorial assets.

DirectionalIndicator および SolverHandler コンポーネントを次のように構成します。Configure the DirectionalIndicator and SolverHandler components as follows:

  • SolverHandler コンポーネントの [Tracked Target Type](追跡対象の種類)[ヘッド] に設定されていることを確認しますVerify that the SolverHandler component's Tracked Target Type is set to Head
  • RoverExplorer を、[階層] ウィンドウから [None (Transform)](なし (変換)) フィールドにドラッグして、DirectionalIndicator コンポーネントの [Directional Target](方向のターゲット) に割り当てますAssign the RoverExplorer to the DirectionalIndicator component's Directional Target by dragging it from the Hierarchy window into the None (Transform) field
  • [View Offset](表示オフセット) を 0.2 に変更しますChange the View Offset to 0.2

DirectionalIndicator ソルバー コンポーネントが構成されている Unity

[再生] ボタンを押してゲーム モードに入り、マウスの右ボタンを押したままにしてマウスを左右に動かし、視線入力の方向を回転させます。次の点に注意してください。Press the Play button to enter Game mode, press-and-hold the right mouse button while moving your mouse to the left or right to rotate your gaze direction, and notice the following:

  • RoverExplorer オブジェクトから視線を外すと、Indicator オブジェクトが表示され、RoverExplorer オブジェクトを指しますWhen you look away from the RoverExplorer object, the Indicator object will appear and point towards the RoverExplorer object

DirectionalIndicator ソルバーが使用されている Unity 再生モードの分割ビュー

注意

[シーン] ウィンドウにカメラの光線が表示されない場合は、上の図に示すように、ギズモ メニューが有効になっていることを確認してください。If you don't see the camera ray in your Scene window, make sure your Gizmos menu is enabled, as shown in the image above.

ヒント

エディター内入力シミュレーションの使用方法については、MRTK ドキュメント ポータルで「エディター内ハンド入力シミュレーションを使用したシーンのテスト」ガイドを参照してください。To learn how to use the in-editor input simulation, you can refer to the Using the In-Editor Hand Input Simulation to test a scene guide in the MRTK Documentation Portal.

ヒント

コンピューターにマイクがある場合は、"toggle diagnostics"(診断をトグル) という音声コマンドを使用することにより、[ゲーム] ウィンドウに表示される診断パネルのアクティブ状態を簡単に切り替えることができます。If your computer has a microphone, you can easily toggle the active state of the Diagnostics panel that appears in the Game window by using the speech command "toggle diagnostics." または、[MRTK Configuration Profile](MRTK 構成プロファイル) > [診断] > [Enable Diagnostics System](診断システムを有効にする) でも無効にできます。Alternatively, you can disable it in the MRTK Configuration Profile > Diagnostics > Enable Diagnostics System. ただし、開発中は、通常は診断システムをアクティブにしておくことをお勧めします。However, it is generally recommended to keep the Diagnostics System active during development.

Tap to Place Solver を使用してオブジェクトの位置を変更するUsing the Tap to Place Solver to reposition objects

[階層] ウィンドウで、RoverExplorer > RoverAssembly オブジェクトの順に選択します。次に、[インスペクター] ウィンドウで [コンポーネントの追加] ボタンを使用し、Tap To Place (Script) コンポーネントを追加して、次のように構成します。In the Hierarchy window, select the RoverExplorer > RoverAssembly object, then in the Inspector window, use the Add Component button to add the Tap To Place (Script) component, and configure it as follows:

  • SolverHandler コンポーネントの [Tracked Target Type](追跡対象の種類)[ヘッド] に設定されていることを確認しますVerify that the SolverHandler component's Tracked Target Type is set to Head
  • [Keep Orientation Vertical](向きを垂直に保つ) チェックボックスをオンにしますCheck the Keep Orientation Vertical checkbox
  • [Magnetic Surfaces](磁気サーフェス) > [Element 0](要素 0) ドロップダウンから、 [Spatial Awareness](空間認識) 以外のすべてのオプションをオフにしますFrom the Magnetic Surfaces > Element 0 dropdown, uncheck all options expect Spatial Awareness

TapToPlace ソルバー コンポーネントが追加されて構成されている Unity

注意

[Magnetic Surfaces](磁気サーフェス) 設定により、オブジェクトを配置するときに Tap To Place (Script) コンポーネントで検出できるオブジェクトが決定します。The Magnetic Surfaces setting determines which objects the Tap To Place (Script) component can detect when placing an object. この設定を [Spatial Awareness](空間認識) のみに変更することにより、Tap To Place (Script) コンポーネントは、[Spatial Awareness](空間認識) という名前の Unity レイヤーのオブジェクトにのみ Rover を配置できるようになります。この Unity レイヤーは、既定で HoloLens によって生成される空間認識メッシュです。By changing the setting to only Spatial Awareness, the Tap To Place (Script) component will only be able to place the Rover on objects on the Unity Layer named Spatial Awareness, which by default is the Spatial Awareness Mesh generated by the HoloLens.

レイヤーの詳細については、Unity のレイヤーに関するドキュメントを参照してください。To learn more about Layers, you can refer to Unity's Layers documentation.

ヒント

Tap To Place 機能を HoloLens でテストするときにこの空間認識メッシュを表示したい場合は、空間メッシュ オブザーバーの表示オプションを一時的に [表示] に設定できます。If you want to see the Spatial Awareness Mesh when testing the Tap To Place functionality on your HoloLens, you can temporarily set the Spatial Mesh Observer's Display Option to Visible. 表示オプションを変更する方法については、「空間認識表示オプションの変更」の手順を参照してください。For a reminder on how to change the Display Option, you can refer to the Changing the Spatial Awareness Display Option instructions.

[階層] ウィンドウで RoverAssembly オブジェクトを選択したまま、[インスペクター] ウィンドウで On Placing Started () イベントを見つけて、 + アイコンをクリックし、新しいイベントを追加します。With the RoverAssembly object still selected in the Hierarchy window, in the Inspector window, locate the On Placing Started () event and click the + icon to add a new event:

TapToPlace OnPlacingStarted イベントが追加された Unity

イベントを次のように構成します。Configure the event as follows:

  • RoverAssembly オブジェクトを、[階層] ウィンドウから [None (Object)](なし (オブジェクト)) フィールドにドラッグして、On Placing Started () イベントのリスナーとして割り当てますAssign the RoverAssembly object as a listener for the On Placing Started () event by dragging it from the Hierarchy window into the None (Object) field
  • [関数なし] ドロップダウンから、TapToPlace > float SurfaceNormalOffset の順に選択し、イベントがトリガーされたときの SurfaceNormalOffset プロパティ値を更新しますFrom the No Function dropdown, select TapToPlace > float SurfaceNormalOffset to update the SurfaceNormalOffset property value when the event is triggered
  • 引数が 0 に設定されていることを確認しますVerify that the argument is set to 0

TapToPlace OnPlacingStarted イベントが構成された Unity

[階層] ウィンドウの何もない場所を右クリックし、 [3D オブジェクト] > [キューブ] の順に選択して、地面を表す一時オブジェクトを作成し、Transform コンポーネントを次のように構成します。In the Hierarchy window, right-click on an empty spot and select 3D Object > Cube, to create a temporary object representing the ground, and configure the Transform component as follows:

  • 位置:X = 0、Y = -1.65、Z = 6Position: X = 0, Y = -1.65, Z = 6
  • 回転:X = 0、Y = 0、Z = 0Rotation: X = 0, Y = 0, Z = 0
  • スケール:X = 10、Y = 0.2、Z = 10Scale: X = 10, Y = 0.2, Z = 10

一時的な地面キューブ オブジェクトが追加されて配置された Unity

[階層] ウィンドウで一時的な [キューブ] を選択したまま、[インスペクター] ウィンドウの [レイヤー] ドロップダウンを使用して、 [Spatial Awareness](空間認識) レイヤーのみが含まれるようにキューブのレイヤー設定を変更します。With the temporary Cube still selected in the Hierarchy window, in the Inspector window, use the Layers dropdown to change the Cube's Layer setting only to include the Spatial Awareness layer:

一時的な地面キューブ オブジェクト レイヤーが空間認識に設定された Unity

[再生] ボタンを押してゲーム モードに入り、マウスの右ボタンを押したまま、視線入力が RoverAssembly オブジェクトに当たるまでマウスを下方向に移動します。Press the Play button to enter Game mode, then press-and-hold the right mouse button while moving your mouse down until the gaze hit's the RoverAssembly object:

視線入力 RoverAssembly オブジェクトを含む Unity 再生モードの分割ビュー

マウスの左ボタンをクリックして、Tap To Place プロセスを開始します。Click the left mouse button to start the tap-to-place process:

TapToPlace の配置が開始された Unity 再生モードの分割ビュー

マウスの右ボタンを押したままにしてマウスを左右に動かし、視線入力の方向を回転させます。適切な位置に配置できたら、マウスの左ボタンをクリックします。Press-and-hold the right mouse button while moving your mouse to the left or right to rotate your gaze direction, when you are happy with the placement, click the left mouse button:

TapToPlace の配置が終了した Unity 再生モードの分割ビュー

ゲーム モードでの機能のテストが完了したら、キューブ オブジェクトを右クリックし、 [削除] を選択して、オブジェクトをシーンから削除します。Once you are done testing the feature in the Game mode, right-click on the Cube object and select Delete to remove it from the scene:

一時的な地面キューブが選択されている Unity と [削除] コンテキスト ポップアップ メニュー

結論Congratulations

このチュートリアルでは、MRTK の Directional Indicator Solver を使用して、UI 要素でユーザーを直感的にオブジェクトに誘導する方法を学習しました。In this tutorial, you learned how to use the MRTK's Directional Indicator Solver to have a UI element intuitively direct the user to objects. Tap To Place Solver を使用してオブジェクトの位置を簡単に変更する方法についても学習しました。You also learned how to use the Tap To Place Solver to reposition objects easily.

MRTK に含まれるこれらのソルバーや他のソルバーについて学ぶには、MRTK ドキュメント ポータルソルバーに関するガイドを参照してください。To learn more about these and other solvers included with the MRTK, you can refer to the Solvers guide in the MRTK Documentation Portal.

次のチュートリアル:6.ユーザー インターフェイスの作成Next Tutorial: 6. Creating user interfaces