はつねの日記

Kinect, Windows 10 UWP, Windows Azure, IoT, 電子工作

HoloLensのWorld-LockとBody-Lock

20170809_175529_HoloLens

World-Lock

HoloLensでMixed Realityアプリを作成するために、Unityでオブジェクトを配置するとWorld-Lockといって周りの空間にオブジェクトが配置されます。

そのため、ほかのところを向いてオブジェクトの方を向くと、きちんとオブジェクトはさっきの場所に居続けます。

また、周りの空間に対して配置されているので、シースルーで見える風景とCGのオブジェクトがずれることがなく、そのため3D酔いのようなことが起こりません。

ここまでであれば、すごく性能の良いARっぽい感じですが、HoloLensがMixed Realityと呼ばれるのは、現実世界のモノの向こう側にCGのオブジェクトを配置すれば、きちんと見切れてくれる、つまり、現実のモノでCGの一部や全部が隠れてしまうという効果が実現できるからです。

このように現実世界にモノを固定することをWorld-LockとHoloLensの世界では呼んでいます。

Body-Lock

一方、HoloLensのスタートメニューのように視点をかえるとそこに追いかけてくるようなものはBody-Lockと呼びます。Body-Lockでオブジェクトを配置することはあまりないかもしれませんが、例えば、動作状態やメッセージを常に視野の端にいれておきたいようなときがあると思います。

このようなオブジェクトの動きを実現するには、HoloToolkit-Unityにあるtagalongを使います。

Body-Lockの指定の仕方

Unityを立ち上げてHoloToolkit-Unityを設定するなど準備が整ったら、Unity標準の3DオブジェクトであるCubeとHoloToolkit-UnityのUITextプレハブを配置します。

UITextプレハブのInspectorで[Add Component]ボタンをおして、「Billboard (Script)」と「Tagalong (Script)」を追加します。

Billboard

Billboardはオブジェクトの表示面が常に視野を追従するようにするスクリプトです。UITextプレハブは配置直後はテキストが正面を向くようになっているので、Billboardを追加して[Pivot Axis]プロパティに「Free」を指定することで常にテキストが正面を向いてくれて読みやすい状態をキープできます。

Tagalong

Tagalongはオブジェクトが視界から外れたら視界の中に動かすためのスクリプトです。追加直後のプロパティ値から次のように値を指定します。このあたりは好みに応じて値を変更してみてください。

プロパティ 設定値
Tagalong Distance 1
Minimum Horizontal Overlap 1
Minimum Vertical Overlap 1
Minimum Tagalong Distance 0.5

このように設定すると次のサンプル動画のような動きになります。

デバッグ時の数値を確認するような場合にも使えると思います。