夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

HoloLens 2のアイトラッキングのイベントを使用する EyeTrackingTarget

本日はMRTKの調査枠です。

HoloLens 2ではアイトラッキングによってオブジェクトの操作やイベントの発火が可能です。

今回はEyeTrackingTargetコンポーネントを使用していきます。

〇EyeTrackingTargetコンポーネントとは?

EyeTrackingTargetはMRTKで提供されているアイトラッキングでのイベントを行うコンポーネントで、On LookAt Start()、While Looking At Target()、On Look Away()、On Dwell()のイベントがあり、それぞれのイベントがどのように機能するのかに関しては昨日の記事を参考にしてください。

f:id:Holomoto-Sumire:20200720095802j:plain

redhologerbera.hatenablog.com

 今回は以前作成したスターウォーズのファンアートサンプルのカイバークリスタルを基にEyeTrackingTargetコンポーネントを使用します。

〇イベントの実装

昨日の続きから行います。

カイバークリスタルのオブジェクトにコライダーとEyeTrackingTargetをアタッチしました。

f:id:Holomoto-Sumire:20200720100604j:plain

 これでカイバークリスタルを見た場合イベントを起こせるようになりました。

 次にどのようなイベントを起こすかですが、次のようなスクリプトを用意しカイバークリスタルにアタッチしました。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Crystal : MonoBehaviour
{
    [SerializeField] Animator _targetAnimator;

    public void EyeTrackingStart()
    {
        transform.localScale = new Vector3(25, 25, 25);
        Debug.Log("EyeTtackingStart");
    }

    public void WhileLookingAtTarget()
    {  
        Vector3 _angleVelocity;
        _angleVelocity = new Vector3(1, 1, 1);
       transform.localEulerAngles += _angleVelocity *Time.deltaTime;
        Debug.Log("OWhileLookingAtTarget");
    }

    public void EyeTrackingAway()
    {
        _targetAnimator.SetTrigger("Idle");
        transform.localScale = new Vector3(20, 20, 20);
        Debug.Log("EyeTrackingAway");
    }
    public void OnDwell()
    {
        _targetAnimator.SetTrigger("Force");
        Debug.Log("OnDwell");
    }   
}

スクリプトの簡単な説明

EyeTrackingStart()ではカイバークリスタルのスケールをアップして大きくしています。

 カイバークリスタルはモデリングした時の関係でx,y,zそれぞれ20の大きさを持っているのでわずかに大きくします。

WhileLookingAtTarget()ではカイバークリスタルを回転させます。

OnDwell()ではカイバークリスタルにアタッチしているアニメーションのtriggerを変更しアニメーション遷移を行っています。

 このアニメーションは以前作成したカイバークリスタルの色の変化を行うものを使用しています。

redhologerbera.hatenablog.com

EyeTrackingAway()ではさらにアニメーション遷移を行いdefaultへ戻しています。

 f:id:Holomoto-Sumire:20200721093353j:plainf:id:Holomoto-Sumire:20200721094446j:plain

〇EyeTrackingTargetコンポーネントのイベントの設定

次にEyeTrackingTargetの各イベントにスクリプトの対応する関数をアタッチします。

f:id:Holomoto-Sumire:20200721093353j:plain

OnSelectではクリスタルを見つめながらAirTapを行うことでオブジェクトを消すことができます。

これを実機で動かしたものが次の動画になります。

youtu.be

While Looking At Target()のイベントは視線が当たっている間Updata関数同様毎フレーム行われるので等速回転が行えます。

しかしEyeTrackingは瞬きなどの影響もうけることがあり、長時間オブジェクトを見続けるというコンテンツは避けたほうがよさそうです。