Tap to place

TapToPlace

Tap to Place は、ゲーム オブジェクトをサーフェスに配置するために使用される、離れたところから対話式操作を行うためのコンポーネントです。 このコンポーネントは、空間メッシュにオブジェクトを配置する場合に便利です。 Tap to Place では、2 回のクリックと頭の動きの組み合わせを使用してオブジェクトが配置されます。 クリックして配置を開始し、頭を動かしてオブジェクトの位置を制御し、クリックしてシーン内にオブジェクトを配置します。

Tap to Place を使用する

  1. シーンをセットアップします

    • 新しい Unity シーンを作成します
    • [Mixed Reality Toolkit] > [シーンに追加して構成する] に移動して、MRTK をシーンに追加します

    注意

    Tap to Place では、MRTK 入力システムによって機能するクリックが使用されますが、クリックなしでも制御できます。以下の「Tap To Place のコードの構成可能性」セクションを参照してください。

    • キューブをシーンに追加して、スケールを 0.2 に変更し、位置を (0、0、0.7) に変更します。
  2. コライダーを使用してゲーム オブジェクトに Tap to Place をアタッチします

    TapToPlaceInspector

    • Tap to Place コンポーネントを追加すると、ソルバー ハンドラーもアタッチされます。 Tap to Place は、ソルバー ハンドラーを必要とするソルバー クラスから派生しています。 Tap to Place オブジェクトの位置は、ソルバー ハンドラー内の TrackedTargetType を基準として計算されます。 既定では、ヘッドが TrackedTargetType です。つまり、頭を動かすと、オブジェクトがそれに従います (選択されている場合)。 また、TrackedTargetType にコントローラー レイを設定することもできます。この場合、オブジェクトはコントローラーに従います。 Tap to Place インスペクターのプロパティの最初のグループは、ソルバーの共通のプロパティです。

    重要

    Tap to Place はスタンドアロン ソルバーであり、他のソルバーと連結することはできません。 連結できない理由は、オブジェクトの配置時に SolverHandler.UpdateSolvers を使用してオブジェクトの位置が更新されるためです。

    • Tap to Place のプロパティ:
      • Auto Start: true の場合、Tap to Place ソルバーで、配置するゲーム オブジェクトの位置の制御が開始されます。 オブジェクトでは、TrackedTargetType (ヘッドまたはコントローラー レイ) の追跡がただちに開始されます。 有効にするには、Start() を呼び出す前に、この値を変更する必要があります。
      • Default Placement Distance: 既定の距離 (メートル単位)。オブジェクトは、TrackedTargetType を基準として SolverHandler の前に配置されます。 サーフェスがレイキャストによってヒットしない場合、ゲーム オブジェクトは既定の配置距離で配置されます。
      • Max Raycast Distance: 'TrackedTargetType' の原点に基づくレイキャストの最大距離 (メートル)。 このレイキャストでは、選択したオブジェクトを配置するサーフェスを探します。
      • UseDefaultSurfaceNormalOffset: このプロパティは既定で true です。配置されるオブジェクトがサーフェス上で調整されます。 このプロパティが true の場合、SurfaceNormalOffset プロパティに指定された値の代わりに、既定のサーフェスの法線のオフセットが適用されます。 false の場合、SurfaceNormalOffset の値が適用されます。 既定のサーフェスの法線のオフセットは、z 軸に沿ったコライダーの距離です。
      • Surface Normal Offset: 配置するゲーム オブジェクトの中心とサーフェスの法線に沿ったサーフェスの間の距離 (レイキャストがサーフェスにヒットした場合)。 このプロパティは、UseDefaultSurfaceNormalOffset が false の場合にのみオブジェクトに適用されます。
      • Keep Orientation Vertical: true の場合、配置するゲーム オブジェクトは Vector3.up に合わせて垂直方向に維持されます。
      • Rotate According to Surface: false の場合、配置するゲーム オブジェクトは、ヒットしたサーフェスに応じて回転が変更されません。 IsBeingPlaced が true のとき、オブジェクトはカメラの方を向いたままになります。
      • Magnetic Surfaces: 最も高い優先度から最も低い優先度へと実行するための LayerMask の配列。 ヒットしたレイキャストを提供する最初のレイヤー マスクは、位置の計算に使用されます。
      • Debug Enabled: true の場合、Unity エディターでは、ヒットしたレイキャストの法線が黄色で描画されます。 [デバッグの有効化] は、RotateAccordingToSurface が true の場合に便利です。オブジェクトが現在の方向に設定されている理由を視覚的に説明するヒットしたサーフェスの法線が描画されるためです。
      • On Placing Started: このイベントは、配置するゲーム オブジェクトが選択されると 1 回トリガーされます。
      • On Placing Stopped: このイベントは、配置するゲーム オブジェクトが選択解除されて配置されると 1 回トリガーされます。
  3. Tap to Place の動作をエディターでテストします

    • 再生を押し、スペース バーを押したままにして、入力シミュレーションの手を表示します。
    • キューブにフォーカスが当たるまで手を動かし、マウスの左ボタンをクリックすることによって、入力シミュレーションの手でクリックをシミュレートします。
      • コライダーがシーン内に存在しない場合、オブジェクトは定義された Default Placement DistanceTrackedTargetType に従います。
    • オブジェクトは、選択後に TrackedTargetType の動きに従います。 エディターでヘッドの動きをシミュレートするには、WASD キーを押します。 右マウスをクリックしたままにすることで、ヘッドの回転を変更します。
    • オブジェクトの配置を停止するには、もう一度クリックします。 配置の停止のクリックをするときに、オブジェクトにフォーカスが当たっている必要はありません。 フォーカスは、配置プロセスを開始するための最初のクリックのときにのみ必要となります。
    TrackedTargetType: ヘッド (既定値) TrackedTargetType: コントローラー レイ
    Tap To Place の入力シミュレーションのヘッド コントロール レイ Tap To Place の入力シミュレーションのコントローラー レイ 2

Tap to Place のコードの構成可能性

Tap to Place のオブジェクトの選択のタイミングは、クリック イベントを必要とせずに、StartPlacement()StopPlacement() を使用して制御することもできます。 この機能は、テストの記述に役立ち、MRTK 入力システムを使用せずにエディターにオブジェクトを配置する別の方法が提供されます。

  1. 空のゲーム オブジェクトを作成します

  2. 次のサンプル スクリプトを作成し、空のゲーム オブジェクトにアタッチします

    using UnityEngine;
    using Microsoft.MixedReality.Toolkit.Utilities.Solvers;
    
    public class TapToPlaceInputExample : MonoBehaviour
    {
        private GameObject cube;
        private TapToPlace tapToPlace;
    
        void Start()
        {
            cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
            cube.transform.localScale = Vector3.one * 0.2f;
            cube.transform.position = Vector3.forward * 0.7f;
    
            tapToPlace = cube.AddComponent<TapToPlace>();
        }
    
        void Update()
        {
            if (Input.GetKeyDown(KeyCode.U))
            {
                tapToPlace.StartPlacement();
            }
            if (Input.GetKeyDown(KeyCode.I))
            {
                tapToPlace.StopPlacement();
            }
        }
    }
    
  3. 再生モードで、U キー を押してキューブの配置を開始します

  4. "I キー" を押して配置を停止します

Tap to Place のサンプル シーン

Tap to Place のサンプル シーンは、それぞれ異なる構成の 4 つの配置可能なオブジェクトで構成されています。 このサンプル シーンには、階層で既定で無効になっているサーフェス配置の動作を示す壁が含まれています。 サンプル シーンは、リリース ページにある Microsoft.MixedReality.Toolkit.Unity.Examples unity パッケージで確認できます。 シーンの場所は MRTK.Examples/Demos/Solvers/Scenes/TapToPlaceExample.unity です。

Tap To Place の例

関連項目