【制作実習】HTTP経由でダンジョンデータダウンロード、その1

いちおう、リモートサーバーからZIPに圧縮したデータを取得して、ローカルフォルダに保存することはできた。

ダンジョンデータはマップ作成ツールで出力したデータフォルダを手作業でZIP化して、WinSCPでリモートサーバーに配置した。

PC、アンドロイドともダウンロードから保存まではうまく行った。

しかしだ。

ZIP解凍をしようとするとなぜかアンドロイドではエラーが発生して解凍に失敗する。

ちなみにZIP解凍には、別途 DotNetZip ライブラリをダウンロードして使用している。

エラーメッセージは下記。

“An exception was thrown by the type initializer for Ionic.Zip.ZipFile”

原因がわからず、ネットの情報も少なく、ちょっと長引きそう。

いちおう、ここまでやったことを備忘録として記載しておく。

【HTTP経由のダウンロード】
・どんな処理をしているか、という部分だけフラットに書くとこうなる。

www = new WWW(url);
yield return www;
if (string.IsNullOrEmpty(www.error))
{
    //ZIPファイルのバイトデータ
    byte[] bytes = www.bytes;

    //いったんローカルフォルダに保存する
    //ちなみにApplication.persistentDataPathは
    //アンドロイドの場合、/data/data/<アプリのID>/files/となる。
    //このフォルダの確認方法はちょっと特殊なので後述する。
    string filePath = Application.persistentDataPath + zipFileName;
    FileStream fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write);
    BinaryWriter writer = new BinaryWriter(fileStream);
    writer.Write(bytes);
    writer.Close();
}

【ちゃんと保存できたか確認する】
上述したけれども、Unityからファイルを出力する場合、多くの場合、Application.persistentDataPathに保存することになるだろう。
この変数が示すパスは、アンドロイドだと/data/data/<アプリのID>/files/となる。
しかし、このフォルダは通常のやり方(ファイルマネージャアプリとか、USB接続とか)だと中を見ることができない。
では、どうやって中身を調べるかというと、adbを使用する。
adbは、アンドロイドのSDKについているデバッグツールで、パスが通っていればコマンドプロンプトから adb で起動できる。

ただし、アプリがリリースビルドだと、パーミッションがなく観ることができないので、ビルド設定をデバッグビルドにしておく必要がある(冒頭の画像参照)

以下、コマンドプロンプトからadbの一連の操作のスクショを貼り付けておく。
20141112-2

zipファイルの解凍は次回(うまくいけば)

4年前

コメントを残す

メールアドレスが公開されることはありません。