MRDesignLabに、どんなHoloLensプレハブとインターフェースが入っているのかを確かめました。
プレハブ
InputManager
後述するInputManagerインターフェースを使うためのプレハブ
プレハブのサンプル
3D Text
Button Balloon
Button Cheese
Button Coffee Cup
Button Holographic
Button Mesh Bucky
Button Mesh Icosa
Button Mesh Primitive
Button Push
Button Traditional
Custom Loading
Tool Bar
詳細
MRDesignLabのプレファブについては@takabrz さんの以下の記事が詳しいです:
インターフェース
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をヒエラルキービューにドラッグ&ドロップします。
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クラスでもいける。違いはよくわからない。
MRDesignLabはHoloToolkitからかなり変わっているので、早めに対応した方がいいかもしれませんね。