Open14

HoloLab.Immersalを試してみる

イワケンイワケン

Packages\manifest.jsonの "dependencies".に追加

{
  "dependencies": {
    "jp.co.hololab.immersal": "https://github.com/HoloLabInc/HoloLab.Immersal.git?path=Assets/HoloLab.Immersal",
...
}
イワケンイワケン
  • Packages/HoloLab Immersal Module/Settings/LocalizationSettingsをAssets以下にコピー
  • ImmersalのDeveloper PortalからtokenとMapIdを入力

イワケンイワケン

MapOrigin以下に置いてビルド→成功
しかしHoloLensかぶって該当箇所を見ても、位置合わせされず

梅太郎梅太郎

MyRoomはImmersalで撮ったものからもってきましたか?また、形式はなんでしょうか?

イワケンイワケン

うまくいかなかったので、まっさらなプロジェクトをゼロから作ってチャレンジ

イワケンイワケン

MRTK2.7.2をimport
XRPipelineSettingはLegacyXR選択
そのままチェックしてApply
TMP Import
Add to Scene and Configure

イワケンイワケン

Capabilitiesを設定
・WebCam
・Microphone
・Location
・InternetClient
・InternetClientServer
・SpatioalPerception
・GazeInput

にチェック入れたら成功しました。

イワケンイワケン
  • MapIDと一致したときのみ反映する実装
  • LocalizeしたときにVisibleをenabledする実装

など実装

MyMapLocalizer .cs
  public class MyMapLocalizer : MonoBehaviour
    {
        [SerializeField]
        private ImmersalLocalization immersalLocalization = null;

        [SerializeField] int MapId;

        private void Awake()
        {
            immersalLocalization.OnLocalized += ImmersalLocalization_OnLocalized;
            SetVisibleEnabled(false);
        }

        private void ImmersalLocalization_OnLocalized(ImmersalLocalization.LocalizeInfo info)
        {
            if (info.MapId == MapId)
            {
                SetVisibleEnabled(true);
                var mapOriginPose = info.Pose.Inverse().GetTransformedBy(info.CameraPose);

                transform.position = mapOriginPose.position;
                transform.rotation = mapOriginPose.rotation;
            }
        }

        void SetVisibleEnabled(bool enabled)
        {
            foreach (var rd in GetComponentsInChildren<Renderer>())
            {
                rd.enabled = enabled;
            }

        }
    }