1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【HoloLens2】ハンドトラッキングでの操作を有効にしつつ,ポインターは常にアイトラッキングで動かす方法【Unity】

Last updated at Posted at 2023-09-13

Unity2019.4.22f1,LegacyXR,MRTK v2.5.1です(多分それ以降のバージョンのMRTKでも同じです).

HoloLens2はアイトラッキング(視線トラッキング)ができますが,視線で動かすポインタはあくまでハンドトラッキングでの入力補助目的(例:ボタンに視線でポインタを合わせた状態で「ボタンを押してください」と話すことでボタンを押せるようにするなど)という思想で作られているらしいです.そのため,通常はアイトラッキングを有効にしていても,カメラから手が検出された場合,ハンドレイでのポインター操作に自動的に切り替わってしまい,ハンドトラッキングそのものを無効化するか,ハンドレイを無効化しておかなければアイトラッキングによるポインタの操作は無効になってしまいます.また,これは要検証ですが,おそらくアイトラッキングを常に許可するという処理を明示的に記述しておかないと,MRC(HoloLens2の画面録画機能)で録画を行うときポインターが消えてしまいます.

そのため,ハンドトラッキングで手の動きを取得しつつ,視線入力でのみ常にポインターを動かすためには,以下のようなスクリプトを作成する必要があります.

PointerController.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Microsoft.MixedReality.Toolkit.Input;

public class PointerController : MonoBehaviour
{
    void Start()
    {
        // すべてのハンドレイをオフにする(ハンドレイの先にポインターがあり,これを記述することでハンドによるポインター操作が無効になる)
        PointerUtils.SetHandRayPointerBehavior(PointerBehavior.AlwaysOff);
        // 視線ポインターを常にオン(明示的に書いておかないとほかのポインター操作やカメラに上書きされる)
        PointerUtils.SetGazePointerBehavior(PointerBehavior.AlwaysOn);
    }
}

これを空のGameObjectなどに貼り付けてシーンに置けばOKです.録画中にも無事ポインターは生存していました.


【参考記事】
↓ MRTK2.6より前の公式ドキュメント.2023年9月13日現在,すでに日本語対応は終了してしまったようです
Eyes + hand interaction How to support look + hand motions (eye gaze & hand gestures)
Controllers, pointers, and focus

↓ MRTK2.6以降の新しい公式ドキュメント.このあたりの内容はMRTKが更新されても変わってなさそうなので英語が読めない方はこちらを読むと良いかもしれません.
目と手 ルック アンド ハンド モーションをサポートする方法 (目の視線入力と&手のジェスチャ)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?