MRTK での目でサポートされるナビゲーション — MRTK2

MRTK

スレートの情報を読んでいるときに、表示されているテキストの末尾に近づいたときに、テキストが自動的にスクロールして、コンテンツがさらに表示されることがあります。 または、見ている場所をスムーズに拡大できます。 また、マップによってコンテンツが自動的に調整され、目的の項目がビューのフィールド内に保持されます。 他の興味深いアプリケーションとしては、自分が見ている 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。

Unity での目でサポートされるスクロールのセットアップ

EyeTrackingTarget

EyeTrackingTarget コンポーネントをアタッチすることで、目の視線入力に関連するイベントを柔軟に処理できます。 スクロールのサンプルでは、ユーザーがパネルを見たときに開始し、ユーザーが視線を外したときに停止するテキスト スクロールを示します。 Unity での目でサポートされるスクロールのセットアップ: 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。

Unity での目でサポートされるパンとズームの設定

アテンションベースの 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 軸の周りの回転を制限する垂直方向の最大回転角度。

Unity での目でサポートされる 3D 回転の設定

要約すると、上記のスクリプトを使用すると、テキストのスクロール、テクスチャのズームとパン、3D ホログラムの回転検査などの、さまざまな入力ナビゲーション タスクに対して、目の視線入力の使用を開始できます。

関連項目


"MixedRealityToolkit での視線追跡" に戻る