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