かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

HoloLens でオブジェクトのないところの AirTap を検出したい

ものをAirTapしたときの処理は、前の記事でやりました。

blog.okazuki.jp

今度は何もないところをAirTapしたときの処理とか書きたくなりました。 たとえば今うつってる画面の写真とりたいとかって感じに使えるかなと思います。

やり方は簡単でIInputClickHandlerを実装したBehaviorをくっつけたゲームオブジェクトをHoloToolkit.Unity.InputModule.InputManager.Instance.PushFallbackInputHandlerに渡してやればいいみたいです。

なんでGameObject求めるんでしょうね?感覚的にはIInputClickHandlerを受け取るのが自然な気がするけどHoloというかUnityの世界の何かがあるのでしょう。

ということで前回の記事のAirTapBehaviorを以下のようにすればOKです。

using HoloToolkit.Unity.InputModule;
using UnityEngine;

public class AirTapBehavior : MonoBehaviour, IInputClickHandler
{
    private void Start()
    {
        InputManager.Instance.PushFallbackInputHandler(this.gameObject);
    }

    public void OnInputClicked(InputClickedEventData eventData)
    {
        this.gameObject.GetComponent<Renderer>().material.color = Color.red;
    }
}

実行!

こうやって明らかにCubeからカーソルが外れてるであろうところを見た状態にして…

f:id:okazuki:20170816234026p:plain

ぽちっとな

f:id:okazuki:20170816234100p:plain

できた!

多分普通は見えないGameObject作って、そこにBehaviorくっつけてって感じでやる風になりそうな気がするなぁ。