XREAL NRSDK コンテンツを表示した時に位置がズレてハマった話

XREALを使ってコンテンツを目の前に表示したいだけだったのだが、表示される位置が微妙にずれてしまい、原因特定にちょっとだけハマってしまったのでメモ

NRSDKを使って3Dofで動作をさせていたので、カメラの位置を(0,0,0)にして目の前にコンテンツを配置するば、あとはカメラがデバイスの動きによって回転するだけだと思って開発を進めていました。実際起動時にはちゃんと目の前にコンテンツが表示されるので最初は問題を認知していませんでした。

カメラの四方にCubeを配置。アプリ起動時には赤いCubeが真正面に見える

確認を行うフェーズで「なんか微妙に位置がズレてない?」と気が付きます。

中心から下、かつカメラに近い?

内部のパラメータをデバック表示して確認すると、なぜかカメラの位置が変更されていることが分かりました。どうやらNRSDKのPoseTrackerが補正のような処理を掛けている影響で位置が常にアップデートされているようです。設定が3Dofなのでカメラの位置は動いていないと思い込んでいたので、このパラメーターの確認に行き付くまでにすこし時間がかかりました。

Cubeの位置にカメラの位置をデバック表示してみると…

対応方法はいろいろありますが、とりあえず現状の動きは変えずに対応を行いたかったので、子オブジェクトの位置を相殺する親オブジェクト用の処理を作って対応。無理やり感はありますが、問題は解消。

  1. using UnityEngine;
  2. public class Offset : MonoBehaviour
  3. {
  4.     public GameObject nrCameraRig;
  5.     void Update()
  6.     {
  7.         this.transform.localPosition = this.transform.TransformVector(nrCameraRig.transform.localPosition) * -1;
  8.     }
  9. }

上記ブログの内容に少しでも興味がありましたら、お気軽にご連絡ください。

弊社のエンジニアがフレンドリーに対応させていただきます。