夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

HoloLens 2でTapToPlaceを使用する

本日はMRTKの機能の調査枠です。

HoloLensの開発ツールであるMixedRealityToolkit(MRTK)では開発に役立つ様々なツールを提供しています。

今回はその中の一つであるTapToPlaeを試してみようと思います。

〇TapTo Placeとは?

TapToPlaceはMixedRealityToolkit v2の前形もしくは(MixedReality version1)に当たる[HoloToolkit]時代から提供されていた機能です。

MRTK v2では最初のリリースでは提供されていなかったもののバージョンアップにより再導入されました。

[TapToPlace]コンポーネントをアタッチし、イベントが発火するようにしたオブジェクトにCursorを当て、AirTapを行うことでオブジェクトがユーザーの頭に沿って移動するようになります。

再度AirTapを行うことでオブジェクトの位置が固定されます。

移動系のコンポーネントはMRTKで他にも提供されており、代表的なものとして[ObjectManipulator]コンポーネントがあります。

[ObjectManipulator]コンポーネントではHandRayによって、もしくは[NearInteractionGrabbable]コンポーネントと組み合わせ現実の動作に近い形でオブジェクトを移動させることができます。

[TapToPlace]は[ObjectManipulator]コンポーネントと比べて非現実的な移動を提供します。(リアルな現象ではないUI)

 このコンポーネントを使用することで例えば遠距離にあるオブジェクトを移動させる際や、オブジェクト数が多い場合に非常に有効な移動手段となります。

また、[TapToPlace]コンポーネントの移動先はSpatialMesh上を対象としているため床にきれいに配置したい場合にも有効なコンポーネントです。

〇実装

MRTKを導入したシーンから進めます。

①Cubeを配置します。 今回はこのCubeを動かします。

f:id:Holomoto-Sumire:20201213204021j:plain

②Cubeに[Add component]から[Tap To Place]コンポーネントを追加します。

f:id:Holomoto-Sumire:20201213204901j:plain

③シーンを実行します。

CubeをAirTapすることでCubeがカメラに追従するようになります。

f:id:Holomoto-Sumire:20201213205918g:plain

再度AirTapを行うことでCubeの移動が止まります。

f:id:Holomoto-Sumire:20201213210210g:plain

以上が基本的な[TapToPlace]コンポーネントの使い方になります。

オブジェクトにHandRayを合わせてAitTapを行うことで扱うことができるので、ユーザーから離れた位置にあるオブジェクトの移動に向いています。

またHandTrakicngが使用できないHoloLens 1stではHoloLens 2より移動の手段として有用です。

〇プロパティ

ここからは[TapToPlace]コンポーネントのプロパティを見ていきます。

・Auto start

f:id:Holomoto-Sumire:20201213210637j:plain

有効にするとAirTapしなくても最初にTapToPlaceの移動が発動します。

・Default Placement Distance

f:id:Holomoto-Sumire:20201213211115j:plain

この値は移動時に追従するカメラとオブジェクトの距離を指定します。

メートル単位です。

・Max Raycast Distance

f:id:Holomoto-Sumire:20201213211001j:plain

この値は配置選択時のHandRayの最大距離を指定できます。

大きければ大きいほど遠くのオブジェクトを移動できます。

・Keep Orientation vertical

f:id:Holomoto-Sumire:20201213211329j:plain

この設定が有効の場合移動時に水平方向(x軸)回転がかからず平行移動することができます。

・On Placing Started()

f:id:Holomoto-Sumire:20201213211525j:plain

移動のためにAirTapを行った際に発動するイベントです。

・On Placing Stoped()

f:id:Holomoto-Sumire:20201213211544j:plain

移動を終えるためにAirTapを行った際に発動するイベントです。