本日はMRTKの調査枠です。
HoloLens 2ではアイトラッキングによってオブジェクトの操作やイベントの発火が可能です。
今回はEyeTrackingTargetコンポーネントを使用していきます。
〇EyeTrackingTargetコンポーネントとは?
EyeTrackingTargetはMRTKで提供されているアイトラッキングでのイベントを行うコンポーネントで、On LookAt Start()、While Looking At Target()、On Look Away()、On Dwell()のイベントがあり、それぞれのイベントがどのように機能するのかに関しては昨日の記事を参考にしてください。

今回は以前作成したスターウォーズのファンアートサンプルのカイバークリスタルを基にEyeTrackingTargetコンポーネントを使用します。
〇イベントの実装
昨日の続きから行います。
カイバークリスタルのオブジェクトにコライダーとEyeTrackingTargetをアタッチしました。

これでカイバークリスタルを見た場合イベントを起こせるようになりました。
次にどのようなイベントを起こすかですが、次のようなスクリプトを用意しカイバークリスタルにアタッチしました。
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を変更しアニメーション遷移を行っています。
このアニメーションは以前作成したカイバークリスタルの色の変化を行うものを使用しています。
EyeTrackingAway()ではさらにアニメーション遷移を行いdefaultへ戻しています。


〇EyeTrackingTargetコンポーネントのイベントの設定
次にEyeTrackingTargetの各イベントにスクリプトの対応する関数をアタッチします。

OnSelectではクリスタルを見つめながらAirTapを行うことでオブジェクトを消すことができます。
これを実機で動かしたものが次の動画になります。
While Looking At Target()のイベントは視線が当たっている間Updata関数同様毎フレーム行われるので等速回転が行えます。
しかしEyeTrackingは瞬きなどの影響もうけることがあり、長時間オブジェクトを見続けるというコンテンツは避けたほうがよさそうです。