Hiromuブログ

最近はこちら(https://zenn.dev/hiromu)が本体

ユーザ動作へ追随するオブジェクト

MRDesignLab_Unityのダイアログサンプルにあるように、ユーザ動作へ追随するオブジェクトについて調べてみました。

dialog_move


サンプルを実行しダイアログを表示させると、SimpleDialogShell(Clone)というオブジェクトが生成されます。

このオブジェクトのコンポーネントにあるSolverというもので制御しています。

unity_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というプレハブが使われています。

lunar_module

Fitboxは動作としてはRadialViewSolverに近いですが、実装はHoloToolKitのUtilities配下のInterpolatorスクリプトを利用して制御しています。

Fitboxはタップすると消える(Fitbox自体をDestroyする)ようになっているので、LunarModuleで使われているようにアプリの起動時ロゴの表示などに利用するのがよさそうです。