MRTKで視線認識(アイトラッキング)を使用したいが実装方法が分からない方が対象になっています。
使用方法を理解するために、VRMモデルを配置し、視線認識(アイトラッキング)をトリガーとして使い、モデルを動作させる流れを実装します。
実装環境
Unityバージョン 2019.4.17f1
MRTK2.5
MRTK2.5の環境が整っていなければ、こちらの記事を参考にインポートしてみてください。
準備するもの
1.VRMモデル
・VRMモデルの作成
こちらはVroidStudioで簡単に作成することが出来ます。
サンプルモデルから好きなモデルを選択→撮影・エクスポート(上段タブ)→エクスポート(左ペイン)
設定は適当で構いません。
・UniVRMをインポート
こちらはUnityでVRMモデルを出力させるために必須であるため、インポートする必要があります。
2.アニメーション
VRMモデルに対して、アニメーションを付与するために、既存のアニメーションを持ってきます。今回付与するアニメーションは「しゃがむ」です。
Standard Assets (for Unity 2018.4)をAsset Storeからインポートします。
インポート後...
・ThirdPersonAnimatorController.controller と下図のファイルが必要なので、他のファイルは削除します。
実装
まず初めに、公式リファレンスを参考に視線認識の設定をします。
VRMモデルをインポートしたら、VRMモデルにAnimatorをAdd Conponentします。
AnimatorのcontrollerはThirdPersonAnimatorController.controllerを選択します。
Rigidbody、Capsule ColliderもAdd Conponentして、下図のように設定します。
VrmAnimationという名前でスクリプトを作成します。このスクリプトはAnimatorで設定されている「しゃがむ」動作に対してTrueかFalseを渡してAnimatorをコントロールする役割を持っています。
今回のメインは視線認識がであるため、説明は割愛させていただきます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(Rigidbody))]
[RequireComponent(typeof(CapsuleCollider))]
[RequireComponent(typeof(Animator))]
public class VrmAnimation : MonoBehaviour
{
Rigidbody m_Rigidbody;
Animator m_Animator;
CapsuleCollider m_Capsule;
bool m_Crouching;
// Start is called before the first frame update
void Start()
{
m_Animator = GetComponent<Animator>();
m_Rigidbody = GetComponent<Rigidbody>();
m_Capsule = GetComponent<CapsuleCollider>();
m_Rigidbody.constraints = RigidbodyConstraints.FreezeRotationX | RigidbodyConstraints.FreezeRotationY | RigidbodyConstraints.FreezeRotationZ;
m_Crouching = false;
Invoke("SetCrouch", 3.5f);
}
// Update is called once per frame
public void SetRun()
{
m_Animator.SetFloat("Forward",0.1f, 0.1f, Time.deltaTime);
m_Animator.SetFloat("Turn", 0.1f, 0.1f, Time.deltaTime);
}
public void SetCrouch()
{
if (!m_Crouching)
{
m_Crouching = true;
m_Animator.SetBool("Crouch", m_Crouching);
}
else
{
m_Crouching = false;
m_Animator.SetBool("Crouch", m_Crouching);
}
}
}
MRTKで用意されているEyeTrackingTargetをAdd Conponentします。
EyeTrackingTargetのOn Look At Startで下図のような設定を行います。今回はOnLookAtStartのみを使用していて、先ほどのスクリプト(VrmAnimation)で作成したメソッドが呼び出されるよう設定します。
EyeTrackingTargetの機能の説明として、
OnLookAtStart:ユーザーがターゲットを見始めたときにトリガーされます。
OnLookAway:ユーザーがターゲットから目をそらしているときにトリガーされます。
OnDwell:ターゲットが指定された、事前定義された期間(dwellTimeInSec)にわたって調べられたときにトリガーされます。
OnSelected:見たターゲットが選択されると、イベントがトリガーされます。
OnTapDown:RaiseEventManually_TapDownが呼び出されると、イベントがトリガーされます。
OnTapUp:RaiseEventManually_TapUpが呼び出されると、イベントがトリガーされます。
検証
Hololensにデプロイします。
視線を合わせる前が左の画像の状態、視線を合わせた後が右の画像の状態になっていれば成功です。