MRTK での目でサポートされるナビゲーション — MRTK2
スレートの情報を読んでいるときに、表示されているテキストの末尾に近づいたときに、テキストが自動的にスクロールして、コンテンツがさらに表示されることがあります。 または、見ている場所をスムーズに拡大できます。 また、マップによってコンテンツが自動的に調整され、目的の項目がビューのフィールド内に保持されます。 他の興味深いアプリケーションとしては、自分が見ている 3D ホログラムの部分が自動的に正面に来る、3D ホログラムのハンズフリー参照があります。 このページでは、いくつかの例について、MRTK の視線対応ナビゲーションのコンテキストで説明します。
以下の説明は、MRTK シーンでの目の追跡の設定方法や、MRTK Unity の視線追跡データへのアクセスの基本について既に理解していることを前提としています。
以下で説明する例はすべて、EyeTrackingDemo-03-Navigation
(Assets/MRTK/Examples/Demos/EyeTracking/Scenes/EyeTrackingDemo-03-Navigation) シーンの一部です。
概要: テキストの自動スクロール、目の視線入力対応の仮想マップのパンとズーム、ハンズフリーの視線入力方向の 3D 回転。
自動スクロール
自動スクロールを使用すると、ユーザーは指を離すことなくテキストをスクロールできます。
ただ読み続けるだけで、ユーザーが見ている場所に応じて、テキストが自動的に上下にスクロールします。
EyeTrackingDemo-03-Navigation
(Assets/MRTK/Examples/Demos/EyeTracking/Scenes) で提供されている例から始めることができます。
この例では、TextMesh コンポーネントを使用して、新しいテキストの読み込みと書式設定を柔軟に行うことができます。
自動スクロールを有効にするには、次の 2 つのスクリプトをテキストボックスのコライダー コンポーネントに追加するだけです。
ScrollRectTransf
TextMesh またはより一般的には RectTransform コンポーネントをスクロールするには、ScrollRectTransf スクリプトを使用できます。 RectTransform の代わりにテクスチャをスクロールする場合は、ScrollRectTransf の代わりに ScrollTexture を使用します。 次の例では、Unity エディターで使用できる ScrollRectTransf のパラメーターについて詳しく説明します。
パラメーター | 説明 |
---|---|
LimitPanning | 有効にすると、スクロール可能なコンテンツがその境界で停止されます。 |
RectTransfToNavigate | スクロールするには RectTransform を参照します。 |
RefToViewport | 適切なオフセットと境界を決定するために、スクロール可能なコンテンツの親 RectTransform を参照します。 |
AutoGazeScrollIsActive | 有効にすると、ユーザーがアクティブな領域 (例: 垂直スクロール速度が 0 でない場合は、スクロール パネルの上部と下部) を参照したときに、テキストが自動的にスクロールされます。 |
ScrollSpeed_x | 0 に等しくない値に設定すると、水平スクロールが有効になります。 負の値は、スクロール方向の変更 (左から右か、右から左) を意味します。 |
ScrollSpeed_y | 0 に等しくない値に設定すると、垂直スクロールが有効になります。 負の値は、スクロール方向の変更 (上から下か、下から上) を意味します。 |
MinDistFromCenterForAutoScroll | ターゲットのヒット ボックス (0, 0) の中心からの x と y の最小距離を正規化します。 したがって、値は 0 (常にスクロール) と 0.5 (スクロールなし) の範囲で指定する必要があります。 |
UseSkimProofing | 有効にすると、すばやく見回したときに急なスクロールの動きが防止されます。 これにより、スクロールの反応が低下したと感じられる場合があります。 SkimProofUpdateSpeed 値を使用してチューニングできます。 |
SkimProofUpdateSpeed | 値が小さいほど、目線がすばやく動いた後のスクロールの高速化が低減されます。 推奨される値: 5。 |
EyeTrackingTarget
EyeTrackingTarget コンポーネントをアタッチすることで、目の視線入力に関連するイベントを柔軟に処理できます。 スクロールのサンプルでは、ユーザーがパネルを見たときに開始し、ユーザーが視線を外したときに停止するテキスト スクロールを示します。
視線入力対応のパンとズーム
自宅を探すとき、または知らない場所を探索する前に仮想マップを使用したことがない人がいるでしょうか。 視線追跡を使用すると、関心のある場所を正確に把握し、拡大した後に、通り沿いをスムーズに移動して近所を探索できます。 これは、地図を調べる場合だけでなく、写真、データの視覚化、ライブストリーミングされた医療画像などの詳細を確認する場合にも役立ちます。 アプリでこの機能を使用するのは簡単です。 テクスチャにレンダリングされるコンテンツ (写真、ストリーミングされるデータなど) の場合は、PanZoomTexture スクリプトを追加するだけです。 RectTransform の場合は PanZoomRectTransf を使用します。 自動スクロール機能を拡張することで、基本的には、垂直方向および水平方向の両方にスクロールすると同時に、ユーザーの現在のフォーカス ポイントを中心にコンテンツを拡大できます。
パラメーター | 説明 |
---|---|
LimitPanning | 有効にすると、スクロール可能なコンテンツがその境界で停止されます。 |
HandZoomEnabledOnStartup | ズーム ジェスチャを実行するためにハンド ジェスチャを自動的に有効にするかどうかを示します。 ズーム操作を誤ってトリガーしないように、最初は無効にすることができます。 |
RendererOfTextureToBeNavigated | 移動するテクスチャの参照されたレンダラー。 |
Zoom_Acceleration | ロジスティック速度関数マッピングの傾斜を定義するズーム アクセラレーション。 |
Zoom_SpeedMax | 最大ズーム速度。 |
Zoom_MinScale | 拡大のテクスチャの最小スケール。例: 0.5 f (元のサイズの半分)。 |
Zoom_MaxScale | 縮小のテクスチャの最大スケール。例: 1 f (元のサイズ) または 2.0 f (元のサイズの 2 倍)。 |
Zoom_TimeInSecToZoom | 時間指定ズーム: トリガーされると、指定された時間 (秒単位) 拡大/縮小が実行されます。 |
Zoom_Gesture | 拡大/縮小に使用するハンド ジェスチャの種類。 |
--- | --- |
Pan_AutoScrollIsActive | 有効にすると、ユーザーがアクティブな領域 (例: 垂直スクロール速度が 0 でない場合は、スクロール パネルの上部と下部) を参照したときに、テキストが自動的にスクロールされます。 |
Pan_Speed_x | 0 に等しくない値に設定すると、水平スクロールが有効になります。 負の値は、スクロール方向の変更 (左から右か、右から左) を意味します。 |
Pan_Speed_y | 0 に等しくない値に設定すると、垂直スクロールが有効になります。 負の値は、スクロール方向の変更 (上から下か、下から上) を意味します。 |
Pan_MinDistFromCenter | ターゲットのヒット ボックス (0, 0) の中心からの x と y の最小距離を正規化します。 したがって、値は 0 (常にスクロール) と 0.5 (スクロールなし) の範囲で指定する必要があります。 |
UseSkimProofing | 有効にすると、すばやく見回したときに急なスクロールの動きが防止されます。 これにより、スクロールの反応が低下したと感じられる場合があります。 SkimProofUpdateSpeed 値を使用してチューニングできます。 |
SkimProofUpdateSpeed | 値が小さいほど、目線がすばやく動いた後のスクロールの高速化が低減されます。 推奨される値: 5。 |
アテンションベースの 3D 回転
3D オブジェクトを見ているときに、より近くで見たい部分が魔法のようにこちらを向き、あたかもシステムが自分の気持ちを読み取ってアイテムをこちらに向けることを想像してみましょう。 これがアテンションベースの 3D 回転の概念です。これを使用すると、指を持ち上げることなく、ホログラムのすべての側面を調べることができます。 この動作を有効にするには、Collider コンポーネントを使用して、OnLookAtRotateByEyeGaze スクリプトを GameObject の一部に追加するだけです。 次に示すいくつかのパラメーターを微調整して、ホログラムが回転する速度と方向を制限できます。
ご想像のとおり、この動作を常にアクティブにすると、混雑したシーンでは煩雑になる可能性があります。
このため、最初はこの動作を無効にしておいて、音声コマンドを使用してすばやく有効にすることができます。
別の方法として、EyeTrackingDemo-03-Navigation
(Assets/MRTK/Examples/Demos/EyeTracking/Scenes) に追加された例では、TargetMoveToCamera を使用して、対象となるターゲットを選択し、Come to meと言うだけで目の前を飛ぶようにすることもできます。
近距離モードでは、自動回転モードが自動的に有効になります。 このモードでは、少し下がって対象に視線を向ける、対象の周りを歩く、対象を掴もうとして手を伸ばして回すなどの動作をするだけで、すべての側面から観察できます。 ターゲットを閉じると (ピンチ & 見て 、"戻る" と言うと、元の場所に戻り、遠くからあなたに反応しなくなります。
パラメーター | 説明 |
---|---|
SpeedX | 水平方向の回転速度。 |
SpeedY | 垂直方向の回転速度。 |
InverseX | 水平方向の回転方向を反転。 |
InverseY | 垂直方向の回転方向を反転。 |
RotationThreshInDegrees | "ターゲットへの視線入力" と "カメラからターゲット" の間の角度がこの値より小さい場合は、何も行いません。 これは、不安定で小刻みな回転を防止するためです。 |
MinRotX | 水平方向の回転角度の最小値。 これは、異なる方向への回転を制限するためのものです。 |
MaxRotX | 水平方向の回転角度の最大値。 これは、異なる方向への回転を制限するためのものです。 |
MinRotY | X 軸の周りの回転を制限する垂直方向の最小回転角度。 |
MaxRotY | Y 軸の周りの回転を制限する垂直方向の最大回転角度。 |
要約すると、上記のスクリプトを使用すると、テキストのスクロール、テクスチャのズームとパン、3D ホログラムの回転検査などの、さまざまな入力ナビゲーション タスクに対して、目の視線入力の使用を開始できます。