Feel Physics Backyard

HoloLensの出張授業をする会社で、教材を開発しています

HoloLensのMRDesignLabに入っているプレハブ、インターフェースの一覧

f:id:weed_7777:20170726040431j:plain

MRDesignLabに、どんなHoloLensプレハブとインターフェースが入っているのかを確かめました。

プレハブ

InputManager

f:id:weed_7777:20170726042432p:plain

後述するInputManagerインターフェースを使うためのプレハブ

プレハブのサンプル

f:id:weed_7777:20170726054919p:plain

3D Text

f:id:weed_7777:20170726060115p:plain

Button Balloon

f:id:weed_7777:20170726060350p:plain

Button Cheese

f:id:weed_7777:20170726060546p:plain

Button Coffee Cup

f:id:weed_7777:20170726060744p:plain

Button Holographic

f:id:weed_7777:20170726060919p:plain

Button Mesh Bucky

f:id:weed_7777:20170726061105p:plain

Button Mesh Icosa

f:id:weed_7777:20170726061605p:plain

Button Mesh Primitive

f:id:weed_7777:20170726061958p:plain

Button Push

f:id:weed_7777:20170726062138p:plain

Button Traditional

f:id:weed_7777:20170726062314p:plain

Custom Loading

f:id:weed_7777:20170726062507p:plain

Tool Bar

f:id:weed_7777:20170726062652p:plain

詳細

MRDesignLabのプレファブについては@takabrz さんの以下の記事が詳しいです:

qiita.com

インターフェース

IDoubleTappedインターフェース

ダブルタップしたら発火

public class hoge : MonoBehaviour,IDoubleTapped {I

    public void OnDoubleTapped(InteractionManager.InteractionEventArgs eventArgs)
    {
        throw new NotImplementedException();
    }
}

IHoldインターフェース

ホールドしたら発火

public class hoge : MonoBehaviour, IHold
{
    public void OnHoldCanceled(InteractionManager.InteractionEventArgs eventArgs)
    {
        throw new NotImplementedException();
    }

    public void OnHoldCompleted(InteractionManager.InteractionEventArgs eventArgs)
    {
        throw new NotImplementedException();
    }

    public void OnHoldStarted(InteractionManager.InteractionEventArgs eventArgs)
    {
        throw new NotImplementedException();
    }
}

ITappedインターフェース

タップしたら発火

public class hoge : MonoBehaviour, ITapped
{
    public void OnTapped(InteractionManager.InteractionEventArgs eventArgs)
    {
        throw new NotImplementedException();
    }
}

ITargetingInputSourceインターフェース

移動回転可能なオブジェクトに付ける?

public class hoge : MonoBehaviour, ITargetingInputSource
{
    public event Action<InputSourceBase, bool> OnSelectChanged;
    public event Action<InputSourceBase, bool> OnMenuChanged;

    public Vector3 GetTargetOrigin()
    {
        throw new NotImplementedException();
    }

    public Quaternion GetTargetRotation()
    {
        throw new NotImplementedException();
    }

    public bool IsMenuPressed()
    {
        throw new NotImplementedException();
    }

    public bool IsReady()
    {
        throw new NotImplementedException();
    }

    public bool IsSelectPressed()
    {
        throw new NotImplementedException();
    }

    public bool IsTargetingActive()
    {
        throw new NotImplementedException();
    }

    public void OnActivate(bool activated)
    {
        throw new NotImplementedException();
    }

    public bool ShouldActivate()
    {
        throw new NotImplementedException();
    }
}

InputManagerインターフェース

プレハブからInputManagerをヒエラルキービューにドラッグ&ドロップします。

f:id:weed_7777:20170726042432p:plain

IInputClickHandlerインターフェース

ボタンを押したときに発火?

using HoloToolkit.Unity.InputModule;

public class hoge2 : MonoBehaviour, IInputClickHandler {
    public void OnInputClicked(InputClickedEventData eventData)
    {
        throw new NotImplementedException();
    }
}

IInputHandlerインターフェース

エアタップの指の上下?

using HoloToolkit.Unity.InputModule;

public class hoge2 : MonoBehaviour, IInputHandler
{
    public void OnInputDown(InputEventData eventData)
    {
        throw new NotImplementedException();
    }

    public void OnInputUp(InputEventData eventData)
    {
        throw new NotImplementedException();
    }
}

IInputSourceインターフェース

ボタン?

using HoloToolkit.Unity.InputModule;

public class hoge2 : MonoBehaviour, IInputSource
{
    public SupportedInputInfo GetSupportedInputInfo(uint sourceId)
    {
        throw new NotImplementedException();
    }

    public bool SupportsInputInfo(uint sourceId, SupportedInputInfo inputInfo)
    {
        throw new NotImplementedException();
    }

    public bool TryGetOrientation(uint sourceId, out Quaternion orientation)
    {
        throw new NotImplementedException();
    }

    public bool TryGetPosition(uint sourceId, out Vector3 position)
    {
        throw new NotImplementedException();
    }
}

InteractionManagerを継承すると使えるもの

下記のようにすれば使えます:

using HUX.Interaction;
using HUX.Receivers;

IDoubleTappedインターフェース

ダブルタップでイベントを起こす?

using HUX.Interaction;
using HUX.Receivers;

public class test : InteractionManager, IDoubleTapped {
    void IDoubleTapped.OnDoubleTapped(InteractionEventArgs eventArgs)
    {
        throw new NotImplementedException();
    }
}

IHold

イベント引数をとる???

using HUX.Interaction;
using HUX.Receivers;

public class test : InteractionManager, IHold
{
    void IHold.OnHoldCanceled(InteractionEventArgs eventArgs)
    {
        throw new NotImplementedException();
    }

    void IHold.OnHoldCompleted(InteractionEventArgs eventArgs)
    {
        throw new NotImplementedException();
    }

    void IHold.OnHoldStarted(InteractionEventArgs eventArgs)
    {
        throw new NotImplementedException();
    }
}

IManipulateインターフェース

イベント引き数をとることができる???

using HUX.Interaction;
using HUX.Receivers;

public class test : InteractionManager, IManipulate
{
    void IManipulate.OnManipulationCanceled(InteractionEventArgs eventArgs)
    {
        throw new NotImplementedException();
    }

    void IManipulate.OnManipulationCompleted(InteractionEventArgs eventArgs)
    {
        throw new NotImplementedException();
    }

    void IManipulate.OnManipulationStarted(InteractionEventArgs eventArgs)
    {
        throw new NotImplementedException();
    }

    void IManipulate.OnManipulationUpdated(InteractionEventArgs eventArgs)
    {
        throw new NotImplementedException();
    }
}

INavigateインターフェース

???

using HUX.Interaction;
using HUX.Receivers;

public class test : InteractionManager, INavigate
{
    void INavigate.OnNavigationCanceled(InteractionEventArgs eventArgs)
    {
        throw new NotImplementedException();
    }

    void INavigate.OnNavigationCompleted(InteractionEventArgs eventArgs)
    {
        throw new NotImplementedException();
    }

    void INavigate.OnNavigationStarted(InteractionEventArgs eventArgs)
    {
        throw new NotImplementedException();
    }

    void INavigate.OnNavigationUpdated(InteractionEventArgs eventArgs)
    {
        throw new NotImplementedException();
    }
}

ITappedインターフェース

イベント引数を受け取れるタップ?

using HUX.Interaction;
using HUX.Receivers;

public class test : InteractionManager, ITapped
{
    void ITapped.OnTapped(InteractionEventArgs eventArgs)
    {
        throw new NotImplementedException();
    }
}

ITargetingInputSourceインターフェース

???

using HUX.Interaction;
using HUX.Receivers;

public class test : InteractionManager, ITargetingInputSource
{
    public event Action<InputSourceBase, bool> OnSelectChanged;
    public event Action<InputSourceBase, bool> OnMenuChanged;

    public Vector3 GetTargetOrigin()
    {
        throw new NotImplementedException();
    }

    public Quaternion GetTargetRotation()
    {
        throw new NotImplementedException();
    }

    public bool IsMenuPressed()
    {
        throw new NotImplementedException();
    }

    public bool IsReady()
    {
        throw new NotImplementedException();
    }

    public bool IsSelectPressed()
    {
        throw new NotImplementedException();
    }

    public bool IsTargetingActive()
    {
        throw new NotImplementedException();
    }

    public void OnActivate(bool activated)
    {
        throw new NotImplementedException();
    }

    public bool ShouldActivate()
    {
        throw new NotImplementedException();
    }
}

InteractionManagerクラスはMonoBehaviourクラスでもいける。違いはよくわからない。

MRDesignLabHoloToolkitからかなり変わっているので、早めに対応した方がいいかもしれませんね。