Eye Trackingでボタンを押す

はじめに

Eye Trackingについて調べていたら、「Dwell」というMRTKのUIを使うと目線でボタンを押すことができるようです。

docs.microsoft.com

今回はこの実装方法について書きたいと思います。

環境

Unity 2020.3.26f1
MRTK 2.7.3

前提

Eye Trackingを使うための設定が完了していること

実装方法

まずUnityエディタのProjectウィンドウにて、「PressableButtonHoloLens2_Dwell」と検索して該当のPrefabをHierarchyに追加します。(下図の①)

InspectorからDwellHandlerを開き、Dwell Trigger Poiner TypeをEyesに設定します。(下図の②)

f:id:jbs_tafurukawa:20220415114004p:plain

これだけでEye Trackingでボタンを押すための設定は完了です。
デフォルトの設定だと2秒間ボタンに対して視線を向けているとボタンを押したと判定されます。
Time To Complete Dwellの値で調節できます)

次にボタンを押したときの処理を実装します。今回は「ボタンを押す毎に表示されている数値が1増加する」とします。

まず以下のようなスクリプトを作ります。

using Microsoft.MixedReality.Toolkit.Input;
using TMPro;
using UnityEngine;

public class EyeDwellTest : MonoBehaviour
{
    int num = 0;
    [SerializeField] TextMeshPro guiText;
    void Start()
    {
        //目線を常に表示
        PointerUtils.SetGazePointerBehavior(PointerBehavior.AlwaysOn);
    }

    void Update()
    {
        guiText.text = num.ToString();
    }

    public void AddCounter()
    {
        num++;
    }
}

次にUnityエディタでオブジェクトを作っていきます。

Hierarchyで右クリック→UIText - TextMeshProとクリックしていきます。デフォルトだと大きすぎるのでInspectorのScaleを(0.01, 0.01, 0.01)と設定します。

f:id:jbs_tafurukawa:20220415114034p:plain

Hierarchyで右クリック→Create Emptyで空のオブジェクトを作成し、先ほど作成したスクリプトを追加します。
Gui Textには1のテキストをドラッグアンドドロップします。

f:id:jbs_tafurukawa:20220415114054p:plain

最後にボタンを押したときの処理を設定します。最初に追加したPressableButtonHoloLens2_DwellのInspectorからDwellHandlerを開きます。Dwell Completedというイベントに以下のように処理を追加します。
① +ボタンを押して処理を追加
② スクリプトを追加した空のオブジェクトをドラッグアンドドロップ
AddCounterを選択

f:id:jbs_tafurukawa:20220415114109p:plain:w500

これですべての作業は完了です。

デモ動画

以下の動画のように、ボタンに視線を合わせ続けていると(今回は2秒)ボタンを押すことができます。

投稿者プロフィール
古川 貴浩

古川 貴浩

HoloLens 2アプリケーションの開発をしています。

執筆記事一覧