MRDesignLab_Unityのダイアログサンプルにあるように、ユーザ動作へ追随するオブジェクトについて調べてみました。
サンプルを実行しダイアログを表示させると、SimpleDialogShell(Clone)というオブジェクトが生成されます。
このオブジェクトのコンポーネントにあるSolverというもので制御しています。
SolverについてはMRDesignLabs/HUX/Prefabs/Spatial/Solvers配下に3つのプレハブがあるので、それぞれの動作を確認してみました。
Unityのシーンをゼロベースで構築しているのでそちらの参考としてもどうぞ。
BodyLockSolver
BodyLockSolverはユーザに対して固定されたオフセットの位置に表示されます。動画では(0, 0, 3)の位置に設定したので、ユーザが移動するとその位置を原点として(0, 0, 3)の位置に表示されます。頭の回転には追随しないので反対側を向いたりすると見えなくなります。
RadialViewSolver
RadialViewSolverはダイアログで利用されているものと同じ動作をするものです。常にユーザに表示させたいものについてはこのSolverを利用することになると思います。
TagAlongSolver
TagAlongSolverについては最初よくわからなかったのですが、(スクリプトは読まず。。)観察してみるとユーザの動作に合わせて動くが最終的には最初表示された場所に徐々に戻っていくという動作をしているようでした。
なお、MRDesignLabs_Unity_LunarModuleの起動直後の画面にもユーザ動作に追随するロゴ画像が表示されますがこちらはSolverではなくFitboxというプレハブが使われています。
Fitboxは動作としてはRadialViewSolverに近いですが、実装はHoloToolKitのUtilities配下のInterpolatorスクリプトを利用して制御しています。
Fitboxはタップすると消える(Fitbox自体をDestroyする)ようになっているので、LunarModuleで使われているようにアプリの起動時ロゴの表示などに利用するのがよさそうです。