ハンド コーチ

手動メニュー

手作業は3D でモデル化されており、システムがユーザーの手を検出しないとトリガーされます。 これは、ジェスチャが学習されていないときにユーザーをガイドする "教職員" コンポーネントとして実装されます。 ユーザーが指定されたジェスチャをピリオドに対して実行していない場合、針は遅延でループします。 針を使用すると、ボタンを押すか、またはホログラムを選ぶことができます。

現在の相互作用モデルは、スクロール、遠くの選択、およびニアタップなどのさまざまなジェスチャコントロールを表します。 次に、既存の手作業の例の完全な一覧を示します。

  • Near tap –ボタンまたは対話型オブジェクトを閉じるために使用されます。
  • Far select –遠く離れたオブジェクトに使用されます。
  • 移動–領域内のホログラムを移動するために使用されます。
  • Rotate –ホログラムまたはオブジェクトの回転方法を示すために使用されます。
  • Scale –ホログラムを拡大または縮小する方法を示すために使用されます。
  • 手動フリップ– UI のスタートパネルまたはハンドメニューを起動するために使用されます。
  • Palm up –すぐに使用可能なエクスペリエンスの hummingbird のために使用されます。 もう1つの提案は、UI スタートパネルを表示することです。
  • Scroll –リストまたは長いドキュメントをスクロールするために使用します。

シーンの例

例については、次の「 MixedRealityToolkit/実験/サンプルシーン」を参照してください。

ハンド3D アセット

資産は次の場所で見つけることができます: MixedRealityToolkit/実験的/リソース

品質

スキンメッシュにゆがみがある場合は、プロジェクトで適切な関節の量を使用していることを確認する必要があります。 Unity の編集 > Project 設定 > 品質 > その他 > Blend の重みにアクセスします。 Smooth 関節を表示するには、"4 つの骨" が選択されていることを確認してください。 Project設定

スクリプト

相互作用のヒント

この InteractionHint.cs スクリプトは、アニメーションをトリガーするためのラッパー機能を提供し、手の形をしたマシン群をフェードします。

相互作用ヒントを設定する方法

相互作用ヒントを設定するには、提供された prefabs "StaticHandCoachRoot_L. prefab" と "StaticHandCoachRoot_R" を使用することをお勧めします。 この事前 fab には、指定されたヒントアニメーションが意図したとおりに動作するようにするための適切な階層と共に、InteractionHint スクリプトとハンドマシン群が含まれています。 それ以外の場合は、ユーザーがアニメーターを使用して、自分のマシンから1つ上の親レベルに、このスクリプトを作成する必要があります。

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

  • Hideifの追跡 このブール値は、ユーザーの手が追跡されているときに、ハンドトラッキングの状態を使用してビジュアルを非表示にするかどうかを指定します。 False に設定されている場合、ヒントを非表示にするかどうかを決定するために、スクリプトプロパティ "Customonly Hideビジュアル" のみが使用されます。

  • Mindelay このプロパティは、ビジュアルを表示するための最小遅延を指定します。 既定では、ユーザーの手が追跡されていない場合、この数秒後に手の視覚エフェクトが表示されます。

  • Maxdelay このプロパティは、ビジュアルを表示するための最大遅延を指定します。 既定では、ユーザーの手が追跡されている場合でも、この数秒後に手のビジュアルが表示されます。

  • UseMaxTimer このブール値が false に設定されている場合は、最大タイマーが無効になり、ユーザーの手が表示されていないときはハンドヒントのみが表示され、カスタム条件では false が返されます。

  • 繰り返し このプロパティは、最小値または最大値のタイマーが経過したときにヒントアニメーションが再生される回数を制御します。 その後、ヒントは非表示になり、遅延を再度待機します。

  • AutoActivate このブール値が true に設定されている場合、スクリプトの作成オブジェクトが階層内でアクティブで、スクリプトが有効になっていると、ヒントはタイマーロジックを通じて自動的に実行されます。 コードを使用してヒントの外観と消失を手動で制御する場合は、false に設定する必要があります。

  • アニメーションの状態 ヒントがアクティブなときに再生するアニメーション状態の名前。 StartHintLoop () 関数が呼び出される前に、これを設定する必要があります (AutoActivate がチェックされている場合は OnEnable)。

スクリプトを使用した InteractionHint の制御

  • Starthintloop この関数は、AutoActivate フラグが true に設定されている場合に OnEnable を開始する、表示/非表示のループを開始します。
  • Stophintloop この関数は、フェードアウトアニメーションの状態が現在再生されていない場合は、その状態を呼び出し、表示/非表示のループを非アクティブ化して、その階層でハンドマシンを非アクティブに設定します。
  • アニメーションの状態 この文字列は、ループ中に再生されるアニメーションの状態を決定します。 この文字列を変更して、再生する状態を変更することができますが、StopHintLoop を呼び出した後で、状態を変更した後で StartHintLoop を再度呼び出す必要があります。
  • カスタムビジュアル これは独自の関数で設定できます。これは、ビジュアルを非表示にする場合に true を返す必要があります (具体的には、MinMaxTimer、具体的には max パラメーター)。

カスタムアニメーションに関する考慮事項

フェードは既定で0.5 秒に設定されているため、リモートテストマシンで使用するために作成されたカスタムアニメーションは、意味のある情報を伝えるために、最低でも1.5 秒である必要があります。

指定された既定のフェードインとフェードアウトの状態、Fade_In および Fade_Out は、2番目のキーフレームのタイムスタンプを変更してフェードの長さを設定することによって調整できます。

アニメーターとスクリプトが、可能な限り簡単にセットアップできるように設定されました。 新しいアニメーション状態を追加するには、fbx をインポートするだけで、アニメーション名が個別の名前で設定されていることを確認し、そのアニメーションをアニメーターにドラッグします。

MoveToTarget

MoveToTarget .cs スクリプトは、時間の経過と共に追跡位置からターゲットの位置にハンドヒントを移動する機能を提供します。

MoveToTarget を設定する方法

指定された prefabs "MovingHandCoachRoot_L. prefab" と "MovingHandCoachRoot_R" には、階層内に MoveToTarget が含まれています。 独自のセットアップでこのスクリプトを使用する場合は、リモートテストマシン用のアニメーターを含むルートのユーザーオブジェクトに配置する必要があります。

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

  • Trackingobject これを、リモートテストマシンが動作を開始する前に実行するオブジェクトで設定します。 空のユーザーオブジェクトを作成し、それを特定の位置に移動することをお勧めします。これにより、追跡の特定が容易になります。
  • TargetObject これを、その動作中に、リモートテストマシンの移動先となるオブジェクトで設定します。 空のユーザーオブジェクトを作成し、それを特定の位置に移動することをお勧めします。これにより、追跡の特定が容易になります。
  • RootObject 相対位置を正しく計算できるように、これを追跡オブジェクトとターゲットオブジェクトの間の共有親に設定します。 含まれている prefab には、階層内の追跡オブジェクトとターゲットオブジェクトの両方がありますが、ターゲットオブジェクトを prefab 以外のユーザーオブジェクトとして設定し、ルートオブジェクトを共有親に変更することができます。
  • 期間 TrackingObject から TargetObject に数秒で移動するのにかかる時間 (秒)。
  • TargetOffset 右のターゲット位置に到達するためのオブジェクトを取得するためのチューニング可能なオフセット。 これは、アニメーション中にアニメーションに位置のオフセットが含まれている場合に便利です。
  • アニメーション曲線 これは既定で線形曲線になりますが、モーションパスを開始および停止するときにイージングを提供するように曲線を変更することができます。

スクリプトを使用した MoveToTarget の制御

カスタムスクリプトで、() を呼び出して、ハンドマシンを TrackingObject に従うようにします。その後、ハンドマシンの動きを TargetObject に開始するには、MoveToTargetPosition () を呼び出します。

アニメーションを使用して MoveToTarget を制御する

移動する必要があるアニメーションでは、次の2つのイベントを設定します。1つは、Follow () を呼び出し、もう1つは MoveToTargetPosition () を呼び出します。 最初のキーフレームに従います。これは、ハンドマシンが TrackingObject に従うようにするためです。 MoveToTargetPosition は、リモートテストマシンのターゲットへの移動を開始するキーフレームに設定する必要があります。 これは、提供された prefabs でスクリプト機能を使用する方法です。

RotateAroundPoint

RotateAroundPoint スクリプトは、時間の経過と共にピボットポイントを中心にハンドヒントを回転させる機能を提供します。

RotateAroundPoint を設定する方法

指定された prefabs "RotatingHandCoachRoot_L. prefab" と "RotatingHandCoachRoot_R" には、階層内の RotateAroundPoint が含まれています。 独自のセットアップでこのスクリプトを使用する場合は、リモートテストマシン用のアニメーターを含むルートのユーザーオブジェクトに配置する必要があります。

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

  • センター Edparent これを、リモートテストマシンをピボットする親オブジェクトで設定します。
  • InverseParent 向きを同じにするために、これを親に設定して逆方向に回転させます。 一般に、これは InteractionHint スクリプトが含まれている親オブジェクトになります。
  • Pivotposition ヒントを開始するポイントに設定します。
  • 期間 センター Edparent の周りを回転させるためにかかる時間 (秒単位)。
  • アニメーション曲線 これは既定で線形曲線になりますが、モーションパスを開始および停止するときにイージングを提供するように曲線を変更することができます。
  • RotationVector 各軸に沿って回転する角度。

スクリプトを使用した RotateAroundPoint の制御

カスタムスクリプトで、RotateToTarget () を呼び出します。これにより、ハンドマシンを使用して、センター Edparent の周りの回転を開始することができます。 位置を元の PivotPosition にリセットする場合は、Resetand決定 Epivot () を呼び出します。

アニメーションを使用した RotateAroundPoint の制御

移動する必要があるアニメーションでは、2つのイベントを設定します。1つは Resetand決定 Epivot () を呼び出し、もう1つは RotateToTarget () を呼び出します。 最初のキーフレームに対して Resetand決定 Epivot を設定する必要があります。これは、独自のテストマシンが PivotPosition にリセットされるためです。 RotateToTarget は、リモートテストマシンが中心 Edparent を中心に回転を開始するキーフレームに設定する必要があります。 これは、提供された prefabs でスクリプト機能を使用する方法です。