本日は MRTK の技術調査枠です。
MRTKを用いてフォーカスイベントを設定する方法をまとめます。
プロジェクトとシーンの準備
以下の記事を元にHoloLens(WindowsMR)プロジェクトを作成します。
bluebirdofoz.hatenablog.com
2019/1/27現在、MRTK 2017 の最新バージョンは 2017.4.3.0 です。
フォーカスイベント
フォーカスイベントはユーザが特定のオブジェクトにカーソルを合わせた事を検出するイベントです。
HoloLens では視点がカーソルになるので、特定のオブジェクトを注視したことを検出できます。
MRTK の基本設定を行っていれば IFocusable インタフェースの以下の関数を利用してイベントを取得できます。
・IFocusable.cs
using UnityEngine.EventSystems; namespace HoloToolkit.Unity.InputModule { /// <summary> /// Interface to implement to react to focus enter/exit. /// </summary> public interface IFocusable : IEventSystemHandler { void OnFocusEnter(); // フォーカス開始時イベント void OnFocusExit(); // フォーカス終了時イベント } }
実際にスクリプトを作成してみます。
フォーカス時にオブジェクトサイズが大きくなるスクリプトを作成しました。
・FocusEvent.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; // IFocusable を利用するため InputModule を追加 using HoloToolkit.Unity.InputModule; public class FocusEvent : MonoBehaviour, IFocusable // IFocusable インタフェースを継承 { private Vector3 DefaultScale = new Vector3(); /// <summary> /// 起動時処理 /// </summary> void Start() { // 初期サイズを保存 DefaultScale = new Vector3( transform.localScale.x, transform.localScale.y, transform.localScale.z); } /// <summary> /// フォーカス開始時イベント /// </summary> public void OnFocusEnter() { // フォーカス時、2倍の大きさに変更 transform.localScale = DefaultScale * 2.0f; } /// <summary> /// フォーカス終了時イベント /// </summary> public void OnFocusExit() { // フォーカスが外れると、元の大きさに戻る transform.localScale = DefaultScale; } }
作成したスクリプトを Sphere オブジェクトにアタッチします。
[再生]ボタンを押してシーンを開始します。
視点を Sphere に合わせたときのみ、オブジェクトが大きくなります。