MR 学習ベース モジュール - 月着陸船アセンブリのサンプル エクスペリエンスMR Learning Base Module - Lunar Module Assembly Sample Experience

このレッスンでは、前のレッスンから学習した複数の概念を組み合わせて固有のサンプル エクスペリエンスを作成します。In this lesson, we will combine multiple concepts learned from previous lessons to create a unique sample experience. ユーザーが追跡対象の手を使用して月着陸船の部品を持ち上げ、月着陸船の組み立てを試みる必要がある月着陸船アセンブリ アプリケーションを作成します。We will create a lunar module assembly application whereby a user will need to use tracked hands to pick up lunar module parts and attempt to assemble a lunar module. 押しボタンを使用して、配置のヒントを切り替えたり、エクスペリエンスをリセットしたり、月着陸船を宇宙に発射したりします。We will use pressable buttons to toggle placement hints, to reset our experience, and to launch our lunar module into space! 将来のチュートリアルでは、空間的整合のために Azure Spatial Anchors を利用する強力なマルチユーザー ユースケースを含め、引き続きこのエクスペリエンスの上に構築します。In future tutorials, we will continue to build upon this experience, including powerful multi-user use-cases that leverages Azure Spatial Anchors for spatial alignment.


  • 前のレッスンの複数の概念を組み合わせて固有のエクスペリエンスを作成する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


月着陸船の構成Configuring the Lunar Module

この章では、サンプル エクスペリエンスを作成するために必要なさまざまなコンポーネントを導入します。In this chapter, we will be introduced to the various components needed to create our sample experience.

  1. 月着陸船アセンブリ プレハブを [Base Scene] に追加します。Add the lunar module assembly prefab to your Base Scene. これを行うには、プロジェクト タブで [Rocket Launcher_Tutorial] を検索します。To do this, in your project tab, search for "Rocket Launcher_Tutorial." このプレハブは、[アセット]>[BaseModuleAssets]>[プレハブ] で見つけることもできます。You may also find the prefab in Assets>BaseModuleAssets>Prefabs. 2 つのロケット発射台プレハブが表示されます。1 つは [チュートリアル] という名前であり、もう 1 つは [完成] という名前です。You may see two rocket launcher prefabs; one with the name "tutorial" and another with the name "complete." [Rocket Launcher_Tutorial] プレハブを [Base Scene] にドラッグします。Drag the "Rocket Launcher_Tutorial" prefab to your Base Scene. プレハブの位置をシーン内に自由に配置してください。Feel free to position the placement of the prefab in your scene. 注:[Rocket Launcher_Complete] プレハブは、参考のために提供されている完成した発射台です。Note: The "Rocket Launcher_Complete" prefab is the completed launcher, provided for reference.

Lesson6 Chapter1 Step1im

階層内で [Rocket Launcher_Tutorial] ゲーム オブジェクトを展開し、さらに [月着陸船] オブジェクトを展開すると、[X 線] という名前の素材を持ついくつかの子オブジェクトが表示されます。If you expand the "Rocket Launcher_Tutorial" game object in your hierarchy, and further expand the "Lunar Module" object, you will see several child objects that have a material called "x-ray." [X 線] 素材では、ユーザーへの配置のヒントとして使用する、わずかに半透明な色が可能になります。The "x-ray" material allows for a slightly translucent color which we will use as placement hints for the user.

Lesson6 Chapter1 Noteaim 次の図に示すように、月着陸船には、ユーザーが操作する 5 つの部品があります。Lesson6 Chapter1 Noteaim There are five parts to the lunar module that the user is going to interact with, as shown in the image below:

  1. 探査車格納庫The Rover Enclosure
  2. 燃料タンクThe Fuel Tank
  3. エネルギー セルThe Energy Cell
  4. ドッキング ポータルThe Docking Portal
  5. 外部センサーThe External sensor

Lesson6 Chapter1 Notebim

注:[Base Scene] 階層に表示されるゲーム オブジェクト名は、シーン内のオブジェクトの名前に対応していません。Note: The game object names that you see in your base scene hierarchy do not correspond to the names of the objects in the scene.

手順 2:月着陸船にオーディオ ソースを追加します。Step 2: Add an audio source to the lunar module. [Base Scene] 階層で月着陸船が選択されていることを確認し、[コンポーネントの追加] をクリックします。Make sure the lunar module is selected in your base scene hierarchy and click "Add Component." [オーディオ ソース] を検索し、それをオブジェクトに追加します。Search for "Audio Source" and add it to the object. 今は空白のままにします。Leave it blank for now. これは、後で発射音を再生するために使用します。We will use this to play the launching sound later. Lesson6 Chapter1 Step2im 手順 3:[配置のヒントを切り替える] スクリプトを追加します。Lesson6 Chapter1 Step2im Step 3: Add the script "toggle placement hints." [コンポーネントの追加] をクリックし、[配置のヒントを切り替える] を検索します。Click "Add Component" and search for "Toggle Placement Hints." これは、先に説明した半透明なヒント (X 線素材を持つオブジェクト) のオンとオフを切り替えることができるカスタム スクリプトです。This is a custom script that allows you to turn on and off the translucent hints (objects with the x-ray material) mentioned earlier. Lesson6 Chapter1 Step3im 手順 4:5 つのオブジェクトがあるため、ゲーム オブジェクト配列のサイズに「5」と入力します。Lesson6 Chapter1 Step3im Step 4: Since we have 5 objects, type in "5" for the game object array size. それにより、5 つの新しい要素が表示されます。Then you should see 5 new elements appear.

Lesson6 Chapter1 Step4bim

半透明な各オブジェクトを [なし (ゲーム オブジェクト)] が表示されたボックスにドラッグします。Drag each of the translucent objects into the boxes that say "None (Game Object)." [Base Scene] の月着陸船の次のオブジェクトをドラッグします。Drag the following objects from the lunar module in your base scene:

• Backpack• Backpack

• GasTank• GasTank

• Topleftbody• Topleftbody

• Nose• Nose

• LeftTwirler• LeftTwirler

Lesson6 Chapter1 Step4aim

これで、[配置のヒントを切り替える] スクリプトが構成されました。Now the "toggle placement hints" script is configured. これにより、ヒントのオンとオフを切り替えることができます。This will allow us to turn the hints on and off.

手順 5:[月着陸船を発射する] スクリプトを追加します。Step 5: Add the "launch lunar module" script. [コンポーネントの追加] ボタンをクリックし、[月着陸船を発射する] を検索して選択します。Click the "Add Component" button, search for "launch lunar module" and select it. このスクリプトには、月着陸船を発射する役割があります。This script will be responsible for launching the lunar module. 構成されたボタンを押すと、月着陸船の剛体コンポーネントに上向きの力が加えられ、この月着陸船が上に向けて発射されます。When we press a configured button, it will add an upward force to the lunar module's rigid body component and will cause the module to launch upwards. 屋内にいる場合は、月着陸船が天井メッシュに当たってクラッシュする可能性があります。If you are indoors, the lunar module may crash against your ceiling mesh. ただし、屋外にいる場合は、宇宙をいつまでも飛行します。But if you are outdoors, it will fly in to space indefinitely.

Lesson6 Chapter1 Step5im

手順 6:月着陸船が正常に上に向かって飛行するように [推進力] を調整します。Step 6: Adjust the thrust so that the lunar module will fly up gracefully. 0.01 の値を試してください。Try a value of 0.01. [Rb] フィールドは空白のままにします。Leave the "Rb" field blank. Rb は剛体を表し、このフィールドは実行時に自動的にデータが入力されます。Rb stands for rigid body, and this field will be automatically populated during runtime.

Lesson6 Chapter1 Step6im

[月着陸船] 部品の概要Lunar Module Parts Overview

[月着陸船] 部品の親オブジェクトは、ユーザーが操作するオブジェクトのコレクションです。The Lunar Module parts parent object is the collection of the objects that the user will interact with. ゲーム オブジェクト名 (かっこ内はシーンのラベルが付いた名前) を次の一覧に示します。The game object names (with scene labeled names in paretheses) are provided in the list below:

  • Backpack (燃料タンク)Backpack (Fuel Tank)
  • GasTank (エネルギー セル)GasTank (Energy Cell)
  • TopLeftBody (探査車格納庫)TopLeftBody (Rover Enclosure)
  • Nose (ドッキング ポータル)Nose (Docking Portal)
  • LeftTwirler (外部センサー)LeftTwirler (External Sensor)

レッスン 4 で説明されているように、これらの各オブジェクトには操作ハンドラーかあることに注意してください。Notice that each of these objects has the manipulation handler, as discussed in lesson 4. 操作ハンドラーを使用すると、ユーザーはオブジェクトをつかんで操作できます。With the manipulation handler, users are able to grab and manipulate the object. また、[両手を使った操作の種類] 設定が [移動と回転] に設定されていることにも注意してください。Also note that the setting "two handed manipulation type" is set to "move and rotate." これにより、ユーザーはオブジェクトを移動することしかできず、サイズは変更できません。これは、アセンブリ アプリケーションには望ましい機能です。This only permits the user to move the object and not change its size, which is the desired functionality for an assembly application. さらに、月着陸船の部品の直接操作のみを許可するために、遠隔操作はオフになっています。In addition, far manipulation is unchecked to allow only for direct interaction of module parts.

Lesson6 Chapter2im

部品アセンブリ デモ スクリプト (上に示されています) は、ユーザーによって月着陸船に配置されるオブジェクトを管理するスクリプトです。The part assembly demo script (shown above) is the scrip that manages the objects to be placed on to the lunar module by the user.

[配置するオブジェクト] フィールドは、接続できるオブジェクトと共に選択された変換 (前の図の場合は、Backpack/燃料タンク) です。The "Object To Place" field is the transform that is selected (n the case of the image above, the backpack/fuel tank) with the object that it can connect to.

[近距離] および [遠距離] 設定には、部品をはめ込んだり、取り外したりするときの近さを決定する役割があります。The "Near Distance" and "Far Distance" settings are responsible for determining the proximity to which parts will snap in place or be released. たとえば、Backpack/燃料タンクは、はめ込むには月着陸船から 0.1 ユニット離れている必要があります。For example, the backpack/fuel tank would need to be 0.1 units away from the lunar module to snap into place. [遠距離] は、オブジェクトを月着陸船から取り外す必要がある場所を設定します。The "Far Distance" sets the location where the object needs to be to detach from the lunar module. この場合、ユーザーの手は Backpack/燃料タンクをつかみ、再度はめ込まれないように取り外すには月着陸船から 0.2 ユニット離れた場所に引く必要があります。In this case, the user’s hand must grab the backpack/fuel tank and pull it 0.2 units away from the lunar module to remove it from snapping back into place.

[ヒント オブジェクト] は、シーン内のヒント ラベルです。The "Tool Tip Object" is the tool tip label in the scene. オブジェクトがはめ込まれると、ラベルは無効になります。When the objects are snapped in place, the label will be disabled.

オーディオ ソースは自動的に取り込まれます。The Audio Source will be automatically grabbed.

[配置のヒント] ボタンPlacement Hints Buttons

レッスン 2 では、項目の色を変更したり、押されたら音を再生したりするなどの操作を実行するためのボタンを配置および構成する方法を学習しました。In Lesson 2, you learned how to place and configure buttons to do things like change the color of an item or make it play a sound when it is pushed. ここでは配置のヒントを切り替えるためのボタンを構成するため、これらの原則を引き続き使用します。We will continue to use those principles as we configure our buttons for toggling placement hints.

目標は、ユーザーが [配置のヒント] ボタンを押すたびに、半透明な配置のヒントの可視性を切り替えるようにボタンを構成することです。The goal is to configure our button so that every time the user presses the placement hint button, it will toggle visibility of the translucent placement hints.

手順 1:[Base Scene] 階層で [配置のヒント] オブジェクトが選択されているときに、[月着陸船] を [インスペクター] パネルの空の [ランタイムのみ] スロットに移動します。Step 1: Move the Lunar Module to the empty "runtime only" slot in the inspector panel while the Placement Hints object is selected in your base scene hierarchy. Lesson6 Chapter3 Step1im 手順 2:ここで、[関数なし] が表示されたドロップダウン リストをクリックします。Lesson6 Chapter3 Step1im Step 2: Now click the dropdown list where it says, "no function." 下の方の [TogglePlacementHints] に移動し、そのメニューの下の [ToggleGameObjects ()] を選択します。Go down to "TogglePlacementHints," and under that menu select "ToggleGameObjects ()." ToggleGameObjects() は、配置のヒントのオンとオフを切り替えて、ボタンが押されるたびに表示または非表示になるようにします。ToggleGameObjects() will toggle the placement hints on and off so that they are visible or invisible every time the button is pressed. Lesson6 Chapter3 Step2imLesson6 Chapter3 Step2im

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

ユーザーが間違いを犯したり、オブジェクトを誤って捨てたり、単にエクスペリエンスを停止させたくなったりする状況が発生します。There will be situations where the user makes a mistake, or accidently throws the object away, or just wants to rest the experience. リセット ボタンにより、エクスペリエンスを再開する機能が追加されます。The reset button will add the ability to restart the experience.

手順 1:リセット ボタンを選択します。Step 1: Select the reset button. [Base Scene] では [ResetRoundButton] という名前になっています。In the base scene, it’s named "ResetRoundButton."

手順 2:[Base Scene] 階層の [月着陸船] を、[インスペクター] パネルの [Button Pressed] の下の空のスロットにドラッグします。Step 2: Drag the lunar module from the base scene hierarchy into the empty slot under "button pressed" the inspector panel. Lesson6 Chapter4 Step2imLesson6 Chapter4 Step2im

手順 3:[関数なし] が表示されたドロップダウン メニューを選択し、[LaunchLunarModule] にマウス ポインターを置きますStep 3: Select the dropdown menu that says, "no function" and hover over "LaunchLunarModule." ここで [resetModule ()] を選択します。Now select "resetModule ()."

Lesson6 Chapter4 Step3im

注:既定では、[GameObject.BroadcastMessage] が [ResetPlacement] に構成されていることに注意してください。Note: You will notice that by default the "GameObject.BroadcastMessage" is configured to "ResetPlacement." これにより、RocketLauncher_Tutorial のすべての子オブジェクトに [ResetPlacement] という名前のメッセージがブロードキャストされます。This will broadcast a message called "ResetPlacement" for every child object of RocketLauncher_Tutorial. [ResetPlacement()] 用のメソッドを持つオブジェクトはすべて、その位置をリセットすることによってそのメッセージに応答します。Any object that has a method for "ResetPlacement()" will respond to that message by resetting it's position.

月着陸船の発射Launching the Lunar Module

この章では、発射ボタンを構成します。This chapter we will be configuring the launch button. これにより、ユーザーはそのボタンを押して月着陸船を宇宙に発射することができます。This will permit the user to press the button and launch the Lunar Module into space.

手順 1:発射ボタン ([Base Scene] では [LaunchRoundButton] という名前になっています) を選択します。Step 1: Select the launch button (in the base scene it’s named "LaunchRoundButton"). [月着陸船] を [インスペクター] パネルの [タッチ終了] の下の空のスロットにドラッグします。Drag the Lunar Module to the empty slot under "Touch End" in the inspector panel. Lesson6 Chapter5 Step1im 手順 2:[関数なし] が表示されたドロップダウン メニューを選択します。Lesson6 Chapter5 Step1im Step 2: Select the dropdown menu that says, "no function." [LaunchLunarModule] にマウス ポインターを置いて [StopThruster ()] を選択します。Hover over "LaunchLunarModule" and select "StopThruster ()." これにより、ユーザーが月着陸船にどれだけの推進力を与えるかが制御されます。This will control how much thrust the user wants to give to the Lunar Module. Lesson6 Chapter5 Step2im 手順 3:[ButtonPressed()] の下で、[月着陸船] を空のスロットに追加 (クリック、保持、ドラッグ) します。Lesson6 Chapter5 Step2im Step 3: Under "ButtonPressed()", add the Lunar Module (click, hold, and drag) to the empty slot.

手順 4:[関数なし] が表示されたドロップダウン メニューをクリックし、[LaunchLunarModule] にマウス ポインターを置いて [StartThruster ()] を選択します。Step 4: Click the dropdown menu that says, "no function" and hover over "LaunchLunarModule" and select "StartThruster ()." Lesson6 Chapter5 Step4im 手順 5:ロケットが発射したら音楽が再生されるように、月着陸船に音楽を追加します。Lesson6 Chapter5 Step4im Step 5: Add music to the Lunar Module so that when the rocket takes off, the music will play. これを行うには、[月着陸船] を [Button Pressed()] の下の次の空のスロットにドラッグします。To do this, drag the Lunar Module to the next empty slot under "Button Pressed()".

手順 6:[関数なし] が表示されたドロップダウン メニューを選択し、[AudioSource] にマウス ポインターを置いて [PlayOneShot (AudioClip)] を選択します。Step 6: Select the dropdown menu that says, "no function" and hover over "AudioSource" and select "PlayOneShot (AudioClip)." MRTK に含まれているさまざまな音から自由に選択してください。Feel free to explore the variety of sounds included with the MRTK. この例では、[MRTK_Gem] を使用します。For this example, we are going to stick with "MRTK_Gem." Lesson6 Chapter5 Step6imLesson6 Chapter5 Step6im


このアプリケーションが完全に構成されました。You have fully configured this application! これで [再生] を押せば、月着陸船を完全に組み立てたり、ヒントを切り替えたり、月着陸船を発射したり、始めからやり直すためにリセットしたりすることができます。Now when you press play, you can fully assemble the Lunar Module, toggle hints, launch the Lunar Module, and reset it to do it all over again.