ARあるある言いたい

VR・ARについて書いていきます

ADF(Area Description File)の取得方法

AreaLearningとは

TangoにはArea Learningという機能があり、デバイスを持って周囲を撮影しながらウロウロしていると、デバイスがその場所を覚えてくれます。これはどういうことかというと、現実空間に置いた3Dオブジェクトの場所をセーブ/ロードできる、ということです。 例えばAreaLearningしながらナビゲーション用の3Dオブジェクトとかを配置しておくと、その後はその場所でいつでもナビゲーションを高精度で復元できるようになります。

(まだArea Learningを触ったことのない方は、Tango SDK for Unityに含まれているAreaLearningシーンをビルドして実際に試してみるのが良いでしょう。操作方法についてはここでは割愛します。)

やりたいこと

こうなってくると次はセーブデータを他のユーザーと共有したくなりますよね?Tangoでは、この覚えた場所の情報をADF(Area Description File)と呼んでいます。素直に考えるとADFはArea Learningを行った端末のどこかのディレクトリ以下に置いてあって、それをコピペとかすればいいような気がします。しかしファイルエクスプローラーを使っても公式ドキュメントを探しても、ADFの具体的なファイルパスは見つかりません。

解決方法

どうやらADFは、ファイルパス指定の方法ではアクセスできない形で、同一端末においてアプリケーションの区別なくまとめて保管されているようです。

ではどうやってADFを取得すれば良いのか?SDKで用意されているExportToFile(string filePath)メソッドを使用します。

使い方は以下の通りです。

AreaDescription[] ads = AreaDescription.GetList(); // 端末内の全ADFの情報を配列に呼び出し
AreaDescription m_areaDescription = ads[0]; // 簡単化のため先頭のADFを取得対象にする
m_areaDescription.ExportToFile(Application.persistentDataPath); // 引数は任意のパスを指定可能

これで指定したパスにADFが出力されます。ちなみにADFはバイナリファイルで、Tango端末内でしか扱うことができません。Tango端末でスキャンした部屋とか物体をメッシュにしてobjファイルとかで扱いたい、という場合はTango SDK for Unity内にあるExperimentalMeshBuilderWithColorシーンなどが参考になるかもしれません。

参考 Tango.AreaDescription Class Reference  |  Tango Unity SDK  |  Google Developers