7.3D オブジェクトの操作7. Interacting with 3D objects

このチュートリアルでは、3D オブジェクトの近距離および遠距離操作を有効にし、許可される操作の種類を制限する方法について学習します。In this tutorial, you will learn how to enable near and far manipulation of 3D objects and limit the allowed types of manipulation. また、オブジェクトの操作をより簡単に制御できるように、3D オブジェクトの周囲に境界ボックスを追加する方法について学習します。You will also learn how to add bounding boxes around 3D objects to make it easier to control the object manipulation.

目標Objectives

  • 3D オブジェクトを操作できるように構成する方法について学習するLearn how to configure 3D objects so they can be interacted with
  • 3D オブジェクトに境界ボックスを追加する方法について学習するLearn how to add bounding boxes to 3D objects

3D オブジェクトの操作Manipulating 3D objects

このセクションでは、「シーン内のオブジェクトの配置」チュートリアルで、テーブルで構成したすべての探査車 (Rover) のパーツを操作する機能を追加します。In this section, you will add the ability to manipulate all the Rover parts you organized on the table during the Positioning objects in the scene tutorial.

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

  1. すべてのパーツ オブジェクトに Object Manipulator (Script) コンポーネントを追加するAdd the Object Manipulator (Script) component to all the part objects
  2. すべてのパーツ オブジェクトに NearInteractionGrabbable コンポーネントを追加するAdd the NearInteractionGrabbable component to all the part objects
  3. Object Manipulator (Script) コンポーネントを構成するConfigure the Object Manipulator (Script) component

注意

オブジェクトを操作できるようにするには、オブジェクトに次のコンポーネントが必要です。To be able to manipulate an object, the object must have the following components:

  • Collider コンポーネント、たとえばボックス コライダーCollider component, for example, a Box Collider
  • Object Manipulator (Script) コンポーネントObject Manipulator (Script) component

オブジェクトを操作し、追跡対象の手でオブジェクトをつかむことができるようにするには、オブジェクトに次のコンポーネントが必要です。To be able to manipulate and grab an object with tracked hands, the object must have the following components:

  • Collider コンポーネント、たとえばボックス コライダーCollider component, for example, a Box Collider
  • Object Manipulator (Script) コンポーネントObject Manipulator (Script) component
  • NearInteractionGrabbable コンポーネントNearInteractionGrabbable component

さらに、探査車のパーツを Rover に配置して完全な探査車アセンブリにすることができるように、Rover Explorer を構成します。Additionally, you will configure the Rover Explorer so that you can place the rover parts on to the Rover to make it a complete rover assembly.

[階層] ウィンドウで、RoverExplorer > RoverParts オブジェクトの順に展開し、そのすべての子の探査車のパーツ オブジェクトと RoverAssembly オブジェクトを選択します。その後、[インスペクター] ウィンドウで、 [コンポーネントの追加] ボタンを使用して、選択されたすべてのオブジェクトに次のコンポーネントを追加します。In the Hierarchy window, expand the RoverExplorer > RoverParts object and select all its child rover part objects and the RoverAssembly object, then in the Inspector window, use the Add Component button to add the following components to all the selected objects:

  • Object Manipulator (Script) コンポーネントObject Manipulator (Script) component
  • NearInteractionGrabbable コンポーネントNearInteractionGrabbable component
  • Part Assembly Controller (Script) コンポーネントPart Assembly Controller (Script) component

mr-learning-base

ヒント

互いに隣接していない複数のオブジェクトを選択するには、CTRL キーを押しながらマウスを使用して、任意のオブジェクトを選択します。To select multiple objects that are not next to each other, press-and-hold the CTRL key while using the mouse to select any object.

注意

このチュートリアルでは、コライダーが既に探査車のパーツに追加されています。For the purpose of this tutorial, colliders have already been added to the rover parts. コライダーの詳細については、Unity のコライダーに関するドキュメントを参照してください。To learn more about colliders, you can visit Unity's Collider documentation.

注意

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

すべての探査車のパーツ オブジェクトと RoverAssembly オブジェクトを引き続き選択した状態で、[インスペクター] ウィンドウで、次のように Object Manipulator (Script) コンポーネントを構成します。With all the rover part objects and the RoverAssembly object still selected, in the Inspector window, configure the Object Manipulator (Script) component as follows:

  • [両手を使った操作の種類] ドロップダウンで、[スケール] をオフにし、 [移動][回転] のみが有効になるようにしますFrom the Two Handed Manipulation Type dropdown, uncheck the Scale, so only Move and Rotate is enabled

mr-learning-base

注意

この時点で、すべての探査車のパーツ オブジェクトと RoverAssembly オブジェクトのオブジェクト操作が有効になりました。At this point, you have enabled object manipulation for all the rover part objects and the RoverAssembly object.

[プロジェクト] ウィンドウで、Assets > MRTK > SDK > StandardAssets > Audio フォルダーの順に移動して、オーディオ クリップを見つけます。In the Project window, navigate to the Assets > MRTK > SDK > StandardAssets > Audio folder to locate the audio clips:

mr-learning-base

[階層] ウィンドウで、すべての探査車のパーツ オブジェクトをもう一度選択します。その後、[インスペクター] ウィンドウで、 [コンポーネントの追加] ボタンを使用し、Audio Sources コンポーネントを追加して、次のように構成します。In the Hierarchy window, reselect all the rover part objects, then in the Inspector window, use the Add Component button to add the Audio Sources component and configure it as follows:

  • MRTK_Scale_Start オーディオ クリップを AudioClip フィールドに割り当てますAssign the MRTK_Scale_Start audio clip to the AudioClip field
  • [Play On Awake](起動時に再生) チェックボックスをオフにしますUncheck the Play On Awake checkbox
  • [Spatial Blend](空間ブレンド) を 1 に変更しますChange Spatial Blend to 1

mr-learning-base

[階層] ウィンドウで、RoverAssembly > RoverModel_PlacementHints_XRay > Parts_PlacementHints オブジェクトの順に展開し、すべての配置ヒント オブジェクトを表示します。その後、最初の探査車のパーツである、RoverParts > Camera_Part の順に選択し、Part Assembly Controller (Script) コンポーネントを次のように構成します。In the Hierarchy window, expand the RoverAssembly > RoverModel_PlacementHints_XRay > Parts_PlacementHints object to reveal all of the placement hint objects, then select the first rover part, RoverParts > Camera_Part, and configure the Part Assembly Controller (Script) component as follows:

  • Camera_PlacementHint オブジェクトを [Location To Place](配置する場所) フィールドに割り当てますAssign the Camera_PlacementHint object to the Location To Place field

mr-learning-base

残りの探査車のパーツ オブジェクトと RoverAssembly オブジェクトのそれぞれに対して、この手順を繰り返し、次のように Part Assembly Controller (Script) コンポーネントを構成します。Repeat this step for each of the remaining rover part objects and the RoverAssembly object to configure the Part Assembly Controller (Script) component as follows:

  • Generator_Part については、Generator_PlacementHint オブジェクトを [Location To Place](配置する場所) フィールドに割り当てますFor the Generator_Part, assign the Generator_PlacementHint object to the Location To Place field
  • Lights_Part については、Lights_PlacementHint オブジェクトを [Location To Place](配置する場所) フィールドに割り当てますFor the Lights_Part, assign the Lights_PlacementHint object to the Location To Place field
  • UHFAntenna_Part については、UHFAntenna_PlacementHint オブジェクトを [Location To Place](配置する場所) フィールドに割り当てますFor the UHFAntenna_Part, assign the UHFAntenna_PlacementHint object to the Location To Place field
  • Spectrometer_Part については、Spectrometer_PlacementHint オブジェクトを [Location To Place](配置する場所) フィールドに割り当てますFor the Spectrometer_Part, assign the Spectrometer_PlacementHint object to the Location To Place field
  • RoverAssembly については、オブジェクト自体 (つまり、同じ RoverAssembly オブジェクト) を [Location To Place](配置する場所) フィールドに割り当てますFor the RoverAssembly, assign the object itself, i.e. the same RoverAssembly object, to the Location To Place field

[階層] ウィンドウで、[RoverExplorer] > [ボタン] > [リセット] ボタン オブジェクトの順に選択します。その後、[インスペクター] ウィンドウで、次のように Interactable OnClick () イベントを構成します。In the Hierarchy window, select the RoverExplorer > Buttons > Reset button object, then in the Inspector window, configure the Interactable OnClick () event as follows:

  • RoverAssembly オブジェクトを [None (Object)](なし (オブジェクト)) フィールドに割り当てますAssign the RoverAssembly object to the None (Object) field
  • [No Function](関数なし) ドロップダウンから、PartAssemblyController > ResetPlacement () の順に選択し、イベントがトリガーされたときに実行するアクションとして、この関数を設定しますFrom the No Function dropdown, select PartAssemblyController > ResetPlacement () to set this function as the action to be executed when the event is triggered

mr-learning-base

ゲーム モードになったら、近距離または遠距離操作を使用して、探査車のパーツを Rover に配置できます。If you now enter Game mode, you can use near or far interaction to place the rover parts on to the Rover. パーツは、対応する配置ヒントに近づくと、自動的に所定の位置にはめ込まれ、Rover の一部になります。Once the part is close to the corresponding placement hint, it will snap into place and become part of the Rover. 配置をリセットする場合は、[リセット] ボタンを押すことができます。To reset the placements, you can press the Reset button:

mr-learning-base

Object Manipulator コンポーネントとその関連プロパティの詳細については、MRTK ドキュメント ポータルの「オブジェクト マニピュレーター」のガイドを参照してください。To learn more about the Object Manipulator component and its associated properties, you can visit the Object Manipulator guide in the MRTK Documentation Portal.

境界ボックスの追加Adding bounding boxes

境界ボックスには、拡大縮小および回転に使用できるハンドルが用意されているため、1 つの手で、近距離と遠距離の両方のオブジェクトを操作するのがより簡単かつ直感的になります。Bounding boxes make it easier and more intuitive to manipulate objects with one hand for both near and far interaction by providing handles that can be used for scaling and rotating.

この例では、RoverExplorer オブジェクトに境界ボックスを追加して、エクスペリエンス全体を簡単に移動、回転、スケーリングできるようにします。In this example, you will add a bounding box to the RoverExplorer object so the whole experience can easily be moved, rotated, and scaled. また、境界ボックスのオンとオフを切り替えられるように、メニューを構成します。Additionally, you will configure the Menu so you can turn the Bounding Box on and off.

[階層] ウィンドウで、 [RoverExplorer] オブジェクトを選択します。その後、[インスペクター] ウィンドウで、 [コンポーネントの追加] ボタンを使用して、以下のコンポーネントを追加します。In the Hierarchy window, select the RoverExplorer object, then in the Inspector window, use the Add Component button to add the following components:

  • BoundingBox コンポーネントBoundingBox component
  • Object Manipulator (Script) コンポーネントObject Manipulator (Script) component

その後、両方のコンポーネントの横にあるチェックボックスをオフにして、既定で無効になるようにします。Then uncheck the checkbox next to both components to make them disabled by default:

mr-learning-base

注意

境界ボックスの視覚エフェクトは実行時に作成されるため、ゲーム モードに入る前は表示されません。The Bounding Box visualization is created at runtime and, therefore, not visible before you enter Game mode.

注意

BoundingBox コンポーネントによって、実行時に NearInteractionGrabbable コンポーネントが自動的に追加されます。The BoundingBox component will automatically add the NearInteractionGrabbable component at runtime. したがって、このコンポーネントを追加して、追跡対象の手で囲まれたオブジェクトをつかむ必要はありません。Therefore, we do not need to add this component to grab the enclosed objects with tracked hands.

[階層] ウィンドウで、[メニュー] > [ButtonCollection] オブジェクトの順に展開して 4 つのボタンを表示し、3 番目のボタンの名前を BoundingBox_Enable に変更します。その後、[インスペクター] ウィンドウで、Button Config Helper (Script) コンポーネントを次のように構成します。In the Hierarchy window, expand the Menu > ButtonCollection object to reveal the four buttons and rename the third button to BoundingBox_Enable, then in the Inspector window, configure the Button Config Helper (Script) component as follows:

  • [Main Label Text](メイン ラベル テキスト)[有効] に変更しますChange the Main Label Text to Enable
  • RoverExplorer オブジェクトを [None (Object)](なし (オブジェクト)) フィールドに割り当てますAssign the RoverExplorer object to the None (Object) field
  • [No Function](関数なし) ドロップダウンから、 [BoundingBox] > [bool Enabled] の順に選択し、イベントがトリガーされたときにこのプロパティ値を更新するようにしますFrom the No Function dropdown, select BoundingBox > bool Enabled to update this property value when the event is triggered
  • 引数チェックボックスがオンになっていることを確認しますVerify that the argument checkbox is checked
  • 小さい [+] アイコンをクリックして、別のイベントを追加しますClick the small + icon to add another event
  • RoverExplorer オブジェクトを [None (Object)](なし (オブジェクト)) フィールドに割り当てますAssign the RoverExplorer object to the None (Object) field
  • [No Function](関数なし) ドロップダウンから、 [ObjectManipulator] > [bool Enabled] の順に選択し、イベントがトリガーされたときにこのプロパティ値を更新するようにしますFrom the No Function dropdown, select ObjectManipulator > bool Enabled to update this property value when the event is triggered
  • 引数チェックボックスがオンになっていることを確認しますVerify that the argument checkbox is checked
  • [アイコン] は、'境界ボックスがあるキューブ' アイコンのままにしておきますLeave the Icon as the 'cube with bounding box' icon

mr-learning-base

4 番目と最後のボタンの名前を BoundingBox_Disable に変更します。その後、[インスペクター] ウィンドウで、次のように Button Config Helper (Script) コンポーネントを構成します。Rename the forth and last button to BoundingBox_Disable, then in the Inspector window, configure the Button Config Helper (Script) component as follows:

  • [Main Label Text](メイン ラベル テキスト)[無効] に変更しますChange the Main Label Text to Disable
  • RoverExplorer オブジェクトを [None (Object)](なし (オブジェクト)) フィールドに割り当てますAssign the RoverExplorer object to the None (Object) field
  • [No Function](関数なし) ドロップダウンから、 [BoundingBox] > [bool Enabled] の順に選択し、イベントがトリガーされたときにこのプロパティ値を更新するようにしますFrom the No Function dropdown, select BoundingBox > bool Enabled to update this property value when the event is triggered
  • 引数チェックボックスがオフになっていることを確認しますVerify that the argument checkbox is unchecked
  • 小さい [+] アイコンをクリックして、別のイベントを追加しますClick the small + icon to add another event
  • RoverExplorer オブジェクトを [None (Object)](なし (オブジェクト)) フィールドに割り当てますAssign the RoverExplorer object to the None (Object) field
  • [No Function](関数なし) ドロップダウンから、 [ObjectManipulator] > [bool Enabled] の順に選択し、イベントがトリガーされたときにこのプロパティ値を更新するようにしますFrom the No Function dropdown, select ObjectManipulator > bool Enabled to update this property value when the event is triggered
  • 引数チェックボックスがオフになっていることを確認しますVerify that the argument checkbox is unchecked
  • [アイコン] を、'境界ボックスがあるキューブ' アイコンに変更しますChange the Icon to the 'cube with bounding box" icon

mr-learning-base

ゲーム モードに入り、[有効] ボタンをクリックして境界ボックスを有効にしたら、近距離または遠距離操作を使用して、境界ボックスの移動、回転、およびスケーリングを行い、[無効] ボタンを使用して、境界ボックスをもう一度無効にすることができます。If you now enter Game mode and enable the Bounding Box by clicking the Enable button, you can use near or far interaction to move, rotate, and scale the Bounding Box, and use the Disable button to disable the Bounding Box again:

mr-learning-base

Bounding Box コンポーネントとその関連プロパティの詳細については、MRTK ドキュメントポータル境界ボックスに関するガイドを参照してください。To learn more about the Bounding Box component and its associated properties, you can visit the Bounding box guide in the MRTK Documentation Portal.

結論Congratulations

このチュートリアルでは、3D オブジェクトの近距離および遠距離操作を有効にする方法と、許可される操作の種類を制限する方法について学習しました。In this tutorial, you learned how to enable near and far manipulation for 3D objects and how to limit the allowed types of manipulation. また、オブジェクトの操作をより簡単に制御できるように、3D オブジェクトの周囲に境界ボックスを追加する方法について学習しました。You also learned how to add bounding boxes around 3D objects to make it easier to control the object manipulation.

次のチュートリアル:8.視線追跡の使用Next Tutorial: 8. Using eye-tracking