境界ボックス

境界ボックス

注意

境界ボックスは非推奨とされ、後続の 境界コントロールによって置き換えられます。 移行オプションの1つを使用して、既存のゲームオブジェクトをアップグレードします。

この BoundingBox.cs スクリプトは、mixed reality でオブジェクトを変換するための基本的な機能を提供します。 境界ボックスに、ホログラムの周りにキューブが表示され、それを使用して操作できることが示されます。 キューブの角と端に対するハンドルにより、オブジェクトのスケーリングまたは回転が可能になります。 境界ボックスは、ユーザー入力にも反応します。 たとえば HoloLens 2 では、境界ボックスは指の近接に応答し、オブジェクトからの距離を認識するのに役立つ視覚的なフィードバックを提供します。 すべての対話とビジュアルを簡単にカスタマイズできます。

詳細については、Windows デベロッパーセンターの「境界ボックスとアプリバー 」を参照してください。

シーンの例

境界ボックスの構成の例については、シーンを参照して BoundingBoxExamples ください。

Bounding Box Examples

Unity インスペクターを使用して境界ボックスを追加および構成する方法

  1. Box Collider をオブジェクトに追加する
  2. BoundingBoxオブジェクトへのスクリプトの割り当て
  3. ' Activation ' メソッドなどのオプションを構成する (以下の「 インスペクターのプロパティ 」セクションを参照してください)
  4. OptionalHoloLens 2 スタイルの境界ボックスに prefabs と素材を割り当てる (下記の「ハンドルスタイル」セクションを参照してください)

注意

Inspector の Target オブジェクトBounds Override フィールドを使用して、複数の子コンポーネントを持つオブジェクトに特定のオブジェクトと collider を割り当てます。

境界ボックス1

境界ボックスをコードに追加して構成する方法

  1. Cube オブジェクトのインスタンス化

    GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
    
  2. BoundingBoxAddComponent<> () を使用して、collider を使用してオブジェクトにスクリプトを割り当てる

    private BoundingBox bbox;
    bbox = cube.AddComponent<BoundingBox>();
    
  3. オプションの構成 (以下の「 インスペクターのプロパティ 」セクションを参照)

    // Make the scale handles large
    bbox.ScaleHandleSize = 0.1f;
    // Hide rotation handles
    bbox.ShowRotationHandleForX = false;
    bbox.ShowRotationHandleForY = false;
    bbox.ShowRotationHandleForZ = false;
    
  4. OptionalHoloLens 2 スタイルの境界ボックスに prefabs と素材を割り当てます。 この場合も、素材と prefabs を動的に読み込む必要があるため、inspector による割り当てが必要になります。

注意

Unity の ' Resources ' フォルダーまたはシェーダーを使用してい ます。 シェーダーの順列は実行時に欠落している可能性があるため、シェーダーを動的に読み込むことは推奨されません。

bbox.BoxMaterial = [Assign BoundingBox.mat]
bbox.BoxGrabbedMaterial = [Assign BoundingBoxGrabbed.mat]
bbox.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
bbox.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
bbox.ScaleHandlePrefab = [Assign MRTK_BoundingBox_ScaleHandle.prefab]
bbox.ScaleHandleSlatePrefab = [Assign MRTK_BoundingBox_ScaleHandle_Slate.prefab]
bbox.ScaleHandleSize = 0.016f;
bbox.ScaleHandleColliderPadding = 0.016f;
bbox.RotationHandleSlatePrefab = [Assign MRTK_BoundingBox_RotateHandle.prefab]
bbox.RotationHandleSize = 0.016f;
bbox.RotateHandleColliderPadding = 0.016f;

例: MinMaxScaleConstraint を使用して最小、境界ボックスの最大スケールを設定する

スケールの最小値と最大値を設定するには、を使用し MinMaxScaleConstraint ます。 また、MinMaxScaleConstraint を使用して、の最小スケールと最大スケールを設定することもでき ManipulationHandler ます。

GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
bbox = cube.AddComponent<BoundingBox>();
// Important: BoundingBox creates a scale handler on start if one does not exist
// do not use AddComponent, as that will create a  duplicate handler that will not be used
MinMaxScaleConstraint scaleConstraint = bbox.gameObject.GetComponent<MinMaxScaleConstraint>();
scaleConstraint.ScaleMinimum = 1f;
scaleConstraint.ScaleMaximum = 2f;

例: game オブジェクトの周囲に境界ボックスを追加する

オブジェクトの周囲に境界ボックスを追加するには、コンポーネントを追加するだけです BoundingBox

private void PutABoxAroundIt(GameObject target)
{
   target.AddComponent<BoundingBox>();
}

インスペクターのプロパティ

ターゲット オブジェクト

このプロパティは、境界ボックスの操作によって変換されるオブジェクトを指定します。 オブジェクトが設定されていない場合、境界ボックスは既定で owner オブジェクトに設定されます。

境界のオーバーライド

境界計算のために、オブジェクトから box collider を設定します。

アクティベーションの動作

境界ボックスインターフェイスをアクティブ化するには、いくつかのオプションがあります。

  • [Start でアクティブに する]: シーンが開始されたときに境界ボックスが表示されます。
  • 手動でのアクティブ化: 境界ボックスが自動的に表示されなくなります。 BoundingBox プロパティにアクセスすることにより、スクリプトを使用して手動でアクティブ化できます。

スケールの最小値

許容される最小スケール。 このプロパティは非推奨とされており、スクリプトを追加することをお勧めし MinMaxScaleConstraint ます。 このスクリプトを追加すると、境界ボックスからではなく、最小スケールがこのスクリプトから取得されます。

最大スケール

許容される最大スケール。 このプロパティは非推奨とされており、スクリプトを追加することをお勧めし MinMaxScaleConstraint ます。 このスクリプトを追加すると、境界ボックスからではなく、最大スケールが使用されます。

Box の表示

さまざまな境界ボックスの視覚化オプション。

[軸の平坦化] が [ 自動フラット 化] に設定されている場合、スクリプトは、最小の範囲の軸に沿った操作を許可しません。 その結果、通常はシンオブジェクトに使用される2D 境界ボックスが表示されます。

ハンドル

ハンドルスタイルをオーバーライドするには、マテリアルおよび prefab を割り当てることができます。 ハンドルが割り当てられていない場合は、既定のスタイルで表示されます。

イベント

境界ボックスには、次のイベントがあります。 この例では、これらのイベントを使用してオーディオフィードバックを再生します。

  • 回転の開始: 回転の開始時に発生します。
  • Rotate を終了: 回転が終了したときに発生しました。
  • スケール開始: スケーリングの開始時に発生します。
  • Scale end: スケーリングが終了したときに発生します。
Events

ハンドルスタイル

既定では、スクリプトを割り当てるだけで、 BoundingBox.cs HoloLens 1 番目の gen スタイルのハンドルが表示されます。 HoloLens 2 スタイルハンドルを使用するには、適切なハンドル prefabs とマテリアルを割り当てる必要があります。

境界ボックスハンドルのスタイル

HoloLens 2 スタイルの境界ボックスハンドルの prefabs、素材、およびスケーリングの値を次に示します。 この例はシーンで確認でき BoundingBoxExamples ます。

HandStyles 2

ハンドル (HoloLens 2 スタイルのセットアップ)

  • ハンドルマテリアル: BoundingBoxHandleWhite
  • グラブマテリアルの処理: BoundingBoxHandleBlueGrabbed
  • スケールハンドル prefab: MRTK_BoundingBox_ScaleHandle
  • スケールハンドルスレート prefab: MRTK_BoundingBox_ScaleHandle_Slate。
  • スケールハンドルのサイズ: 0.016 (1.6 cm)
  • スケールハンドル Collider Padding: 0.016 (grabbable Collider は、視覚を処理するより少し大きくなります)
  • 回転ハンドル prefab: MRTK_BoundingBox_RotateHandle
  • 回転ハンドルのサイズ: 0.016
  • 回転ハンドル Collider Padding: 0.016 (grabbable Collider は、視覚を処理するより少し大きくなります)

近接 (HoloLens 2 スタイルのセットアップ)

ハンドの距離に基づいてアニメーションを使用してハンドルを表示または非表示にします。 2段階のスケーリングアニメーションがあります。

Proximity
  • 近接効果アクティブ: 近接したハンドルのアクティブ化を有効にする
  • 処理中の中程度の近接: 1 番目のステップのスケーリングの距離
  • 近接するハンドルの処理: 2 番目のステップのスケーリングの距離
  • Far Scale: 外部が境界ボックスの相互作用の範囲外にある場合のハンドル資産の既定のスケール値 (' ハンドル中近接度 ' によって定義された距離)。 既定でハンドルを非表示にするには0を使用します)
  • 中規模: 境界ボックスの相互作用の範囲内にある場合のハンドル資産のスケール値 (上で定義されている ' 近くの近接距離を処理する ')。 通常のサイズを表示するには1を使用します)
  • Close Scale: グラブがグラブの相互作用の範囲内にある場合のハンドル資産のスケール値 (上で定義されている ' ハンドルの近接部分 ' で定義されている距離)。 1. x を使用してサイズを大きくします)

操作ハンドラーを使用してオブジェクトを移動可能にする

境界ボックスをと組み合わせて ManipulationHandler.cs 、遠くの対話を使用してオブジェクトを移動できるようにすることができます。 操作ハンドラーは、1つまたは2つの相互作用をサポートします。 ハンドトラッキング を使用すると、オブジェクトを上に閉じることができます。

Manipulation Handler

境界ボックスのエッジが、遠くの相互作用を使用して移動するときと同じように動作するために ManipulationHandler は、上の / BoundingBox.HighlightWires / BoundingBox.UnhighlightWires スクリーンショットに示すように、操作が開始された操作に対するイベントを、それぞれの操作が終了したに接続することをお勧めします。

境界制御への移行

境界ボックスを使用している既存の prefabs とインスタンスは、MRTK ツールパッケージの一部である [移行] ウィンドウで新しい境界コントロールにアップグレードできます。

境界ボックスの個々のインスタンスをアップグレードする場合は、コンポーネントのプロパティインスペクター内に移行オプションもあります。

Bounds Control Migrate