MRTKでフォーカスした,音声認識した,そういった時に起こすアクションを実装するやり方は2つあります。 1つはInterfaceを実装する,もう1つはMRTKで用意されているHandlerをアタッチするのどちらかです。
1つ目のやり方であるインターフェースを実装するというのは,これまでのHTKと同じです。
IMixedRealityPointerHandler は,従来でいうIClickedHandlerみたいなものです。InputSystemが,入力があったときにExecuteEvents.Executeを通して,Interfaceを実装したオブジェクトに対してイベントを発火します。
public class NewBehaviourScript : MonoBehaviour, IMixedRealityPointerHandler { public void OnPointerClicked(MixedRealityPointerEventData eventData) { throw new System.NotImplementedException(); } public void OnPointerDown(MixedRealityPointerEventData eventData) { throw new System.NotImplementedException(); } public void OnPointerDragged(MixedRealityPointerEventData eventData) { throw new System.NotImplementedException(); } public void OnPointerUp(MixedRealityPointerEventData eventData) { throw new System.NotImplementedException(); } }
柔軟な実装が,開発者側に委ねられているものの,例えば簡単な実装,クリック中は色が変わるといったものに対してまで全てスクリプトを用意してやる必要があります。
2つ目のやり方は,用意されているHandlerを使うことです。
'Assets/MixedRealityToolkit.SDK.Features.Handlers' には,あらかじめInterfaceを実装し,受け取ったイベントをUnityEventとしてInspectorから操作できるクラスが用意されています。これによりuGUIライクに入力イベントを扱うことができます。
InputActionHandler の例。入力の開始と終わりに対して,Eventを受け取れるようになっている。
先の例でいえば,UnityEventからターゲットを指定して,マテリアルを差し替えるなど,ノンプログラミングでできることが利点です。
InputActionHandlerのようにプリミティブなものもあれば,ManipulationHandlerのような応用ものもあります。
主なHandlerを紹介します。
- Dictation Handler: 文字起こしの開始や終了,その結果を受け取ることができます。
- Eye Tracking Target: 視線が合った時や離れた時のイベントを受け取ることできます。
- Input Action Handler: 入力の開始と終了を受け取ることができます。
- Manipulation Handler: オブジェクトをジェスチャーで移動したときのイベントを受け取ることができるだけでなく,オブジェクトを操作できるようになります。
- Pointer Click Handler: ポインタでクリックしたときのイベントを受け取ることができます。
- Speech Input Handler: 音声コマンドの認識結果を受け取ることができます。
- Touch Handler: 手で触ったりしたときのイベントを受け取ることができます。
v2 になり,ノンプログラマーの人やデザイナーとも協調しやすくなってるなーと思いました。
とりあえずInteractable、みたいに考えてたけど、フィードバックまで必要ない時にはInputActionHandlerのアタッチでよかったのね。
— とりカシュ (@torikasyu) August 28, 2019