かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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くっつけてって感じでやる風になりそうな気がするなぁ。