MRが楽しい

MRやVRについて学習したことを書き残す

公式チュートリアル「HOLOGRAMS 211 1章」を試してみる

本日から新しいチュートリアルお試し枠です。
HOLOGRAMS 211を実施します。内容としてはHOLOGRAMS 210の続きの形となります。
いつも通り、以下ブログの記事を参考に実施します。
azure-recipe.kc-cloud.jp

参考記事にある通りにチュートリアルを実施します。
アプリをビルドすると、HOLOGRAMS 210同様に、宇宙飛行士が現れます。

ここで宇宙飛行士の胸元にある青丸のカーソルに注目してください。
f:id:bluebirdofoz:20170627015835j:plain
指を正面前に持ってくると……。(宇宙飛行士と重なって手が見えにくいですが)
f:id:bluebirdofoz:20170627015846j:plain
青丸のカーソルが指マークに変わりました。手の認識が視覚的に分かるようになります。

因みに握りこぶしを正面に持ってきた場合は、青丸のカーソルのままであり、認識していないことが分かります。
f:id:bluebirdofoz:20170627015909j:plain
hololensを使ったことがない人にhololensを貸すと、この人差し指を認識させるという事前動作が分かりづらいのか。
タップ操作が上手く行えないという人をよく見ます。
このカーソルを使うと、タップ準備ができているかどうかが、見た目で分かるため、hololens初心者のためのUIとして使えそうです。


今回の新しい技術はこの、指の認識処理ですね。コードを確認してみます。
・HandsManager.cs

    void Awake()
    {
        EnableAudioHapticFeedback();

        InteractionManager.SourceDetected += InteractionManager_SourceDetected;
        InteractionManager.SourceLost += InteractionManager_SourceLost;
    }
(略)
    private void InteractionManager_SourceDetected(InteractionSourceState hand)
    {
        HandDetected = true;
    }

    private void InteractionManager_SourceLost(InteractionSourceState hand)
    {
        HandDetected = false;
    }

・CursorFeedback.cs

    private void UpdateHandDetectedState()
    {
        if (handDetectedGameObject == null || CursorManager.Instance == null)
        {
        return;
        }

        handDetectedGameObject.SetActive(HandsManager.Instance.HandDetected);
    }

重要なのは以下のイベント登録です。
・InteractionManager.SourceDetected += InteractionManager_SourceDetected;
・InteractionManager.SourceLost += InteractionManager_SourceLost;

InteractionManagerクラスはUnityEngine.VR.WSA.Inputパッケージのクラスです。
これが指の検出とロストをイベントとしてキャッチしてくれるようです。