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 lunar module assembly application whereby a user needs to use tracked hands to pick up lunar module parts and attempt to assemble a lunar module. Pressable ボタンを使用して配置ヒントを切り替え、エクスペリエンスをリセットして、旧暦モジュールをスペースで起動します。We use pressable buttons to toggle placement hints, to reset our experience, and to launch our lunar module into space! 今後のチュートリアルでは、このエクスペリエンスの構築を続けています。これには、空間アラインメントに Azure 空間アンカーを利用する強力なマルチユーザーユースケースが含まれます。In future tutorials, we will continue to build upon this experience, which includes powerful multi-user use cases that leverage 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 section, we introduce the various components needed to create our sample experience.

  1. 基本シーンに旧暦モジュールアセンブリ prefab を追加します。Add the Lunar Module Assembly prefab to your base scene. これを行うには、プロジェクト タブで > BaseModuleAssets > Prefabs に移動します。To do this, in the Project tab navigate to Assets > BaseModuleAssets > Prefabs. 2つのロケットランチャー prefabs が表示され、ロケット Launcher_Tutorial prefab をシーンにドラッグし、必要に応じて配置します。You will see two rocket launcher prefabs, drag the Rocket Launcher_Tutorial prefab into your scene, and position as you wish.


    ロケット Launcher_Complete prefab は、参照用に提供された、完成したランチャーです。The Rocket Launcher_Complete prefab is the completed launcher, provided for reference.

    Lesson6 Chapter1 Step1im

    階層内でロケット Launcher_Tutorial game オブジェクトを展開し、旧暦モジュールオブジェクトをさらに展開すると、"x 射線" という素材を持ついくつかの子オブジェクトが検索されます。If you expand the Rocket Launcher_Tutorial game object in your hierarchy and further expand the Lunar Module object, you find several child objects that have a material called "x-ray." "X 射線" のマテリアルでは、ユーザーの配置ヒントとして使用される半透明色を使用できます。The "x-ray" material allows for a slightly translucent color that will be used as placement hints for the user.

    Lesson6 Chapter1.txt のターゲット

    次の図に示すように、ユーザーが操作する旧暦モジュールには5つの部分があります。There are five parts to the lunar module that the user will 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] 階層に表示されるゲーム オブジェクト名は、シーン内のオブジェクトの名前に対応していません。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. オーディオソースを LunarModule ゲームオブジェクトに追加します。Add an audio source to the LunarModule game object. シーン階層で LunarModule が選択されていることを確認し、[コンポーネントの追加] をクリックします。Make sure the LunarModule is selected in your scene hierarchy and click Add Component. オーディオソースを検索し、game オブジェクトに追加します。Search for Audio Source and add it to the game object. ここでは、[AudioClip] フィールドを空白のままにします。ただし、[特殊な Blend] 設定を0から1に変更して、空間オーディオを有効にします。Leave the AudioClip field blank for now, but change the Special Blend setting from 0 to 1 so to enable spatial audio. 後でサウンドを再生するには、このオーディオソースを使用します。You will use this audio source to play the launching sound later.

    Lesson6 Chapter1.txt Step2im

  3. スクリプトの切り替えの配置ヒントを追加します。Add the script Toggle Placement Hints. [コンポーネントの追加] をクリックし、[配置ヒントの切り替え] を検索します。Click Add Component and search for Toggle Placement Hints. これは、前に説明したように半透明のヒント (x 線を持つオブジェクト) をオンまたはオフにできるカスタムスクリプトです。This is a custom script that lets you turn on and off the translucent hints (objects with the x-ray material), as mentioned earlier.

    Lesson6 Chapter1.txt Step3im

  4. 5つのオブジェクトがあるため、game オブジェクトの配列サイズとして「5」と入力します。Since we have five objects, type "5" for the game object array size. 5つの新しい要素が表示されます。You will then see five new elements appear.

    Lesson6 Chapter1 Step4bim

    各半透明オブジェクトを [すべての名前 (ゲームオブジェクト)] ボックスにドラッグします。Drag each of the translucent objects into all the Name (Game Object) boxes. 上の図に示すように、シーンの旧暦モジュールから次のオブジェクトをオブジェクト配列のフィールドにドラッグします。Drag the following objects from the lunar module in your scene into the object array fields as shown in the image above:

    Lesson6 Chapter1 Step4aim

    [配置ヒントの切り替え] スクリプトが構成され、ヒントをオンまたはオフにできるようになりました。The Toggle Placement Hints script is now configured, which allows us to turn hints on and off.

  5. Launch 旧暦モジュールスクリプトを追加します。Add the Launch Lunar Module script. [コンポーネントの追加] ボタンをクリックし、[旧暦モジュールの起動] を検索して選択します。Click the Add Component button, search for "launch lunar module" and select it. このスクリプトは、旧暦モジュールを起動します。This script launches the lunar module. 構成されたボタンを押したときに、旧暦モジュールの固定本文コンポーネントに上位の力が追加され、モジュールが上に起動します。When we press a configured button, it adds an upward force to the lunar module's rigid body component and causes the module to launch upwards. 屋内にいる場合は、月着陸船が天井メッシュに当たってクラッシュする可能性があります。If you are indoors, the lunar module may crash against your ceiling mesh. 雲の高低がある領域にいる場合、旧暦モジュールはスペースを無制限に飛びます。If you are in an area with high ceilings or no ceilings, the lunar module will fly into space indefinitely.

    Lesson6 Chapter1 Step5im

  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 interacts with. シーンがかっこで囲まれた Game オブジェクト名は、次の一覧に示されています。The Game object names with scene labeled names in parentheses, are provided in the list below:

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

レッスン4で説明されているように、これらの各オブジェクトには操作ハンドラーがあることに注意してください。Notice that each of these objects has a manipulation handler, as explained in Lesson 4. この機能を使用すると、ユーザーはオブジェクトを取得して操作できます。This feature enables users to grab and manipulate the object. また、設定の2つのきき操作の種類が移動と回転に設定されていることにも注意してください。Also note that the setting, Two Handed Manipulation Type, is set to Move and Rotate. このオプションは、オブジェクトの移動だけを許可し、アセンブリアプリケーションに必要な機能であるサイズを変更することはできません。This option 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 script that manages the objects that the user places on the lunar module by the user.

フィールドを配置するオブジェクトは、上の図に示すように選択されている変換です。これは、接続先のオブジェクトに関連付けられている backpack/燃料タンクです。The Object To Place field is the transform that is selected, as shown in the image above, the backpack/fuel tank associated with the object that it connects to.

近距離距離と遠く距離の設定によって、どのパーツがどこに配置されているか、または解放できるかが決まります。The Near Distance and Far Distance settings determine the proximity to which parts snap in place or can be released. たとえば、backpack/燃料タンクは、位置に合わせる前に、旧暦モジュールから離れた0.1 単位である必要があります。For example, the backpack/fuel tank needs to be 0.1 units away from the lunar module before it will snap into place. [遠くの距離] 設定では、オブジェクトが旧暦モジュールからデタッチできるようになる位置が設定されます。The Far Distance setting sets the location where the object can be before it can 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 is disabled.

オーディオソースが自動的にグラブされます。The Audio Source is automatically grabbed.

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

レッスン 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 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 toggles the visibility of the translucent placement hints.

  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. [関数なし] ドロップダウンリストをクリックします。Click the No Function dropdown list. TogglePlacementHints に移動し、そのメニューの下にある ToggleGameObjects () を選択します。Go down to TogglePlacementHints and select ToggleGameObjects () under that menu. ToggleGameObjects () は、ボタンが押されるたびに表示または非表示になるように配置ヒントのオンとオフを切り替えます。ToggleGameObjects() toggles the placement hints on and off so that they are visible or invisible each time the button is pressed.

    Lesson6 Chapter3 Step2im

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

ユーザーが誤ってオブジェクトを破棄したり、エクスペリエンスをリセットしたりする場合があります。There will be situations where the user makes a mistake, accidentally throws the object away or just wants to reset the experience. [リセット] ボタンをクリックすると、エクスペリエンスを再起動する機能が追加されます。The Reset button adds the ability to restart the experience.

  1. [リセット] ボタンを選択します。Select the Reset button. 基本シーンでは、ResetRoundButton という名前が付けられます。In the base scene, it’s named ResetRoundButton.

  2. [インスペクター] パネルの [Button] の下にある空のスロットに、[基本のシーン] 階層から旧暦モジュールをドラッグします。Drag the lunar module from the base scene hierarchy into the empty slot under Button Pressed on the inspector panel.

    Lesson6 Chapter4 Step2im

  3. [関数なし] ドロップダウンメニューを選択し、LaunchLunarModule の上にマウスポインターを移動し、[resetModule ()] を選択します。Select the No Function dropdown menu and hover over LaunchLunarModule, then select resetModule ().

    Lesson6 Chapter4 Step3im


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

[起動] ボタンの構成Configuring the Launch button

ここでは、[起動] ボタンを構成する方法について説明します。このボタンを使用すると、ユーザーはボタンをクリックして、スペースで旧暦モジュールを起動することができます。This section explains how to configure the Launch button, which permits the user to press the button and launch the lunar module into space.

  1. [起動] ボタンを選択します。Select the Launch button. 基本シーンでは、LaunchRoundButton と呼ばれます。In the base scene, it’s called LaunchRoundButton. [インスペクター] パネルの [タッチエンド] の下にある空のスロットに、旧暦モジュールをドラッグします。Drag the lunar module to the empty slot under Touch End in the Inspector panel.

    Lesson6 Chapter5 Step1im

  2. [関数なし] ドロップダウンメニューを選択し、LaunchLunarModule の上にマウスポインターを移動し、[StopThruster ()] を選択します。Select the No Function dropdown menu and hover over LaunchLunarModule, and select StopThruster (). これにより、ユーザーが旧暦モジュールに与える推力の量が制御されます。This controls how much thrust the user wants to give to the lunar module.

    Lesson6 Chapter5 Step2im

  3. [インスペクター] パネルの [Button] の下にある空のスロットに、[基本のシーン] 階層から旧暦モジュールをドラッグします。Drag the lunar module from the base scene hierarchy into the empty slot under Button Pressed in the inspector panel.

  4. [関数なし] ドロップダウンメニューをクリックし、[LaunchLunarModule] をクリックして、[StartThruster ()] を選択します。Click the No function dropdown menu and then on LaunchLunarModule and select StartThruster ().

    Lesson6 Chapter5 Step4im

  5. 音楽がロケットの撮影時に再生されるように、旧暦モジュールに音楽を追加します。Add music to the lunar module so that music plays when the rocket takes off. これを行うには、[] ボタンが押された状態の次の空のスロット () に旧暦モジュールをドラッグします。To do this, drag the lunar module to the next empty slot under Button Pressed().

  6. [関数なし] ドロップダウンメニューを選択し、AudioSource の上にマウスポインターを移動して、[PlayOneShot (Audiosource)] を選択します。Select the No Function dropdown menu, hover over AudioSource and select PlayOneShot (AudioClip). MRTK に含まれているさまざまな音から自由に選択してください。Feel free to explore the variety of sounds included with the MRTK. この例では、"MRTK_Gem" を使用します。In this example, we'll use "MRTK_Gem."

    Lesson6 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 start again.