7.月着陸船サンプル アプリケーションの作成7. Creating a Lunar Module sample application

このチュートリアルでは、前のレッスンの複数の概念を組み合わせて固有のサンプル エクスペリエンスを作成します。In this tutorial, multiple concepts are combined from previous lessons to create a unique sample experience. ユーザーが追跡対象の手を使用して部品を選択し、月着陸船の組み立てを試みる必要がある部品アセンブリ アプリケーションを作成する方法について説明します。You will learn how to create a part assembly application whereby a user needs to use tracked hands to pick up parts and attempt to assemble a lunar module. 押しボタンを使用して、配置のヒントのオン/オフを切り替えたり、エクスペリエンスをリセットしたり、月着陸船を宇宙に発射したりします。You will use pressable buttons to toggle placement hints on and off, to reset the experience, and to launch the lunar module into space!

今後のチュートリアルでは、空間的な位置合わせのために Azure Spatial Anchors を利用する強力なマルチユーザー ユースケースを含め、このエクスペリエンスを基に構築していきます。In future tutorials, you will continue to build upon this experience, which includes powerful multi-user use cases that leverage Azure Spatial Anchors for spatial alignment.

目標Objectives

  • 前のレッスンの複数の概念を組み合わせて固有のエクスペリエンスを作成するCombine multiple concepts from previous lessons to create a unique experience
  • オブジェクトを切り替える方法を学習するLearn how to toggle objects
  • 押しボタンを使用して複雑なイベントをトリガーするTrigger complex events using pressable buttons
  • 剛体の物理学と力を使用するUse rigidbody physics and forces
  • ヒントの使用を調査するExplore the use of tool tips

月着陸船部品の概要Lunar Module Parts overview

このセクションでは、テーブル上に配置されている 5 つの部品を月着陸船の正しい位置に配置することをユーザーの目標とする、簡単な部品アセンブリの課題を作成します。In this section, you will create a simple part assembly challenge where the user's goal is to place five parts that are spread out on the table at the correct location on the Lunar Module.

これを実現するための主な手順は次のとおりです。The main steps you will take to achieve this are:

  1. ロケット発射台プレハブをシーンに追加するAdd the Rocket Launcher prefab to the scene
  2. すべての部品のオブジェクト操作を有効にするEnable object manipulation for all the parts
  3. Part Assembly Demo (Script) コンポーネントを追加して構成するAdd and configure the Part Assembly Demo (Script) component

注意

Part Assembly Demo (Script) コンポーネントは、MRTK の一部ではありません。The Part Assembly Demo (Script) component is not part of MRTK. このチュートリアルのアセットと共に提供されました。It was provided with this tutorial's assets.

1.ロケット発射台プレハブをシーンに追加する1. Add the Rocket Launcher prefab to the scene

[Project](プロジェクト) ウィンドウで、 [Assets](アセット) > [MRTK.Tutorials.GettingStarted] > [Prefabs](プレハブ) > [RocketLauncher] フォルダーに移動し、 [RocketLauncher] プレハブを [Hierarchy](階層) ウィンドウにドラッグしてシーンに追加し、適切な場所に配置します。次に例を示します。In the Project window, navigate to the Assets > MRTK.Tutorials.GettingStarted > Prefabs > RocketLauncher folder, drag the RocketLauncher prefab into the Hierarchy window to add it to your scene, and then position it at a suitable location, for example:

  • [Transform](変換) の [Position](位置) X = 1.5、Y = -0.4、Z = 0。これにより、ユーザーの右側に腰の高さで配置されますTransform Position X = 1.5, Y = -0.4, Z = 0, so it is positioned to the right of the user at waist height
  • [Transform](変換) の [Rotation](回転) X = 0、Y = 180、Z = 0。これにより、エクスペリエンスの主な機能がユーザーに向けられますTransform Rotation X = 0, Y = 180, Z = 0, so the main features of the experience faces the user

mrlearning-base

2.すべての部品のオブジェクト操作を有効にする2. Enable object manipulation for all the parts

[Hierarchy](階層) ウィンドウで、[RocketLauncher] > [LunarModuleParts] オブジェクトを見つけて、すべての子オブジェクトを選択します。次に、Manipulation Handler (Script) コンポーネントおよび Near Interaction Grabbable (Script) コンポーネントを追加し、Manipulation Handler (Script) を次のように構成します。In the Hierarchy window, locate the RocketLauncher > LunarModuleParts object and select all the child objects, add the Manipulation Handler (Script) component and the Near Interaction Grabbable (Script) component, and then configure the Manipulation Handler (Script) as follows:

  • [Allow Far Manipulation](遠距離操作を許可) チェックボックスをオフにして、近距離操作のみを許可するようにしますUn-check the Allow Far Manipulation checkbox to only allow near interaction
  • [Two Handed Manipulation Type](両手を使った操作の種類)[Move Rotate](移動回転) に変更して、拡大縮小を無効にしますChange Two Handed Manipulation Type to Move Rotate so scaling is disabled

mrlearning-base

ヒント

オブジェクトの操作を実装する方法の詳細な手順については、「3D オブジェクトの操作」の説明を参照してください。For a reminder, with step by step instructions, on how to implement object manipulation, you can refer to the Manipulating 3D Objects instructions.

3.Part Assembly Demo (Script) コンポーネントを追加して構成する3. Add and configure the Part Assembly Demo (Script) component

[LunarModuleParts] 子オブジェクトをすべて選択したまま、Audio Source コンポーネントを追加し、次のように構成します。With all the LunarModuleParts child objects still selected, add an Audio Source component and then configure it as follows:

  • 適切なオーディオ クリップ (たとえば MRKT_Scale_Start) を [AudioClip] フィールドに割り当てますAssign a suitable audio clip to the AudioClip field, for example, MRKT_Scale_Start
  • [Play On Awake](起動時に再生) チェックボックスをオフにして、シーンの読み込み時にオーディオ クリップが自動的に再生されないようにしますUn-check the Play On Awake checkbox, so the audio clip does not automatically play when the scene loads
  • [Spatial Blend](空間ブレンド) を 1 に変更して、空間オーディオを有効にしますChange Spatial Blend to 1, to enable spatial audio

mrlearning-base

[LunarModuleParts] 子オブジェクトがすべて選択された状態で、Part Assembly Demo (Script) コンポーネントを追加します。With all the LunarModuleParts child objects still selected, add the Part Assembly Demo (Script) component:

mrlearning-base

[Hierarchy](階層) ウィンドウで [RoverEnclosure] オブジェクトを選択し、Part Assembly Demo (Script) コンポーネントを次のように構成します。In the Hierarchy window, select the RoverEnclosure object and configure its Part Assembly Demo (Script) component as follows:

  • [Object To Place](配置するオブジェクト) フィールドに、オブジェクト自体 (この場合は RoverEnclosure オブジェクト) を割り当てますTo the Object To Place field, assign the object itself, in this case, the RoverEnclosure object
  • [Location To Place](配置する場所) フィールドに、対応する [PlacementHints] オブジェクト (この場合は RoverEnclosure_PlacementHint オブジェクト) を割り当てますTo the Location To Place field, assign the corresponding PlacementHints object, in this case, the RoverEnclosure_PlacementHint object
  • [Tool Tip Object](ヒント オブジェクト) フィールドに、対応する [ToolTip] (この場合は RoverEnclosure_ToolTip オブジェクト) を割り当てますTo the Tool Tip Object field, assign the corresponding ToolTip, in this case, the RoverEnclosure_ToolTip object
  • [Audio Source](オーディオ ソース) フィールドに、オブジェクト自体 (この場合は RoverEnclosure オブジェクト) を割り当てますTo the Audio Source field, assign the object itself, in this case, the RoverEnclosure object

mrlearning-base

他のすべての LunarModuleParts 子オブジェクト (つまり、FuelTank、EnergyCell、DockingPortal、ExternalSensor) についても同じ手順を繰り返しますRepeat for each of the other LunarModuleParts child objects, i.e. FuelTank, EnergyCell, DockingPortal, and ExternalSensor.

ここでゲーム モードに入り、[Object To Place](配置するオブジェクト) をそれに対応する [Location To Place](配置する場所) の近くに配置すると、次のことが起こります。If you now enter Game mode and move an 'Object To Place' close to it's corresponding 'Location To Place' you will notice:

  • オブジェクトが所定の位置にはめ込まれ、LunarModule オブジェクトの下にペアレント化されて月着陸船の一部になりますThe object will snap into place and be parented under the LunarModule object so it becomes part of the Lunar Module
  • オブジェクトのオーディオ ソースは、オブジェクトの位置で割り当てられたオーディオ クリップを再生しますThe Audio Source on the object will play the assigned Audio Clip at the location of the object
  • 対応する Tool Tip オブジェクトは非表示になりますThe corresponding Tool Tip object will be hidden

mrlearning-base

ヒント

エディター内入力シミュレーションを使用する方法については、MRTK ドキュメントポータルエディター内の手の入力シミュレーションを使用したシーンのテストに関するガイドを参照してください。For a reminder on 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.

月着陸船の構成Configuring the Lunar Module

このセクションでは、ロケット発射台アプリケーションに機能を追加して、ユーザーが次のことができるようにします。In this section, you will add additional features to the Rocket Launcher application so the user can:

  • 月着陸船を操作するInteract with the Lunar Module
  • 月着陸船を宇宙に打ち上げ、打ち上げ時にサウンドを再生するLaunch the Lunar Module into space and play a sound when it is launched
  • アプリケーションをリセットして、月着陸船とすべての部品を元の位置に戻すReset the application so the Lunar Module and all the parts are placed back to their original position
  • 配置ヒントを非表示にして、部品アセンブリの課題をより難しくする。Hide the placement hints to make the part assembly challenge more difficult.

これを実現するための主な手順は次のとおりです。The main steps you will take to achieve this are:

  1. オブジェクトの操作を有効にするEnable object manipulation
  2. 物理的処理を有効にするEnable physics
  3. Audio Source コンポーネントを追加するAdd an Audio Source component
  4. Launch Lunar Module (Script) コンポーネントを追加して構成するAdd and configure the Launch Lunar Module (Script) component
  5. Toggle Placement Hints (Script) コンポーネントを追加して構成するAdd and configure the Toggle Placement Hints (Script) component

注意

Launch Lunar Module (Script) コンポーネントと Toggle Placement Hints (Script) コンポーネントは MRTK の一部ではありません。The Launch Lunar Module (Script) component and the Toggle Placement Hints (Script) component are not part of MRTK. これらはこのチュートリアルのアセットと共に提供されました。They were provided with this tutorial's assets.

1.オブジェクトの操作を有効にする1. Enable object manipulation

[Hierarchy](階層) ウィンドウで、[RocketLauncher] > [LunarModule] オブジェクトを選択します。次に、Manipulation Handler (Script) コンポーネントおよび Near Interaction Grabbable (Script) コンポーネントを追加し、Manipulation Handler (Script) を次のように構成します。In the Hierarchy window, select the RocketLauncher > LunarModule object, add the Manipulation Handler (Script) component and the Near Interaction Grabbable (Script) component, and then configure the Manipulation Handler (Script) as follows:

  • [Allow Far Manipulation](遠距離操作を許可) チェックボックスをオフにして、近距離操作のみを許可するようにしますUn-check the Allow Far Manipulation checkbox to only allow near interaction
  • [Two Handed Manipulation Type](両手を使った操作の種類) を [Move Rotate](移動回転) に変更して、拡大縮小を無効にしますChange Two Handed Manipulation Type to Move Rotate so scaling is disabled

mrlearning-base

2.物理的処理を有効にする2. Enable physics

[RocketLauncher] > [LunarModule] オブジェクトを選択したまま、Rigidbody コンポーネントを追加し、次のように構成します。With the RocketLauncher > LunarModule object still selected, add a Rigidbody component and then configure it as follows:

  • [Use Gravity](重力を使用) チェックボックスをオフにして、月着陸船が重力の影響を受けないようにしますUn-check the Use Gravity checkbox so the Lunar Module is not affected by gravity
  • [Is Kinematic](キネマティック) チェックボックスをオンにして、月着陸船が最初は物理的な力の影響を受けないようにしますCheck the Is Kinematic checkbox so the Lunar Module initially isn't affected by physic forces

mrlearning-base

3.Audio Source コンポーネントを追加する3. Add an Audio Source component

[RocketLauncher] > [LunarModule] オブジェクトを選択したまま、Audio Source コンポーネントを追加し、次のように構成します。With the RocketLauncher > LunarModule object still selected, add an Audio Source component and then configure it as follows:

  • [Spatial Blend](空間ブレンド) を 1 に変更して、空間オーディオを有効にしますChange Spatial Blend to 1 to enable spatial audio

mrlearning-base

4.Launch Lunar Module (Script) コンポーネントを追加して構成する4. Add and configure the Launch Lunar Module (Script) component

[RocketLauncher] > [LunarModule] オブジェクトを選択したまま、Launch Lunar Module (Script) コンポーネントを追加し、次のように構成します。With the RocketLauncher > LunarModule object still selected, add the Launch Lunar Module (Script) component and then configure it as follows:

  • [Thrust](推力) の値を変更して、月着陸船が打ち上げ時に滑らかに上昇するようにします (たとえば、0.01)。Change Thrust value so the Lunar Module will fly up gracefully when launched, for example, to 0.01

mrlearning-base

5.Toggle Placement Hints (Script) コンポーネントを追加して構成する5. Add and configure the Toggle Placement Hints (Script) component

[RocketLauncher] > [LunarModule] オブジェクトを選択したまま、Toggle Placement Hints (Script) コンポーネントを追加し、次のように構成します。With the RocketLauncher > LunarModule object still selected, add the Toggle Placement Hints (Script) component and then configure it as follows:

  • ゲーム オブジェクト配列の [Size](サイズ) プロパティを 5 に設定しますSet the Game Object Array Size property to 5
  • 次のように、[RocketLauncher] > [LunarModule] > [PlacementHints] オブジェクトの子オブジェクトをゲーム オブジェクト配列の [Element](要素) フィールドに割り当てます。Assign each of the RocketLauncher > LunarModule > PlacementHints object's child objects to the an Element field in the Game Object Array:

mrlearning-base

発射ボタンの構成Configuring the Launch button

[Hierarchy](階層) ウィンドウで、[RocketLauncher] > [Buttons] > [LaunchButton] オブジェクトを選択し、Pressable Button (Script) コンポーネントで、新しい Button Pressed () イベントを作成し、イベントを受信するように [LunarModule] オブジェクトを構成して、トリガーするアクションとして LaunchLunarModule.StartThruster を定義します。In the Hierarchy window, select the RocketLauncher > Buttons > LaunchButton object, then on the Pressable Button (Script) component, create a new Button Pressed () event, configure the LunarModule object to receive the event, and define LaunchLunarModule.StartThruster as the action to be triggered:

mrlearning-base

ヒント

イベントを実装する方法については、「手の追跡のジェスチャと操作可能なボタン」の説明を参照してください。For a reminder on how to implement events, you can refer to the Hand tracking gestures and interactable buttons instructions.

[RocketLauncher] > [Buttons] > [LaunchButton] オブジェクトを選択したまま、Pressable Button (Script) コンポーネントで、新しい Button Pressed () イベントを作成し、イベントを受信するように [LunarModule] オブジェクトを構成し、トリガーするアクションとして AudioSource.PlayOneShot を定義し、適切なオーディオ クリップ (MRTK_Gem オーディオ クリップなど) を [Audio Clip](オーディオ クリップ) フィールドに割り当てます。With the RocketLauncher > Buttons > LaunchButton object still selected, on the Pressable Button (Script) component, create a new Button Pressed () event, configure the LunarModule object to receive the event, define AudioSource.PlayOneShot as the action to be triggered, and assign a suitable audio clip to the Audio Clip field, for example, the MRTK_Gem audio clip:

mrlearning-base

[RocketLauncher] > [Buttons] > [LaunchButton] オブジェクトを選択したまま、Pressable Button (Script) コンポーネントで、新しい Touch End () イベントを作成し、イベントを受信するように [LunarModule] オブジェクトを構成して、トリガーするアクションとして LaunchLunarModule.StopThruster を定義します。With the RocketLauncher > Buttons > LaunchButton object still selected, on the Pressable Button (Script) component, create a new Touch End () event, configure the LunarModule object to receive the event, and define LaunchLunarModule.StopThruster as the action to be triggered:

mrlearning-base

ここでゲーム モードに入り、[Launch](発射) ボタンを押すと、オーディオ クリップが再生されます。また、[Launch](発射) ボタンを 1 秒以上押し続けると、月着陸船が宇宙に打ち上げられます。If you now enter Game mode and press the Launch button, you will hear the audio clip play, and if you hold the Launch button down for about a second or longer, you will see the Lunar Module launch into space:

mrlearning-base

リセット ボタンの構成Configuring the Reset button

[Hierarchy](階層) ウィンドウで、[RocketLauncher] > [Buttons] > [ResetButton] オブジェクトを選択し、Pressable Button (Script) コンポーネントで、新しい Button Pressed () イベントを作成し、イベントを受信するように [LunarModule] オブジェクトを構成して、トリガーするアクションとして LaunchLunarModule.ResetModule を定義します。In the Hierarchy window, select the RocketLauncher > Buttons > ResetButton object, then on the Pressable Button (Script) component, create a new Button Pressed () event, configure the LunarModule object to receive the event, and define LaunchLunarModule.ResetModule as the action to be triggered:

mrlearning-base

[RocketLauncher] > [Buttons] > [ResetButton] オブジェクトを選択したまま、Pressable Button (Script) コンポーネントで、新しい Button Pressed () イベントを作成し、イベントを受信するように [RocketLauncher] オブジェクトを構成して、トリガーするアクションとして GameObject.BroadcastMessage を定義し、メッセージ フィールドに ResetPlacement と入力します。With the RocketLauncher > Buttons > ResetButton object still selected, on the Pressable Button (Script) component, create a new Button Pressed () event, configure the RocketLauncher object to receive the event, define GameObject.BroadcastMessage as the action to be triggered, and enter ResetPlacement in message field:

mrlearning-base

ヒント

GameObject.BroadcastMessage アクションは、RocketLauncher オブジェクトからそのすべての子オブジェクトに ResetPlacement メッセージを 送信します。The GameObject.BroadcastMessage action sends the ResetPlacement message from the RocketLauncher object to all its child object. すべての LunarModuleParts 子オブジェクトに追加した Part Assembly Demo (Script) コンポーネントで定義されている ResetPlacement 関数を持つすべての子オブジェクトは、その子オブジェクトの配置をリセットする ResetPlacement 関数を呼び出します。Any child object that has the ResetPlacement function, which is defined in the Part Assembly Demo (Script) component you added to all the LunarModuleParts child object, will invoke the ResetPlacement function which resets that child object's placement.

ここでゲーム モードに入り、部品を移動するか月着陸船を発射してから [Reset](リセット) ボタンを押すと、部品または月着陸船は元の位置にリセットされます。If you now enter Game mode, move some parts and/or launch the Lunar Module, and then press the Reset button you will see the parts and/or the Lunar Module being reset to their original position:

mrlearning-base

配置のヒント ボタンの構成Configuring the Placement Hints button

[Hierarchy](階層) ウィンドウで、[RocketLauncher] > [Buttons] > [HintsButton] オブジェクトを選択し、Pressable Button (Script) コンポーネントで、新しい Button Pressed () イベントを作成し、イベントを受信するように [LunarModule] オブジェクトを構成して、トリガーするアクションとして TogglePlacementHints.ToggleGameObjects を定義します。In the Hierarchy window, select the RocketLauncher > Buttons > HintsButton object, then on the Pressable Button (Script) component, create a new Button Pressed () event, configure the LunarModule object to receive the event, and define TogglePlacementHints.ToggleGameObjects as the action to be triggered:

mrlearning-base

ここでゲーム モードに入ると、半透明の配置ヒントは既定で無効になっていますが、[Hints](ヒント) ボタンを押すことによって、オンとオフを切り替えることができます。If you now enter Game mode you will notice that the translucent placement hints are disabled by default, but that you can toggle them on and off by pressing the Hints button:

mrlearning-base

結論Congratulations

このアプリケーションが完全に構成されました。You have fully configured this application. これでユーザーは、このアプリケーションを使用して月着陸船を完全に組み立て、月着陸船を発射し、ヒントを切り替え、アプリケーションをリセットして再び開始することができるようになりました。Now, your application allows users to fully assemble the Lunar Module, launch the Lunar Module, toggle hints, and reset the application to start again.