前回の続きです
・GazeGestureManager.cs
AirTapを検知して、その先にオブジェクトがあったらメッセージを送る、という内容です。
using UnityEngine; using UnityEngine.VR.WSA.Input; public class GazeGestureManager : MonoBehaviour { public static GazeGestureManager Instance { get; private set; } // Represents the hologram that is currently being gazed at. public GameObject FocusedObject { get; private set; } GestureRecognizer recognizer; // Use this for initialization void Awake() { Instance = this; // Set up a GestureRecognizer to detect Select gestures. recognizer = new GestureRecognizer(); recognizer.TappedEvent += (source, tapCount, ray) => { // Send an OnSelect message to the focused object and its ancestors. if (FocusedObject != null) { FocusedObject.SendMessageUpwards("OnSelect"); } }; recognizer.StartCapturingGestures(); } // Update is called once per frame void Update() { // Figure out which hologram is focused this frame. GameObject oldFocusObject = FocusedObject; // Do a raycast into the world based on the user's // head position and orientation. var headPosition = Camera.main.transform.position; var gazeDirection = Camera.main.transform.forward; RaycastHit hitInfo; if (Physics.Raycast(headPosition, gazeDirection, out hitInfo)) { // If the raycast hit a hologram, use that as the focused object. FocusedObject = hitInfo.collider.gameObject; } else { // If the raycast did not hit a hologram, clear the focused object. FocusedObject = null; } // If the focused object changed this frame, // start detecting fresh gestures again. if (FocusedObject != oldFocusObject) { recognizer.CancelGestures(); recognizer.StartCapturingGestures(); } } }
まずAwakeで、GestureRecognizerをインスタンス化しています。GestureRecognizerは、Unityが持っているAPIで、デバイスによって認識できるジェスチャーが異なります。(スマホならスワイプなど)
HoloLensの場合、Tapに加えてManipulationやNavigationのジェスチャーを認識することができます。
もっと単純に、対象となったオブジェクトを直接消すとか、Ridgidbodyをくっつけて落とすとか、そういうやり方も可能ですね(ドラッグして動かす、というのも応用範囲が広そうですね)
そしてUpdate()では、視線の先にオブジェクトが存在するかを確認しています。これは前回のカーソルの時とほぼおなじ仕組みです。ちょっと違うのは、対象が変わった場合はGestureの認識をリセットしている、という部分です。
・SphereCommands.cs
こちらは呼び出される側のOnSelect()メソッドを持っています。Rigidbodyがなければくっつける、という内容です。
このように、HoloLensに依存する部分はGestureの種類くらいなので、もっとUnityそのものの勉強をしないとですね・・